Interact with ServiceNow records
This guide demonstrates how to implement self-service actions that interact with any ServiceNow record and delete ServiceNow incidents directly from Port using synced webhooks.
Use casesβ
- Provide developers and managers with safe, self-serve CRUD operations on ServiceNow records.
- Automate table record creation, updates, or removal as part of CI/CD or maintenance workflows.
Prerequisitesβ
- Complete the onboarding process.
- Access to your ServiceNow account with permissions to manage records in relevant tables.
Implementationβ
To enable interaction with ServiceNow from Port, we will configure four self-service actions:
- Create a ServiceNow record
- Update a ServiceNow record
- Delete a ServiceNow record
- Delete a ServiceNow incident
These actions use Portβs synced webhooks to communicate with ServiceNowβs REST API and rely on Port's secret manager to securely store authentication credentials.
Add Port secretsβ
To add a secret to your portal:
-
In your Port application, click on your profile picture
.
-
Click on Credentials.
-
Click on the
Secretstab. -
Click on
+ Secretand add the following secrets:-
SERVICENOW_INSTANCE_URL- The ServiceNow instance URL. For example https://example-id.service-now.com. -
SERVICENOW_API_TOKEN: A base64 encoded string of your servicenow instance credentials generated as:echo -n "your-instance-username:your-instance-password" | base64
-
Set up self-service actionβ
The following steps will walk you through configuring each self-service action, starting with creating a record, then updating, and finally deleting it from ServiceNow.
Create a ServiceNow recordβ
-
Head to the self-service page.
-
Click on the
+ New Actionbutton. -
Click on the
{...} Edit JSONbutton. -
Copy and paste the following JSON configuration into the editor.
Create a ServiceNow record (Click to expand)
{"identifier": "create_servicenow_record","title": "Create ServiceNow Record","icon": "Servicenow","description": "Create a new record in a specified table in ServiceNow using a JSON payload","trigger": {"type": "self-service","operation": "CREATE","userInputs": {"properties": {"table_name": {"icon": "DefaultProperty","type": "string","title": "Table Name","description": "Name of the table in ServiceNow"},"request_body": {"type": "object","title": "Request Body ","description": "JSON payload for the new record. The payload must follow the table schema in ServiceNow"}},"required": ["request_body","table_name"],"order": ["table_name","request_body"]}},"invocationMethod": {"type": "WEBHOOK","url": "{{.secrets.SERVICENOW_INSTANCE_URL}}/api/now/table/{{.inputs.table_name}}","agent": false,"synchronized": true,"method": "POST","headers": {"RUN_ID": "{{ .run.id }}","Content-Type": "application/json","Accept": "application/json","Authorization": "Basic {{.secrets.SERVICENOW_API_TOKEN}}"},"body": {"{{ spreadValue() }}": "{{ .inputs.request_body }}"}},"requiredApproval": false} -
Click
Save.
Now you should see the Create ServiceNow Record action in the self-service page. π
Update a ServiceNow recordβ
-
Head to the self-service page.
-
Click on the
+ New Actionbutton. -
Click on the
{...} Edit JSONbutton. -
Copy and paste the following JSON configuration into the editor.
Update a ServiceNow record (Click to expand)
{"identifier": "update_service_now_record","title": "Update ServiceNow Record","icon": "Servicenow","description": "Update an existing record in a specified table in ServiceNow based on system ID and a JSON payload","trigger": {"type": "self-service","operation": "DAY-2","userInputs": {"properties": {"table_name": {"type": "string","title": "Table Name","description": "Name of the table in ServiceNow"},"request_body": {"type": "object","title": "Request Body ","description": "JSON payload containing the fields and values to update in the record. Must follow the table schema in ServiceNow"},"system_id": {"type": "string","title": "System ID","description": "Globally Unique ID (GUID) of the record in ServiceNow"}},"required": ["table_name","request_body","system_id"],"order": ["table_name","system_id","request_body"]}},"invocationMethod": {"type": "WEBHOOK","url": "{{.secrets.SERVICENOW_INSTANCE_URL}}/api/now/table/{{.inputs.table_name}}/{{.inputs.system_id}}","agent": false,"synchronized": true,"method": "PATCH","headers": {"RUN_ID": "{{ .run.id }}","Content-Type": "application/json","Accept": "application/json","Authorization": "Basic {{.secrets.SERVICENOW_API_TOKEN}}"},"body": {"{{ spreadValue() }}": "{{ .inputs.request_body }}"}},"requiredApproval": false} -
Click
Save.
Now you should see the Update ServiceNow Record action in the self-service page. π
Delete a ServiceNow recordβ
-
Head to the self-service page.
-
Click on the
+ New Actionbutton. -
Click on the
{...} Edit JSONbutton. -
Copy and paste the following JSON configuration into the editor.
Delete a ServiceNow record (Click to expand)
{"identifier": "delete_service_now_record","title": "Delete ServiceNow Record","icon": "Servicenow","description": "Delete a record based on system ID from a specified table in ServiceNow","trigger": {"type": "self-service","operation": "DELETE","userInputs": {"properties": {"table_name": {"icon": "DefaultProperty","type": "string","title": "Table Name","description": "Name of the table in ServiceNow"},"system_id": {"type": "string","title": "System ID","description": "Globally Unique ID (GUID) of the record in ServiceNow"}},"required": ["system_id","table_name"],"order": ["table_name","system_id"]}},"invocationMethod": {"type": "WEBHOOK","url": "{{.secrets.SERVICENOW_INSTANCE_URL}}/api/now/table/{{.inputs.table_name}}/{{.inputs.system_id}}","agent": false,"synchronized": true,"method": "DELETE","headers": {"RUN_ID": "{{ .run.id }}","Content-Type": "application/json","Accept": "application/json","Authorization": "Basic {{.secrets.SERVICENOW_API_TOKEN}}"},"body": {}},"requiredApproval": false} -
Click
Save.
Now you should see the Delete ServiceNow Record action in the self-service page. π
Delete a ServiceNow incidentβ
-
Head to the self-service page.
-
Click on the
+ New Actionbutton. -
Click on the
{...} Edit JSONbutton. -
Copy and paste the following JSON configuration into the editor.
Delete ServiceNow Incident (Click to expand)
{"identifier": "delect_servicenow_incident","title": "Delect ServiceNow Incident","icon": "Servicenow","description": "Deletes an incident from the ServiceNow incident table using a unique system ID","trigger": {"type": "self-service","operation": "DELETE","userInputs": {"properties": {},"required": [],"order": []},"blueprintIdentifier": "servicenowIncident"},"invocationMethod": {"type": "WEBHOOK","url": "{{.secrets.SERVICENOW_INSTANCE_URL}}/api/now/table/incident/{{.entity.identifier}}","agent": false,"synchronized": true,"method": "DELETE","headers": {"RUN_ID": "{{ .run.id }}","Content-Type": "application/json","Accept": "application/json","Authorization": "Basic {{.secrets.SERVICENOW_API_TOKEN}}"},"body": {}},"requiredApproval": false} -
Click
Save.
Now you should see the Delect ServiceNow Incident action in the self-service page. π
Create an automation to remove entity from Port
Once the incident is deleted from ServiceNow, we want to automatically remove the corresponding entity in Port. To achieve this behaviour:
-
Head to the automations page.
-
Click on the
+ Automationbutton. -
Copy and paste the following JSON configuration into the editor.
Delete ServiceNow incident in Port automation (Click to expand)
{"identifier": "servicenow_incident_delete_sync_status","title": "Remove Deleted Incident from Port","description": "Removes the deleted entity in Port when after it is deleted from ServiceNow","trigger": {"type": "automation","event": {"type": "RUN_UPDATED","actionIdentifier": "delect_servicenow_incident"},"condition": {"type": "JQ","expressions": [".diff.after.status == \"SUCCESS\""],"combinator": "and"}},"invocationMethod": {"type": "WEBHOOK","url": "https://api.port.io/v1/blueprints/{{.event.diff.after.blueprint.identifier}}/entities/{{.event.diff.after.entity.identifier}}","agent": false,"synchronized": true,"method": "DELETE","headers": {"RUN_ID": "{{.event.diff.after.id}}","Content-Type": "application/json","Accept": "application/json"},"body": {}},"publish": true} -
Click
Save.
Now, whenever a user runs the Delete ServiceNow Incident action:
- The incident is deleted directly from ServiceNow via webhook.
- The corresponding entity in Port is automatically removed, keeping your catalog clean and consistent.