> ## Documentation Index
> Fetch the complete documentation index at: https://docs.modulex.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# ServiceNow Integration for AI Agents & Workflows

> Enterprise IT Service Management (ITSM) platform for managing incidents, cases, and service requests. Create and manage incidents, cases, and perform CRUD operations on any ServiceNow table.

{/* Self-hosted logo — build-time vendored from modulex.json / Iconify (see scripts/lib/logo.js). */}

<img src="https://mintcdn.com/modulexaillc/df8MOr-hXotYLTh5/logos/servicenow.svg?fit=max&auto=format&n=df8MOr-hXotYLTh5&q=85&s=c6247610558bd3c96f7e831a58dd7381" alt="ServiceNow logo" width="72" height="72" data-path="logos/servicenow.svg" />

## Overview

Add **ServiceNow** to any ModuleX agent or workflow. Enterprise ITSM integration for ServiceNow: Trouble Ticket API for incidents/cases, Table API for full CRUD on any ServiceNow table. Targets per-tenant instances at `https://{instance_name}.service-now.com`.

<Info>
  **Categories**: Developer Tools & Infrastructure · Automation · Development · Miscellaneous · Itsm · Servicenow · **Auth**: OAuth 2.0 (Connected App), Access Token · **Actions**: 7
</Info>

## Authentication

<Tabs>
  <Tab title="OAuth 2.0 (Connected App)">
    ### OAuth 2.0 (Connected App)

    Authenticate using ServiceNow OAuth 2.0. Requires creating an OAuth API endpoint for external clients in your ServiceNow instance.

    #### Required Credentials

    | Field         | Description                                                                                                               | Required | Format     |
    | ------------- | ------------------------------------------------------------------------------------------------------------------------- | -------- | ---------- |
    | Client ID     | The Client ID from your ServiceNow OAuth application                                                                      | Yes      | `-`        |
    | Client Secret | The Client Secret from your ServiceNow OAuth application                                                                  | Yes      | `-`        |
    | Instance Name | Your ServiceNow instance name (e.g. 'dev12345' from [https://dev12345.service-now.com](https://dev12345.service-now.com)) | Yes      | `dev12345` |

    #### OAuth Configuration

    * **Authorization URL**: `https://{instance_name}.service-now.com/oauth_auth.do`
    * **Token URL**: `https://{instance_name}.service-now.com/oauth_token.do`
    * **Scopes**: `useraccount`
  </Tab>

  <Tab title="Access Token">
    ### Access Token

    Authenticate using a manually obtained ServiceNow access token. Useful for development and testing.

    #### Required Credentials

    | Field         | Description                        | Required | Format     |
    | ------------- | ---------------------------------- | -------- | ---------- |
    | Access Token  | Your ServiceNow OAuth access token | Yes      | `-`        |
    | Instance Name | Your ServiceNow instance name      | Yes      | `dev12345` |
  </Tab>
</Tabs>

## Available Actions

<AccordionGroup>
  <Accordion title="create_case — Create a new Case record in ServiceNow for customer service management">
    ### Parameters

    <ResponseField name="description" type="string" required>
      Detailed description of the issue
    </ResponseField>

    <ResponseField name="severity" type="string" required>
      Priority/severity: '1' Critical, '2' High, '3' Moderate, '4' Low
    </ResponseField>

    <ResponseField name="name" type="string">
      Short description of the case
    </ResponseField>

    <ResponseField name="status" type="string">
      Current status of the case (Default: `New`)
    </ResponseField>

    <ResponseField name="channel_name" type="string">
      Channel (contact\_type) the case came in through
    </ResponseField>

    <ResponseField name="account_id" type="string">
      Sys\_id of the account related to the case
    </ResponseField>

    <ResponseField name="contact_id" type="string">
      Sys\_id of the contact related to the case
    </ResponseField>

    <ResponseField name="work_note" type="string">
      Internal work note for the case
    </ResponseField>

    <ResponseField name="comment" type="string">
      Additional comment for the case
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "result": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Result"
        }
      },
      "required": [
        "success"
      ],
      "title": "CreateCaseOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="create_incident — Create a new Incident record in ServiceNow for IT service management">
    ### Parameters

    <ResponseField name="description" type="string" required>
      Detailed description of the incident
    </ResponseField>

    <ResponseField name="severity" type="string" required>
      Priority/severity: '1' Critical, '2' High, '3' Moderate, '4' Low, '5' Planning
    </ResponseField>

    <ResponseField name="name" type="string">
      Short description of the incident
    </ResponseField>

    <ResponseField name="status" type="string">
      Current status of the incident (Default: `New`)
    </ResponseField>

    <ResponseField name="contact_method" type="string">
      Name of the contact method (contact\_type)
    </ResponseField>

    <ResponseField name="company_id" type="string">
      Sys\_id of the company
    </ResponseField>

    <ResponseField name="user_id" type="string">
      Sys\_id of the user
    </ResponseField>

    <ResponseField name="work_note" type="string">
      Internal work note for the incident
    </ResponseField>

    <ResponseField name="comment" type="string">
      Additional comment for the incident
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "result": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Result"
        }
      },
      "required": [
        "success"
      ],
      "title": "CreateIncidentOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="create_table_record — Insert a new record in any specified ServiceNow table">
    ### Parameters

    <ResponseField name="table_name" type="string" required>
      Table to create the record in (e.g. 'incident', 'change\_request')
    </ResponseField>

    <ResponseField name="table_record" type="object" required>
      Record data — field name/value pairs
    </ResponseField>

    <ResponseField name="api_version" type="string">
      API version number ('v1', 'v2', or 'latest')
    </ResponseField>

    <ResponseField name="display_value" type="string">
      Return display values ('true'), actual values ('false'), or both ('all') (Default: `false`)
    </ResponseField>

    <ResponseField name="exclude_reference_link" type="boolean">
      Exclude Table API links for reference fields (Default: `false`)
    </ResponseField>

    <ResponseField name="fields" type="string">
      Comma-separated list of fields to return
    </ResponseField>

    <ResponseField name="view" type="string">
      Render the response according to the specified UI view
    </ResponseField>

    <ResponseField name="input_display_value" type="boolean">
      Treat input values as display values (Default: `false`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "table": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Table"
        },
        "record": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Record"
        }
      },
      "required": [
        "success"
      ],
      "title": "CreateTableRecordOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="get_table_record — Retrieve a specific record from a ServiceNow table by sys_id">
    ### Parameters

    <ResponseField name="table_name" type="string" required>
      Table containing the record
    </ResponseField>

    <ResponseField name="sys_id" type="string" required>
      Unique identifier (sys\_id) of the record
    </ResponseField>

    <ResponseField name="api_version" type="string">
      API version number ('v1', 'v2', or 'latest')
    </ResponseField>

    <ResponseField name="display_value" type="string">
      Return display values ('true'), actual values ('false'), or both ('all') (Default: `false`)
    </ResponseField>

    <ResponseField name="exclude_reference_link" type="boolean">
      Exclude Table API links for reference fields (Default: `false`)
    </ResponseField>

    <ResponseField name="fields" type="string">
      Comma-separated list of fields to return
    </ResponseField>

    <ResponseField name="view" type="string">
      Render the response according to the specified UI view
    </ResponseField>

    <ResponseField name="query_no_domain" type="boolean">
      Access data across domains if authorized (Default: `false`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "table": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Table"
        },
        "sys_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Sys Id"
        },
        "record": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Record"
        }
      },
      "required": [
        "success"
      ],
      "title": "GetTableRecordOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="get_table_records — Retrieve multiple records from a ServiceNow table with optional filtering">
    ### Parameters

    <ResponseField name="table_name" type="string" required>
      Table containing the records
    </ResponseField>

    <ResponseField name="api_version" type="string">
      API version number ('v1', 'v2', or 'latest')
    </ResponseField>

    <ResponseField name="display_value" type="string">
      Return display values ('true'), actual values ('false'), or both ('all') (Default: `false`)
    </ResponseField>

    <ResponseField name="exclude_reference_link" type="boolean">
      Exclude Table API links for reference fields (Default: `false`)
    </ResponseField>

    <ResponseField name="fields" type="string">
      Comma-separated list of fields to return
    </ResponseField>

    <ResponseField name="view" type="string">
      Render the response according to the specified UI view
    </ResponseField>

    <ResponseField name="query" type="string">
      Encoded query string (e.g. 'active=true^priority=1')
    </ResponseField>

    <ResponseField name="suppress_pagination_header" type="boolean">
      Suppress pagination header (Default: `false`)
    </ResponseField>

    <ResponseField name="limit" type="integer">
      Maximum results per page (default 10000)
    </ResponseField>

    <ResponseField name="query_category" type="string">
      Read-replica category for the query
    </ResponseField>

    <ResponseField name="query_no_domain" type="boolean">
      Access data across domains if authorized (Default: `false`)
    </ResponseField>

    <ResponseField name="no_count" type="boolean">
      Skip select count(\*) on the table (Default: `false`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "table": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Table"
        },
        "records": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Records",
          "type": "array"
        },
        "count": {
          "default": 0,
          "title": "Count",
          "type": "integer"
        }
      },
      "required": [
        "success"
      ],
      "title": "GetTableRecordsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="update_table_record — Update an existing record in a ServiceNow table">
    ### Parameters

    <ResponseField name="table_name" type="string" required>
      Table containing the record
    </ResponseField>

    <ResponseField name="sys_id" type="string" required>
      Sys\_id of the record to update
    </ResponseField>

    <ResponseField name="update_fields" type="object" required>
      Field name/value pairs to update
    </ResponseField>

    <ResponseField name="api_version" type="string">
      API version number ('v1', 'v2', or 'latest')
    </ResponseField>

    <ResponseField name="display_value" type="string">
      Return display values ('true'), actual values ('false'), or both ('all') (Default: `false`)
    </ResponseField>

    <ResponseField name="exclude_reference_link" type="boolean">
      Exclude Table API links for reference fields (Default: `false`)
    </ResponseField>

    <ResponseField name="fields" type="string">
      Comma-separated list of fields to return
    </ResponseField>

    <ResponseField name="view" type="string">
      Render the response according to the specified UI view
    </ResponseField>

    <ResponseField name="input_display_value" type="boolean">
      Treat input values as display values (Default: `false`)
    </ResponseField>

    <ResponseField name="query_no_domain" type="boolean">
      Access data across domains if authorized (Default: `false`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "table": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Table"
        },
        "sys_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Sys Id"
        },
        "record": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Record"
        }
      },
      "required": [
        "success"
      ],
      "title": "UpdateTableRecordOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="delete_table_record — Delete a record from a ServiceNow table">
    ### Parameters

    <ResponseField name="table_name" type="string" required>
      Table containing the record
    </ResponseField>

    <ResponseField name="sys_id" type="string" required>
      Sys\_id of the record to delete
    </ResponseField>

    <ResponseField name="api_version" type="string">
      API version number ('v1', 'v2', or 'latest')
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "table": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Table"
        },
        "sys_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Sys Id"
        }
      },
      "required": [
        "success"
      ],
      "title": "DeleteTableRecordOutput",
      "type": "object"
    }
    ```
  </Accordion>
</AccordionGroup>

## Limits & Quotas

* The Trouble Ticket API hits the
  `/api/sn_ind_tsm_sdwan/ticket/troubleTicket` plugin endpoint —
  requires that plugin to be installed in the ServiceNow instance.
* Table API supports versioning via `api_version` ('v1', 'v2', or
  'latest' / unspecified for default). The tool builds the path as
  `/api/now/[v1|v2|]table/<table>`.
* `display_value` / `exclude_reference_link` / `view` / `fields` /
  pagination knobs are translated to ServiceNow's `sysparm_*` query
  string conventions.
* Default page limit is 10000 records (Table API default).
* Instance name parsing: bare name (`dev12345`), full hostname
  (`dev12345.service-now.com`), and full URL
  (`https://dev12345.service-now.com`) are all accepted.

## Related integrations

<CardGroup cols={3}>
  <Card title="Pinterest" href="/integrations/tools/pinterest" />

  <Card title="Apify" href="/integrations/tools/apify" />

  <Card title="Browserbase" href="/integrations/tools/browserbase" />
</CardGroup>

## Links

* [ServiceNow](https://www.servicenow.com)
