Connect to ServiceNow
Kindo supports two integration patterns with ServiceNow:
- OAuth 2.0 Client Credentials — Allows Kindo to authenticate with your ServiceNow instance and access its APIs (e.g., reading and creating incidents).
- Direct Webhook URL — Allows ServiceNow to send real-time event notifications (e.g., incident created, updated, resolved) to a Kindo agent via an outbound webhook.
You can use either or both depending on your use case.
OAuth 2.0 Client Credentials
Kindo supports integration with ServiceNow using OAuth 2.0 Client Credentials (CC) for secure authentication.
Prerequisites
You must have the System Administrator role. For certain steps, you will need to elevate your privileges to security_admin.
Step 1: Enable OAuth Client Credentials Grant Type
-
Log in to ServiceNow with your System Administrator account.
-
Elevate your role to
security_admin. -
Navigate to System Properties (
https://<instance_id>.service-now.com/sys_properties_list.do). -
Add a new property with the following values:
Field Value Name glide.oauth.inbound.client.credential.grant_type.enabledDescription (Optional) Enable OAuth client-credentials grant type Type true | false Value true -
Save the property.
Step 2: Register the OAuth Application
-
Go to Application Registry in ServiceNow.
-
Create a new OAuth application with the following settings:
Field Value Application Global OAuth Application User The Service Account user that Kindo will use for authentication Client ID Auto-filled Client Secret Auto-generated on save Scope Restriction Broadly Scoped -
Save the OAuth application configuration.
Next Steps
Once these steps are complete, your ServiceNow instance will be ready for integration with Kindo using OAuth 2.0 Client Credentials.
- In Kindo, open the Command Center and, under Manage Your Integrations, connect to ServiceNow.
- Enter the Client ID and Client Secret from Step 2.
- Provide your ServiceNow instance URL (e.g.,
https://<instance_id>.service-now.com). - Click Connect to complete the integration.
If you need further assistance, please refer to ServiceNow’s documentation or contact your Kindo support representative.
Direct Webhook URL
ServiceNow can send real-time event notifications to a Kindo agent using a Direct Webhook URL. When an incident (or other record) is created or updated, ServiceNow sends a POST request with the record data to your agent’s webhook endpoint, triggering the agent automatically.
This is useful when you want a Kindo agent to react to ServiceNow events — for example, triaging new incidents, summarizing updates, or escalating based on priority.
Prerequisites
- A Kindo agent with a Direct Webhook URL trigger saved. See Creating Agents — Direct Webhook URL Triggers for setup instructions. Copy the generated webhook URL — you will need it in the steps below.
- System Administrator access to your ServiceNow instance.
Step 1: Create an Outbound REST Message
-
In ServiceNow, navigate to System Web Services > Outbound > REST Message.
-
Click New and fill in the following:
Field Value Name Kindo Agent WebhookEndpoint Your Kindo webhook URL (e.g., https://api.kindo.ai/webhook/agent/<workflowId>/<token>)Authentication No authentication (the secret token is embedded in the URL) -
Click Submit.
Step 2: Add an HTTP Method
-
Open the REST Message you just created.
-
In the HTTP Methods related list at the bottom, click New.
-
Fill in the following:
Field Value Name POSTHTTP Method POST -
Switch to the HTTP Request tab.
-
In the HTTP Headers section, click Insert a new row and add:
Name Value Content-Typeapplication/json -
In the Content field, paste a JSON payload template. Customize the fields based on what your Kindo agent needs:
{"event_type": "incident_update","incident_number": "${number}","sys_id": "${sys_id}","short_description": "${short_description}","description": "${description}","state": "${state}","priority": "${priority}","urgency": "${urgency}","assigned_to": "${assigned_to}","assignment_group": "${assignment_group}","caller": "${caller_id}","category": "${category}","subcategory": "${subcategory}","created_on": "${sys_created_on}","updated_on": "${sys_updated_on}"} -
Click Auto-generate variables to create variable substitution entries for each
${...}placeholder. -
Click Submit.
Step 3: Create a Business Rule
The Business Rule tells ServiceNow when to fire the webhook. In this example, it fires whenever an incident is created or updated.
-
Navigate to System Definition > Business Rules and click New.
-
Fill in the top section:
Field Value Name Send to Kindo on Incident UpdateTable Incident [incident] Active Checked Advanced Checked -
Switch to the When to run tab and configure:
Field Value When afterInsert Checked Update Checked Optionally add Filter Conditions to narrow when the rule fires (e.g., State changes to Resolved).
-
Switch to the Advanced tab and paste the following script:
(function executeRule(current, previous) {try {var rm = new sn_ws.RESTMessageV2('Kindo Agent Webhook', 'POST');rm.setStringParameterNoEscape('number', current.number.toString());rm.setStringParameterNoEscape('sys_id', current.sys_id.toString());rm.setStringParameterNoEscape('short_description', current.short_description.toString());rm.setStringParameterNoEscape('description', current.description.toString());rm.setStringParameterNoEscape('state', current.state.getDisplayValue());rm.setStringParameterNoEscape('priority', current.priority.getDisplayValue());rm.setStringParameterNoEscape('urgency', current.urgency.getDisplayValue());rm.setStringParameterNoEscape('assigned_to', current.assigned_to.getDisplayValue());rm.setStringParameterNoEscape('assignment_group', current.assignment_group.getDisplayValue());rm.setStringParameterNoEscape('caller_id', current.caller_id.getDisplayValue());rm.setStringParameterNoEscape('category', current.category.toString());rm.setStringParameterNoEscape('subcategory', current.subcategory.toString());rm.setStringParameterNoEscape('sys_created_on', current.sys_created_on.toString());rm.setStringParameterNoEscape('sys_updated_on', current.sys_updated_on.toString());rm.execute();} catch (ex) {gs.error('Kindo webhook failed: ' + ex.getMessage());}})(current, previous); -
Click Submit.
Step 4: Test the Integration
-
In ServiceNow, create or update an Incident that matches your filter conditions.
-
In Kindo, open the agent and check its run history. You should see a new run triggered by the webhook, with the incident data available in the payload.
-
If the agent did not run, check the following in ServiceNow:
- Navigate to System Logs > Outbound HTTP Requests.
- Filter by endpoint containing
kindo.ai. - Verify the HTTP status code is
200and review the request body to confirm the payload was sent correctly.
Customizing the Trigger
- Different tables: Replace
Incident [incident]with any ServiceNow table (e.g., Change Request, Problem, Service Request) and adjust the payload fields accordingly. - Conditional triggers: Use the Business Rule’s Filter Conditions to fire only on specific events — for example, only when priority is Critical, or only when state changes to Resolved.
- Run conditions in Kindo: You can also add a natural-language Run Condition on the Direct Webhook URL trigger in Kindo to filter which payloads actually invoke the agent. See Creating Agents — Run Condition for details.
Security Considerations
The Direct Webhook URL contains a cryptographically random secret token. Treat this URL as a secret — anyone who has it can trigger your agent. To rotate the token, delete the trigger in Kindo and create a new one, then update the Outbound REST Message endpoint in ServiceNow.
For more details, see Creating Agents — Security Considerations.