This guide walks a customer IT or ServiceNow administrator through creating a dedicated read-only integration account, assigning read-only access to the required ServiceNow tables, registering an OAuth 2.0 Client Credentials application, verifying Table API access, and entering the connection details through the Info-Tech submission flow. It includes the ServiceNow tables and fields needed so administrators can complete setup from a single guide.
This version has been aligned to the current ServiceNow Client Credentials workflow, Table API behavior, non-interactive-user guidance, and the current Fivetran ServiceNow connector requirements available as of June 10, 2026.
ABefore you start
You will need:
- Administrator or delegated administrator access to your ServiceNow instance
- Permission to manage OAuth inbound integrations and service-account users
- Permission to grant read access to the required ServiceNow tables
- A dedicated service-account email address you control (e.g.,
cioanalytics@yourcompany.com) - Access to the Info-Tech portal where the instance URL and OAuth credentials will be entered
BServiceNow tables required
The integration requires read-only access to the following ServiceNow tables. Required tables are needed for any ServiceNow tenant; conditional tables are only needed if your instance uses the corresponding ITSM module.
Required tables
task— parent table (shared ticket fields)incident— incident recordssys_user— user / agent referencesys_user_group— assignment group referencesys_user_grmember— group membership bridgesys_user_has_role— user-to-role bridge (agent role names)cmn_department— department referencecmn_location— location referencecontract_sla— SLA definitionstask_sla— SLA instances per tasktask_time_worked— time-worked / worklog entries per tasksys_journal_field— work notes / comments thread
Conditional tables
change_request— if Change Management is enabledproblem— if Problem Management is enabledsc_request— if Service Catalog is enabledsc_req_item— with sc_requestsc_task— with sc_requestasmt_assessment_instance— if Assessment & Survey (CSAT) is enabledasmt_metric_result— with asmt_assessment_instanceasmt_metric— with asmt_assessment_instanceasmt_metric_type— with asmt_assessment_instance
No create, edit, delete, or write-back permissions are required.
ServiceNow stores ticket data across a parent table (
task) and several child tables (incident, change_request, problem, etc.). Shared fields like sys_id, number, state, and opened_at live on the parent. Subclass-specific fields like caller_id, contact_type, category, and close_code live on the child tables only. Both the parent and the relevant child tables must be granted read access for the integration to work correctly — granting access only to task would result in NULL values for many fields.
- 1Create a dedicated read-only role
- 2Grant table-level read ACLs to the role
- 3Create a dedicated service-account user
- 4Register an OAuth 2.0 Client Credentials application
- 5Verify the OAuth credentials work
- 6Enter credentials in the Info-Tech portal
Create a dedicated role rather than reusing a broad built-in role. This keeps the integration's permissions scoped, auditable, and easy to revoke without affecting other ServiceNow users.
- Open the role list. In the navigator, type
roles.listand press Enter, or browse to System Security → Users and Groups → Roles. - Click New. Create a new role.
- Name the role clearly. Suggested name:
x_cioanalytics_read_onlyorinfotech_cioanalytics_read_only. Follow your organization's naming convention for custom roles. Description: Read-only access for the Info-Tech Customer Data Store integration. - Save the role. Do not add broad inherited roles unless your security team has approved them. Table and field access will be handled in Step 2.
ServiceNow Access Control Lists govern record and field access. Grant only the read access needed by the integration. Do not relax existing ACL conditions or grant create, write, or delete access.
- Open the ACL list. In the navigator, type
sys_security_acl.listand press Enter. - For each required table, create or update a record ACL with these values, following your organization's ACL standards:
- Type: record
- Operation: read
- Name: the table name, such as
task,incident, orsys_user - Roles: add the dedicated read-only role created in Step 1
- Repeat for all required tables:
task,incident,sys_user,sys_user_group,sys_user_grmember,sys_user_has_role,cmn_department,cmn_location,contract_sla,task_sla,task_time_worked,sys_journal_field, andsys_audit_delete. - Also grant read access to the schema metadata tables. The connector reads these during schema discovery to learn which tables and fields exist. Without them the connection fails before any data is read, typically with a message such as “User does not have access to sys_db_object and/or sys_dictionary tables.” For each metadata table —
sys_db_object(the table dictionary),sys_dictionary(the field dictionary), andsys_glide_object(the field-type dictionary) — create two read ACLs:- A record ACL on the table itself — Type
record, Operationread, Namesys_db_object(and again forsys_dictionaryandsys_glide_object). - A field ACL covering all fields — Type
record, Operationread, Namesys_db_object.*(and again forsys_dictionary.*andsys_glide_object.*). On hardened instances the table-level ACL alone can still leave fields denied, so the wildcard field ACL is required.
- A record ACL on the table itself — Type
- Add conditional tables if used: if your instance uses Change Management, also add
change_request; if Problem Management, addproblem; if Service Catalog, addsc_request,sc_req_item, andsc_task; if the Assessment & Survey (CSAT) module is in use, addasmt_assessment_instance,asmt_metric_result,asmt_metric, andasmt_metric_type. - Check field-level ACLs. Some hardened instances restrict fields such as
sys_user.email, phone fields, or journal fields. If field-level ACLs block required fields, grant read access only to the specific fields needed by this guide. - Do not grant write, create, or delete operations. The integration is read-only.
- Alternative: assigning a broad role such as
itilmay be simpler but grants more access than required. Use this only if your security team approves the broader permission model.
Create a service account whose only purpose is API access for this integration. A dedicated non-interactive account avoids tying the connection to a human user and supports clean deactivation if access must be revoked.
- Open the user list. In the navigator, type
sys_user.listand press Enter. - Click New.
- Fill in user details. Suggested values:
- User ID:
cioanalytics - First name:
CIOAnalytics - Last name:
Integration - Email:
cioanalytics@yourcompany.com - Active: checked
- Identity type:
Machine— marks the account as a non-interactive machine identity rather than a person. - Time zone:
GMT
- User ID:
- Save the user.
- Assign the read-only role. Open the user record, scroll to the Roles related list, click Edit, and add the dedicated read-only role from Step 1. Also add the
personalize_dictionaryrole. - Set and store a strong password if your instance requires one. The OAuth Client Credentials token request uses the OAuth client ID and client secret. However, some downstream connector configurations may also require the service-account username and password. Store the password securely and enter it only through the approved Info-Tech submission flow if the final portal requires it.
Use OAuth 2.0 Client Credentials Grant for this trusted, server-side integration. This flow lets the integration request an access token using a client ID and client secret, without an interactive user login. Newer instances may expose the same setup through Machine Identity Console → Inbound integrations.
- Choose the setup path available in your instance. Many instances use System OAuth → Application Registry. Newer instances may expose the same inbound OAuth setup through Machine Identity Console → Inbound integrations.
- Create the OAuth client. If using Application Registry, click New and select Create an OAuth API endpoint for external clients.
- Name the application. Suggested name:
Info-Tech CIOAnalytics. - Set the grant type. Set Default Grant Type or Grant Type to
Client Credentials. Do not enable Authorization Code or OIDC-specific options for this integration. - Enable the inbound Client Credentials grant for the instance. ServiceNow gates the inbound Client Credentials flow behind a system property that is off by default. If it is not enabled, the token request in Step 5 will fail even when the OAuth client is configured correctly. In the navigator, type
sys_properties.listand press Enter, then search forglide.oauth.inbound.client.credential.grant_type.enabled. If the property exists, set its Value totrue. If it does not exist, click New and create it with Nameglide.oauth.inbound.client.credential.grant_type.enabled, Typetrue | false, and Valuetrue. This typically requires the admin role. - Bind the OAuth client to the service account. Set OAuth Application User or User to the
cioanalyticsservice account created in Step 3. If the field is not visible on the OAuth client form, use Configure → Form Layout and add OAuth Application User and Default Grant Type. - Configure the Auth scope. Scroll to the Auth scope section of the application form. Under Configure auth scopes, set the Auth scope dropdown to
useraccount. Leave the Limit authorization to the following APIs field blank. Under Scope validation settings, the Allow access only to APIs in selected scope checkbox will be automatically disabled — this is expected behaviour when theuseraccountscope is selected. - Leave Redirect URL blank unless your instance requires a value. Redirect URLs are for browser-based authorization-code flows. This guide uses Client Credentials Grant.
- Do not configure refresh tokens for this guide. Client Credentials integrations request new access tokens using the client ID and secret. Refresh-token handling should only be added if your security architecture explicitly requires it.
- Save the application. Record the Client ID, securely reveal and record the Client Secret, and keep your ServiceNow instance URL, such as
https://yourinstance.service-now.com, for Step 5 and Step 6.
Before entering credentials in the Info-Tech submission flow, confirm that the OAuth client can mint an access token and that the service account can read the required ServiceNow tables through the Table API.
- Mint an access token. Run from a terminal, replacing the placeholders:
You should receive a JSON response containing ancurl -X POST "https://yourinstance.service-now.com/oauth_token.do" \ --header "Content-Type: application/x-www-form-urlencoded" \ --data-urlencode "grant_type=client_credentials" \ --data-urlencode "client_id=YOUR_CLIENT_ID" \ --data-urlencode "client_secret=YOUR_CLIENT_SECRET"access_token,token_type, andexpires_in. If you getinvalid_client, confirm the Client ID and Client Secret. If you getunsupported_grant_typeoraccess_denied, confirm the OAuth client is configured for Client Credentials and is bound to the service account. If the response says the propertyglide.oauth.inbound.client.credential.grant_type.enabledmust be defined and set to true, the instance-level Client Credentials grant has not been enabled — set that system property to true as described in Step 4, then retry. - Test a basic table read. Using the access token from the previous step:
A successful response returns a JSONcurl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Accept: application/json" \ "https://yourinstance.service-now.com/api/now/table/incident?sysparm_limit=1"resultarray.401 Unauthorizedusually means the token is invalid or expired;403 Forbiddenusually means the service account lacks read access to the requested table or field. - Test required table reads. Confirm each endpoint returns a successful response. An empty result can be acceptable for tables with no records, but authentication and authorization should still succeed:
/api/now/table/task?sysparm_limit=1/api/now/table/incident?sysparm_limit=1/api/now/table/sys_user?sysparm_limit=1/api/now/table/sys_user_group?sysparm_limit=1/api/now/table/sys_user_grmember?sysparm_limit=1/api/now/table/sys_user_has_role?sysparm_limit=1/api/now/table/cmn_department?sysparm_limit=1/api/now/table/cmn_location?sysparm_limit=1/api/now/table/contract_sla?sysparm_limit=1/api/now/table/task_sla?sysparm_limit=1/api/now/table/task_time_worked?sysparm_limit=1/api/now/table/sys_journal_field?sysparm_limit=1
- Test the schema metadata tables. These must succeed for schema discovery; a 403 here is the cause of the “User does not have access to sys_db_object and/or sys_dictionary tables” error. Confirm each returns a successful response:
/api/now/table/sys_db_object?sysparm_limit=1/api/now/table/sys_dictionary?sysparm_limit=1/api/now/table/sys_glide_object?sysparm_limit=1
- Test conditional tables if used. If your instance uses Change Management, Problem Management, Service Catalog, or the Assessment & Survey (CSAT) module, also confirm:
/api/now/table/change_request?sysparm_limit=1/api/now/table/problem?sysparm_limit=1/api/now/table/sc_request?sysparm_limit=1/api/now/table/sc_req_item?sysparm_limit=1/api/now/table/sc_task?sysparm_limit=1/api/now/table/asmt_assessment_instance?sysparm_limit=1/api/now/table/asmt_metric_result?sysparm_limit=1/api/now/table/asmt_metric?sysparm_limit=1/api/now/table/asmt_metric_type?sysparm_limit=1
- Test display and raw values. Run:
The response should include both raw and display values. This is useful when validating reference fields, choice fields, dates, and SLA duration fields.curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Accept: application/json" \ "https://yourinstance.service-now.com/api/now/table/contract_sla?sysparm_limit=1&sysparm_display_value=all"
- ServiceNow navigation varies by release, role, and enabled experiences. This guide includes both the legacy Application Registry path and the newer Machine Identity Console path where relevant.
- If your security team requires more granular access, prefer field-level read ACLs and a dedicated custom role over broad built-in roles.
- Questions about business purpose, data scope, or onboarding sequencing can be directed to your Info-Tech onboarding contact.