ServiceNow Integration
CloudZero offers an app integration with ServiceNow so you can create ServiceNow tickets from Optimize Recommendations and Anomalies, helping your team to track and resolve cloud cost issues in the tools they already use.
After you create a ticket linked to a Recommendation or an Anomaly, status changes made in ServiceNow sync back so you can view the current state from within CloudZero. Status changes sync on a 15-minute polling window.
Unlike the Jira integration, where CloudZero hosts a single shared OAuth application, the ServiceNow OAuth application lives in your own ServiceNow instance. You register an application in your instance and provide CloudZero with the instance URL, Client ID, and Client Secret. CloudZero then authenticates to ServiceNow using the OAuth 2.0 client credentials grant.
Before you begin: prerequisites
CloudZero prerequisites
Only users with the necessary permissions can configure app integrations in CloudZero. For information about how to manage permissions, see Role-based Access Control.
ServiceNow prerequisites
Because CloudZero authenticates with the OAuth 2.0 client credentials grant, your ServiceNow instance must be explicitly configured to accept that grant for inbound requests. This is not enabled by default. Complete all three of the following requirements before you connect, or the connection will fail during the token exchange with an error such as client_credentials grant_type request however integration user is not configured for OAuth.
These are ServiceNow-side configuration steps performed by a ServiceNow administrator (the
oauth_adminrole is required). CloudZero cannot perform them for you.
1. Run ServiceNow Washington DC or later
Support for the inbound client credentials grant type was introduced in the ServiceNow Washington DC release. On earlier releases, ServiceNow does not accept the client credentials grant for inbound OAuth, and the CloudZero connection cannot complete.
For details, see ServiceNow's announcement, Up Your OAuth 2.0 Game: Inbound Client Credentials with Washington.
2. Enable the inbound client credentials system property
Set the system property glide.oauth.inbound.client.credential.grant_type.enabled to true. This property defaults to false, which blocks the client credentials grant even on a supported release.
For step-by-step instructions, see the ServiceNow support article How to configure Client Credentials grant type for inbound OAuth.
3. Register an OAuth endpoint mapped to an application user
In your instance, navigate to All > System OAuth > Application Registry, click New, and select Create an OAuth API endpoint for external clients. When you complete the form:
- Set Name to something identifiable, for example
CloudZero Integration. - Set Client Type to Integration as a Service (or otherwise specify an OAuth Application User). The client credentials grant maps the issued token to a user, so an application user is required — without it, token requests are rejected. See ServiceNow's Configure client type for OAuth and SSO records.
- Grant that application user the
itilrole so it can create and update tickets on CloudZero's behalf. - Leave the Redirect URL field at its default. It is not used by the client credentials grant; it applies only to browser-based authorization code flows.
- After you submit, open the record and copy the Client ID and the Client Secret (click the lock icon to reveal the secret). You will paste both into CloudZero.
For the full field reference, see ServiceNow's Create an endpoint for external clients.
Create a dedicated Application Registry entry for CloudZero rather than reusing an existing one. It isolates CloudZero's access so you can audit and revoke it independently, and there is no limit on how many OAuth entries you can create.
Connect to ServiceNow
After you complete the prerequisites, set up the app integration in CloudZero:
-
In CloudZero, navigate to Settings > App Integrations and select Connect ServiceNow.
-
Enter the following values from the OAuth endpoint you registered in ServiceNow:
- Instance URL — the base URL of your ServiceNow instance, for example
https://your-company.service-now.com. - Client ID — the Client ID from the Application Registry record.
- Client Secret — the Client Secret from the Application Registry record.
- Instance URL — the base URL of your ServiceNow instance, for example
-
Submit the form. CloudZero exchanges the credentials for an access token against your instance's
oauth_token.doendpoint and the integration moves to a Pending state. Complete the instance-linking step to reach Connected.
The App Integrations page then shows that CloudZero is connected to ServiceNow.
Client credentials tokens do not include a refresh token, and ServiceNow access tokens expire after 30 minutes (the default 1800-second lifetime). CloudZero automatically re-authenticates when the token expires, so no action is needed on your part.
You can now create tickets from CloudZero Optimize Recommendations and Anomalies.
Rotate or revoke the ServiceNow credential
You stay in full control of this credential — CloudZero never needs your ServiceNow admin password, only the Client ID and Client Secret from the dedicated Application Registry entry.
- Rotate the secret: Replace the Client Secret on the existing Application Registry entry (the Client ID stays the same), or create a brand-new entry (new Client ID and Secret). Then re-enter the new value(s) in CloudZero via Settings > App Integrations > ServiceNow > Reconnect. CloudZero overwrites the stored secret in place — you do not need to recreate the integration.
- Revoke access: Uncheck Active on the entry, or delete it. CloudZero's access stops at the next token refresh.
If you rotate or revoke on the ServiceNow side without reconnecting in CloudZero, the integration stops working at the next token refresh (within ~30 minutes, given the default 1800-second token lifetime). This is expected — reconnect with the new credential to restore it.
Verify the integration
Verify ticket creation (CloudZero → ServiceNow):
- In CloudZero, navigate to Optimize and find a Recommendation.
- Create a ticket, select your ServiceNow integration, complete the required fields, and submit.
- Open ServiceNow and confirm the incident was created with the correct details.
Verify status sync (ServiceNow → CloudZero):
- In ServiceNow, open the incident you just created and change its State (for example, from "New" to "In Progress"), then click Update.
- In CloudZero, refresh the Recommendation. The status change syncs via polling within 15 minutes.
Disconnect ServiceNow
To disconnect the ServiceNow app integration, navigate to Settings > App Integrations and select Disconnect ServiceNow.
After disconnecting ServiceNow from CloudZero, tickets created from Optimize or Anomalies remain in ServiceNow. However, you will no longer be able to create new tickets from Optimize or Anomalies, and any status changes on existing tickets will not be reflected in CloudZero.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
Connection fails during setup with a client_credentials grant_type / "integration user is not configured for OAuth" error | Client credentials grant not enabled, or no application user on the OAuth endpoint | Confirm the three ServiceNow prerequisites: Washington DC or later, glide.oauth.inbound.client.credential.grant_type.enabled set to true, and an application user (Client Type = Integration as a Service) on the Application Registry entry |
| "Unauthorized" when creating tickets | Application user missing the itil role | Grant the itil role to the OAuth application user in ServiceNow |
| Integration stops working ~30 minutes after a credential change | Secret was rotated or revoked in ServiceNow without reconnecting in CloudZero | Reconnect via Settings > App Integrations > ServiceNow > Reconnect with the new Client ID/Secret |
| Tickets created but status doesn't sync | Status change hasn't been picked up by the next polling cycle yet | Wait up to 15 minutes for the next sync, then refresh the Recommendation or Anomaly in CloudZero |
Updated 15 days ago

