Skip to content

integrations/ticketing/servicenow/dist/manifest

Variables

serviceNowTicketingProviderManifest

const serviceNowTicketingProviderManifest: {
  capabilities: {
     audiences?: ("internal-support" | "mixed" | "customer-facing")[];
     capability: string;
     changesWorkflow?: boolean;
     description?: string;
     exposesSensitiveData?: boolean;
     extension?: boolean;
     label?: string;
     metadata?: Record<string, unknown>;
     providerObjects?: {
        description?: string;
        kind: string;
        label?: string;
        metadata?: Record<string, unknown>;
        schemaName?: string;
     }[];
     requiresCredential?: boolean;
     sideEffect?: boolean;
  }[];
  category: string;
  channelAudiences: ("internal-support" | "mixed" | "customer-facing")[];
  coverage: {
     evidence: {
        label: string;
        url?: string;
     }[];
     notes: string[];
     scope:   | "support-workflow-subset"
        | "provider-api-subset"
        | "connector-required"
        | "local-protocol"
        | "full-provider-api";
  };
  credentialRequirements: {
     description?: string;
     id: string;
     label?: string;
     metadata?: Record<string, unknown>;
     required: boolean;
     scopes: string[];
  }[];
  directions: (
     | "bidirectional"
     | "receive-only"
     | "send-only"
     | "inbound-only"
    | "outbound-only")[];
  id: string;
  limitations: string[];
  maintainers: {
     name: string;
     type: "official" | "community" | "unknown" | "partner";
     url?: string;
  }[];
  metadata?: Record<string, unknown>;
  name: string;
  operations: {
     alias: string;
     audience?: "internal-support" | "mixed" | "customer-facing";
     audiences?: ("internal-support" | "mixed" | "customer-facing")[];
     capability: string;
     changesWorkflow?: boolean;
     description?: string;
     exposesSensitiveData?: boolean;
     extension: boolean;
     externallyVisible?: boolean;
     inputSchema?: unknown;
     inputSchemaName?: string;
     inputSchemaRef?: string;
     label?: string;
     metadata?: Record<string, unknown>;
     outputSchema?: unknown;
     outputSchemaName?: string;
     outputSchemaRef?: string;
     providerObject?: string;
     providerObjects?: {
        description?: string;
        kind: string;
        label?: string;
        metadata?: Record<string, unknown>;
        schemaName?: string;
     }[];
     providerOperation?: string;
     requiredPolicyIds?: string[];
     requiresApproval?: boolean;
     requiresCredential?: boolean;
     sideEffect?: boolean;
  }[];
  packageName: string;
  privacyNotes: string[];
  provider: string;
  trustLevel: "official" | "community" | "verified" | "experimental";
} & {
  capabilities: readonly [{
     audiences: readonly ["internal-support", "mixed"];
     capability: "create-provider-object";
     changesWorkflow: true;
     description: "Creates SDK-user-selected ServiceNow Table API records such as incidents or cases; generic table names are SDK-owned schema plumbing, not generated per-table coverage.";
     label: "Create ServiceNow records";
     providerObjects: readonly [{
        kind: "servicenowRecord";
        label: "ServiceNow Record";
      }, {
        kind: "servicenowIncident";
        label: "ServiceNow Incident";
        schemaName: "incident";
      }, {
        kind: "servicenowAttachment";
        label: "ServiceNow Attachment";
      }, {
        kind: "servicenowImportSetRecord";
        label: "ServiceNow Import Set Record";
     }];
     requiresCredential: true;
     sideEffect: true;
   }, {
     audiences: readonly ["internal-support", "mixed"];
     capability: "read-provider-object";
     description: "Reads ServiceNow Table API records by table and sys_id.";
     exposesSensitiveData: true;
     label: "Read ServiceNow records";
     providerObjects: readonly [{
        kind: "servicenowRecord";
        label: "ServiceNow Record";
      }, {
        kind: "servicenowAttachment";
        label: "ServiceNow Attachment";
      }, {
        kind: "servicenowImportSetRecord";
        label: "ServiceNow Import Set Record";
     }];
     requiresCredential: true;
   }, {
     audiences: readonly ["internal-support", "mixed"];
     capability: "update-provider-object";
     changesWorkflow: true;
     description: "Updates ServiceNow Table API records such as incidents, comments, state, or assignment fields.";
     exposesSensitiveData: true;
     label: "Update ServiceNow records";
     providerObjects: readonly [{
        kind: "servicenowRecord";
        label: "ServiceNow Record";
      }, {
        kind: "servicenowIncident";
        label: "ServiceNow Incident";
        schemaName: "incident";
     }];
     requiresCredential: true;
     sideEffect: true;
   }, {
     audiences: readonly ["internal-support", "mixed"];
     capability: "search-provider-object";
     description: "Queries ServiceNow Table API records with SDK-user-supplied sysparm_query and field constraints.";
     exposesSensitiveData: true;
     label: "Search ServiceNow records";
     providerObjects: readonly [{
        kind: "servicenowRecord";
        label: "ServiceNow Record";
     }];
     requiresCredential: true;
   }, {
     audiences: readonly ["mixed"];
     capability: "send";
     changesWorkflow: true;
     description: "Posts customer-visible comments to ServiceNow incident records.";
     exposesSensitiveData: true;
     externallyVisible: true;
     label: "Send customer-visible updates";
     providerObjects: readonly [{
        kind: "servicenowIncident";
        label: "ServiceNow Incident";
        schemaName: "incident";
     }];
     requiresCredential: true;
     sideEffect: true;
   }, {
     audiences: readonly ["internal-support", "mixed"];
     capability: "draft";
     changesWorkflow: true;
     description: "Creates internal work notes on ServiceNow incident records.";
     exposesSensitiveData: true;
     externallyVisible: false;
     label: "Create internal notes";
     providerObjects: readonly [{
        kind: "servicenowIncident";
        label: "ServiceNow Incident";
        schemaName: "incident";
     }];
     requiresCredential: true;
     sideEffect: true;
   }, {
     audiences: readonly ["internal-support", "mixed"];
     capability: "attach";
     description: "Uploads attachments to ServiceNow records.";
     exposesSensitiveData: true;
     externallyVisible: true;
     label: "Attach files to ServiceNow records";
     providerObjects: readonly [{
        kind: "servicenowAttachment";
        label: "ServiceNow Attachment";
     }];
     requiresCredential: true;
     sideEffect: true;
   }, {
     audiences: readonly ["internal-support", "mixed"];
     capability: "handoff";
     changesWorkflow: true;
     description: "Provides Table API incident, attachment, and import-set operations used by SDK-user-configured record handoff workflows; this is not native Virtual Agent or Live Agent Chat transfer coverage.";
     label: "Attach record handoff to ServiceNow";
     providerObjects: readonly [{
        kind: "servicenowIncident";
        label: "ServiceNow Incident";
        schemaName: "incident";
      }, {
        kind: "servicenowAttachment";
        label: "ServiceNow Attachment";
      }, {
        kind: "servicenowImportSetRecord";
        label: "ServiceNow Import Set Record";
     }];
     requiresCredential: true;
     sideEffect: true;
  }];
  category: "ticketing";
  channelAudiences: readonly ["internal-support", "mixed"];
  coverage: {
     evidence: readonly [{
        label: "ServiceNow Table API";
        url: "https://www.servicenow.com/docs/r/washingtondc/api-reference/rest-apis/c_TableAPI.html";
      }, {
        label: "ServiceNow Attachment API";
        url: "https://www.servicenow.com/docs/r/washingtondc/api-reference/rest-apis/c_AttachmentAPI.html";
      }, {
        label: "ServiceNow Import Set API";
        url: "https://www.servicenow.com/docs/r/washingtondc/api-reference/rest-apis/c_ImportSetAPI.html";
      }, {
        label: "ServiceNow Virtual Agent API";
        url: "https://www.servicenow.com/docs/r/conversational-interfaces/virtual-agent/virtual-agent-api-landing-page.html";
      }, {
        label: "ServiceNow Virtual Agent Bot Integration API";
        url: "https://www.servicenow.com/docs/r/washingtondc/api-reference/rest-apis/bot-api.html";
      }, {
        label: "ServiceNow Virtual Agent API features";
        url: "https://www.servicenow.com/docs/r/yokohama/conversational-interfaces/virtual-agent/va-api-features.html";
     }];
     notes: readonly ["Coverage is limited to ServiceNow Table API record create/read/update/search, incident creation, Attachment API upload/list, Import Set insert/read, and readiness checks used by Cognidesk support workflows.", "Implementation uses the official @servicenow/sdk-api Connector when instanceUrl/baseUrl and OAuth bearer credentials are configured, with ServiceNowRawClient injection as an override for host-owned transports.", "Generic Table API helpers accept SDK-user-selected table names and fields, but they are not customer-specific generated schema coverage for arbitrary tables, custom fields, ACLs, business rules, or plugins.", "This is not full ServiceNow platform API coverage for Service Catalog/cart, journal-field semantics, attachment download/delete, transform-map lifecycle, scripted REST APIs, workflow APIs, or broader platform administration."];
     scope: "support-workflow-subset";
  };
  credentialRequirements: readonly [{
     description: "The SDK user's ServiceNow instance URL for the built-in official @servicenow/sdk-api Connector transport, for example https://example.service-now.com. Not required when the host injects a ServiceNowRawClient.";
     id: "servicenow-instance";
     label: "ServiceNow instance URL";
     metadata: {
        requiredWhen: "built-in-servicenow-sdk-connector";
     };
     required: false;
   }, {
     description: "Server-side OAuth bearer access for the built-in official @servicenow/sdk-api Connector transport; effective access is governed by ServiceNow roles, ACLs, table access, and any tenant REST API Auth Scopes. Use ServiceNowRawClient injection for other tenant-auth transports.";
     id: "servicenow-api-access";
     label: "ServiceNow API access";
     metadata: {
        privilegeGuidance: "The table_api value is Cognidesk capability guidance, not a universal ServiceNow OAuth scope. The credential must be authorized for Table API, Attachment API, Import Set API, and configured target tables.";
        requiredWhen: "built-in-servicenow-sdk-connector";
        scopeKind: "internal-capability-labels";
     };
     required: false;
     scopes: readonly ["table_api"];
   }, {
     description: "Optional ServiceNowRawClient override supplied by the host application. When configured, Cognidesk delegates operations to that client instead of constructing the built-in @servicenow/sdk-api Connector transport.";
     id: "servicenow-raw-client";
     label: "Host-provided ServiceNow raw client";
     metadata: {
        clientInterface: "ServiceNowRawClient";
        credentialKind: "host-client-override";
        satisfies: readonly ["servicenow-instance", "servicenow-api-access"];
     };
     required: false;
  }];
  directions: readonly ["bidirectional"];
  id: "ticketing.servicenow";
  limitations: readonly ["Available tables, fields, ACLs, business rules, and mandatory fields are owned by the SDK user's ServiceNow instance.", "Handoff timing, approval, field mapping, assignment, and customer visibility are SDK-user configuration."];
  maintainers: readonly [{
     name: "Cognidesk";
     type: "official";
  }];
  metadata: {
     channelCoverage: {
        arbitraryTableTyping: "not-covered";
        attachmentDownloadDelete: "provider-supported-not-implemented";
        attachments: "typed-upload-list";
        catalogWorkflowScriptedRest: "provider-supported-not-implemented";
        cccifCustomChatIntegration: "provider-supported-not-typed";
        connectConversationScopedApi: "provider-supported-not-typed";
        csmCaseApi: "provider-supported-not-typed";
        genericTableApi: "sdk-owned-classified-endpoint";
        importSets: "typed-json-create-read";
        incidents: "typed-create-comment-worknote";
        liveAgentTransfer: "provider-supported-not-typed";
        readinessSearch: "typed-search";
        tableRecords: "typed-json-create-read-update-search";
        taskTableRecords: "provider-supported-not-typed";
        virtualAgentApi: "provider-supported-not-typed";
        virtualAgentBotIntegrationApi: "provider-supported-not-typed";
     };
     checkedProviderApiCoverage: {
        coverageArtifact: "docs/provider-coverage/servicenow-checked-table-attachment-importset-2026-06-18.inventory.json";
        familyCount: 4;
        fullCoverageExportRequirement: "Full instance-specific ServiceNow coverage requires REST API Explorer/OpenAPI export for enabled APIs, table dictionary export, plugin/product inventory, ACL/role evidence, and scripted REST definitions from the SDK user's instance.";
        gapFamilyCount: 1;
        implementedFamilyCount: 3;
        implementedOperationCount: 11;
        sourceKind: "checked-endpoint-family-inventory";
        verifiedAt: "2026-06-18";
     };
     checkedProviderSdk: {
        checkedVersion: "4.8.0";
        license: "MIT";
        package: "@servicenow/sdk-api";
        reason: "OAuth default runtime uses Connector.fetch for create/read/update/attachment/import-set calls and Connector.queryTable for compatible table search calls. Non-OAuth tenant-auth transports must be supplied through ServiceNowRawClient injection instead of a package-owned REST fallback.";
        result: "used-as-runtime-connector";
     };
     implementation: {
        defaultClientPolicy: "use-official-servicenow-sdk-api-connector-for-oauth-runtime-transport; require ServiceNowRawClient injection for non-OAuth tenant-auth transports";
        manifestImport: "no-sdk-client-initialization";
        packageOwnedRestClient: false;
        rawClientEscapeHatch: "ServiceNowTicketingClient.rawClient";
        rawClientOverride: true;
        runtimePackage: "@cognidesk/integration-ticketing-servicenow";
        sdkPackage: "@servicenow/sdk-api";
        sdkRuntimeSurface: "Connector.fetch and Connector.queryTable";
        strategy: "official-sdk-connector";
     };
     sdkDecision: {
        checkedAt: "2026-06-25";
        checkedVersion: "4.8.0";
        license: "MIT";
        package: "@servicenow/sdk-api";
        reason: "The official ServiceNow SDK API exports Connector.fetch and Connector.queryTable as runtime instance transport. It does not provide a ticketing-specific Table/Attachment/Import Set client, so Cognidesk translates ticketing operations into the official connector transport and retains typed rawClient injection for host-owned clients.";
        result: "official-sdk-runtime-connector-not-ticketing-client";
     };
  };
  name: "ServiceNow Ticketing";
  operations: (
     | {
     alias: string;
     audiences: ("internal-support" | "mixed")[];
     capability: string;
     changesWorkflow: true;
     description: string;
     exposesSensitiveData: true;
     extension?: never;
     externallyVisible?: never;
     label: string;
     providerObject: string;
     providerOperation: string;
     requiresApproval?: never;
     requiresCredential: true;
     sideEffect: true;
   }
     | {
     alias: string;
     audiences: ("internal-support" | "mixed")[];
     capability: string;
     changesWorkflow?: never;
     description: string;
     exposesSensitiveData: true;
     extension?: never;
     externallyVisible?: never;
     label: string;
     providerObject: string;
     providerOperation: string;
     requiresApproval?: never;
     requiresCredential: true;
     sideEffect?: never;
   }
     | {
     alias: string;
     audiences: "mixed"[];
     capability: string;
     changesWorkflow: true;
     description: string;
     exposesSensitiveData: true;
     extension?: never;
     externallyVisible: true;
     label: string;
     providerObject: string;
     providerOperation: string;
     requiresApproval: true;
     requiresCredential: true;
     sideEffect: true;
   }
     | {
     alias: string;
     audiences: ("internal-support" | "mixed")[];
     capability: string;
     changesWorkflow: true;
     description: string;
     exposesSensitiveData: true;
     extension?: never;
     externallyVisible: false;
     label: string;
     providerObject: string;
     providerOperation: string;
     requiresApproval?: never;
     requiresCredential: true;
     sideEffect: true;
   }
     | {
     alias: string;
     audiences: ("internal-support" | "mixed")[];
     capability: string;
     changesWorkflow?: never;
     description: string;
     exposesSensitiveData: true;
     extension?: never;
     externallyVisible: true;
     label: string;
     providerObject: string;
     providerOperation: string;
     requiresApproval?: never;
     requiresCredential: true;
     sideEffect: true;
   }
     | {
     alias: string;
     audiences: ("internal-support" | "mixed")[];
     capability: string;
     changesWorkflow: true;
     description: string;
     exposesSensitiveData: true;
     extension: true;
     externallyVisible?: never;
     label: string;
     providerObject: string;
     providerOperation: string;
     requiresApproval?: never;
     requiresCredential: true;
     sideEffect: true;
   }
     | {
     alias: string;
     audiences: ("internal-support" | "mixed")[];
     capability: string;
     changesWorkflow?: never;
     description: string;
     exposesSensitiveData: true;
     extension: true;
     externallyVisible?: never;
     label: string;
     providerObject: string;
     providerOperation: string;
     requiresApproval?: never;
     requiresCredential: true;
     sideEffect?: never;
  })[];
  packageName: "@cognidesk/integration-ticketing-servicenow";
  privacyNotes: readonly ["ServiceNow records can contain customer data, support notes, internal assignment data, and attached workflow context.", "ServiceNow credentials stay server-side and are never exposed through Studio credential status."];
  provider: "servicenow";
  trustLevel: "official";
};

Type Declaration

Name Type
capabilities { audiences?: ("internal-support" | "mixed" | "customer-facing")[]; capability: string; changesWorkflow?: boolean; description?: string; exposesSensitiveData?: boolean; extension?: boolean; label?: string; metadata?: Record\<string, unknown>; providerObjects?: { description?: string; kind: string; label?: string; metadata?: Record\<string, unknown>; schemaName?: string; }[]; requiresCredential?: boolean; sideEffect?: boolean; }[]
category string
channelAudiences ("internal-support" | "mixed" | "customer-facing")[]
coverage { evidence: { label: string; url?: string; }[]; notes: string[]; scope: | "support-workflow-subset" | "provider-api-subset" | "connector-required" | "local-protocol" | "full-provider-api"; }
coverage.evidence { label: string; url?: string; }[]
coverage.notes string[]
coverage.scope | "support-workflow-subset" | "provider-api-subset" | "connector-required" | "local-protocol" | "full-provider-api"
credentialRequirements { description?: string; id: string; label?: string; metadata?: Record\<string, unknown>; required: boolean; scopes: string[]; }[]
directions ( | "bidirectional" | "receive-only" | "send-only" | "inbound-only" | "outbound-only")[]
id string
limitations string[]
maintainers { name: string; type: "official" | "community" | "unknown" | "partner"; url?: string; }[]
metadata? Record\<string, unknown>
name string
operations { alias: string; audience?: "internal-support" | "mixed" | "customer-facing"; audiences?: ("internal-support" | "mixed" | "customer-facing")[]; capability: string; changesWorkflow?: boolean; description?: string; exposesSensitiveData?: boolean; extension: boolean; externallyVisible?: boolean; inputSchema?: unknown; inputSchemaName?: string; inputSchemaRef?: string; label?: string; metadata?: Record\<string, unknown>; outputSchema?: unknown; outputSchemaName?: string; outputSchemaRef?: string; providerObject?: string; providerObjects?: { description?: string; kind: string; label?: string; metadata?: Record\<string, unknown>; schemaName?: string; }[]; providerOperation?: string; requiredPolicyIds?: string[]; requiresApproval?: boolean; requiresCredential?: boolean; sideEffect?: boolean; }[]
packageName string
privacyNotes string[]
provider string
trustLevel "official" | "community" | "verified" | "experimental"

Type Declaration

Name Type
capabilities readonly [{ audiences: readonly ["internal-support", "mixed"]; capability: "create-provider-object"; changesWorkflow: true; description: "Creates SDK-user-selected ServiceNow Table API records such as incidents or cases; generic table names are SDK-owned schema plumbing, not generated per-table coverage."; label: "Create ServiceNow records"; providerObjects: readonly [{ kind: "servicenowRecord"; label: "ServiceNow Record"; }, { kind: "servicenowIncident"; label: "ServiceNow Incident"; schemaName: "incident"; }, { kind: "servicenowAttachment"; label: "ServiceNow Attachment"; }, { kind: "servicenowImportSetRecord"; label: "ServiceNow Import Set Record"; }]; requiresCredential: true; sideEffect: true; }, { audiences: readonly ["internal-support", "mixed"]; capability: "read-provider-object"; description: "Reads ServiceNow Table API records by table and sys_id."; exposesSensitiveData: true; label: "Read ServiceNow records"; providerObjects: readonly [{ kind: "servicenowRecord"; label: "ServiceNow Record"; }, { kind: "servicenowAttachment"; label: "ServiceNow Attachment"; }, { kind: "servicenowImportSetRecord"; label: "ServiceNow Import Set Record"; }]; requiresCredential: true; }, { audiences: readonly ["internal-support", "mixed"]; capability: "update-provider-object"; changesWorkflow: true; description: "Updates ServiceNow Table API records such as incidents, comments, state, or assignment fields."; exposesSensitiveData: true; label: "Update ServiceNow records"; providerObjects: readonly [{ kind: "servicenowRecord"; label: "ServiceNow Record"; }, { kind: "servicenowIncident"; label: "ServiceNow Incident"; schemaName: "incident"; }]; requiresCredential: true; sideEffect: true; }, { audiences: readonly ["internal-support", "mixed"]; capability: "search-provider-object"; description: "Queries ServiceNow Table API records with SDK-user-supplied sysparm_query and field constraints."; exposesSensitiveData: true; label: "Search ServiceNow records"; providerObjects: readonly [{ kind: "servicenowRecord"; label: "ServiceNow Record"; }]; requiresCredential: true; }, { audiences: readonly ["mixed"]; capability: "send"; changesWorkflow: true; description: "Posts customer-visible comments to ServiceNow incident records."; exposesSensitiveData: true; externallyVisible: true; label: "Send customer-visible updates"; providerObjects: readonly [{ kind: "servicenowIncident"; label: "ServiceNow Incident"; schemaName: "incident"; }]; requiresCredential: true; sideEffect: true; }, { audiences: readonly ["internal-support", "mixed"]; capability: "draft"; changesWorkflow: true; description: "Creates internal work notes on ServiceNow incident records."; exposesSensitiveData: true; externallyVisible: false; label: "Create internal notes"; providerObjects: readonly [{ kind: "servicenowIncident"; label: "ServiceNow Incident"; schemaName: "incident"; }]; requiresCredential: true; sideEffect: true; }, { audiences: readonly ["internal-support", "mixed"]; capability: "attach"; description: "Uploads attachments to ServiceNow records."; exposesSensitiveData: true; externallyVisible: true; label: "Attach files to ServiceNow records"; providerObjects: readonly [{ kind: "servicenowAttachment"; label: "ServiceNow Attachment"; }]; requiresCredential: true; sideEffect: true; }, { audiences: readonly ["internal-support", "mixed"]; capability: "handoff"; changesWorkflow: true; description: "Provides Table API incident, attachment, and import-set operations used by SDK-user-configured record handoff workflows; this is not native Virtual Agent or Live Agent Chat transfer coverage."; label: "Attach record handoff to ServiceNow"; providerObjects: readonly [{ kind: "servicenowIncident"; label: "ServiceNow Incident"; schemaName: "incident"; }, { kind: "servicenowAttachment"; label: "ServiceNow Attachment"; }, { kind: "servicenowImportSetRecord"; label: "ServiceNow Import Set Record"; }]; requiresCredential: true; sideEffect: true; }]
category "ticketing"
channelAudiences readonly ["internal-support", "mixed"]
coverage { evidence: readonly [{ label: "ServiceNow Table API"; url: "https://www.servicenow.com/docs/r/washingtondc/api-reference/rest-apis/c_TableAPI.html"; }, { label: "ServiceNow Attachment API"; url: "https://www.servicenow.com/docs/r/washingtondc/api-reference/rest-apis/c_AttachmentAPI.html"; }, { label: "ServiceNow Import Set API"; url: "https://www.servicenow.com/docs/r/washingtondc/api-reference/rest-apis/c_ImportSetAPI.html"; }, { label: "ServiceNow Virtual Agent API"; url: "https://www.servicenow.com/docs/r/conversational-interfaces/virtual-agent/virtual-agent-api-landing-page.html"; }, { label: "ServiceNow Virtual Agent Bot Integration API"; url: "https://www.servicenow.com/docs/r/washingtondc/api-reference/rest-apis/bot-api.html"; }, { label: "ServiceNow Virtual Agent API features"; url: "https://www.servicenow.com/docs/r/yokohama/conversational-interfaces/virtual-agent/va-api-features.html"; }]; notes: readonly ["Coverage is limited to ServiceNow Table API record create/read/update/search, incident creation, Attachment API upload/list, Import Set insert/read, and readiness checks used by Cognidesk support workflows.", "Implementation uses the official @servicenow/sdk-api Connector when instanceUrl/baseUrl and OAuth bearer credentials are configured, with ServiceNowRawClient injection as an override for host-owned transports.", "Generic Table API helpers accept SDK-user-selected table names and fields, but they are not customer-specific generated schema coverage for arbitrary tables, custom fields, ACLs, business rules, or plugins.", "This is not full ServiceNow platform API coverage for Service Catalog/cart, journal-field semantics, attachment download/delete, transform-map lifecycle, scripted REST APIs, workflow APIs, or broader platform administration."]; scope: "support-workflow-subset"; }
coverage.evidence readonly [{ label: "ServiceNow Table API"; url: "https://www.servicenow.com/docs/r/washingtondc/api-reference/rest-apis/c_TableAPI.html"; }, { label: "ServiceNow Attachment API"; url: "https://www.servicenow.com/docs/r/washingtondc/api-reference/rest-apis/c_AttachmentAPI.html"; }, { label: "ServiceNow Import Set API"; url: "https://www.servicenow.com/docs/r/washingtondc/api-reference/rest-apis/c_ImportSetAPI.html"; }, { label: "ServiceNow Virtual Agent API"; url: "https://www.servicenow.com/docs/r/conversational-interfaces/virtual-agent/virtual-agent-api-landing-page.html"; }, { label: "ServiceNow Virtual Agent Bot Integration API"; url: "https://www.servicenow.com/docs/r/washingtondc/api-reference/rest-apis/bot-api.html"; }, { label: "ServiceNow Virtual Agent API features"; url: "https://www.servicenow.com/docs/r/yokohama/conversational-interfaces/virtual-agent/va-api-features.html"; }]
coverage.notes readonly ["Coverage is limited to ServiceNow Table API record create/read/update/search, incident creation, Attachment API upload/list, Import Set insert/read, and readiness checks used by Cognidesk support workflows.", "Implementation uses the official @servicenow/sdk-api Connector when instanceUrl/baseUrl and OAuth bearer credentials are configured, with ServiceNowRawClient injection as an override for host-owned transports.", "Generic Table API helpers accept SDK-user-selected table names and fields, but they are not customer-specific generated schema coverage for arbitrary tables, custom fields, ACLs, business rules, or plugins.", "This is not full ServiceNow platform API coverage for Service Catalog/cart, journal-field semantics, attachment download/delete, transform-map lifecycle, scripted REST APIs, workflow APIs, or broader platform administration."]
coverage.scope "support-workflow-subset"
credentialRequirements readonly [{ description: "The SDK user's ServiceNow instance URL for the built-in official @servicenow/sdk-api Connector transport, for example https://example.service-now.com. Not required when the host injects a ServiceNowRawClient."; id: "servicenow-instance"; label: "ServiceNow instance URL"; metadata: { requiredWhen: "built-in-servicenow-sdk-connector"; }; required: false; }, { description: "Server-side OAuth bearer access for the built-in official @servicenow/sdk-api Connector transport; effective access is governed by ServiceNow roles, ACLs, table access, and any tenant REST API Auth Scopes. Use ServiceNowRawClient injection for other tenant-auth transports."; id: "servicenow-api-access"; label: "ServiceNow API access"; metadata: { privilegeGuidance: "The table_api value is Cognidesk capability guidance, not a universal ServiceNow OAuth scope. The credential must be authorized for Table API, Attachment API, Import Set API, and configured target tables."; requiredWhen: "built-in-servicenow-sdk-connector"; scopeKind: "internal-capability-labels"; }; required: false; scopes: readonly ["table_api"]; }, { description: "Optional ServiceNowRawClient override supplied by the host application. When configured, Cognidesk delegates operations to that client instead of constructing the built-in @servicenow/sdk-api Connector transport."; id: "servicenow-raw-client"; label: "Host-provided ServiceNow raw client"; metadata: { clientInterface: "ServiceNowRawClient"; credentialKind: "host-client-override"; satisfies: readonly ["servicenow-instance", "servicenow-api-access"]; }; required: false; }]
directions readonly ["bidirectional"]
id "ticketing.servicenow"
limitations readonly ["Available tables, fields, ACLs, business rules, and mandatory fields are owned by the SDK user's ServiceNow instance.", "Handoff timing, approval, field mapping, assignment, and customer visibility are SDK-user configuration."]
maintainers readonly [{ name: "Cognidesk"; type: "official"; }]
metadata { channelCoverage: { arbitraryTableTyping: "not-covered"; attachmentDownloadDelete: "provider-supported-not-implemented"; attachments: "typed-upload-list"; catalogWorkflowScriptedRest: "provider-supported-not-implemented"; cccifCustomChatIntegration: "provider-supported-not-typed"; connectConversationScopedApi: "provider-supported-not-typed"; csmCaseApi: "provider-supported-not-typed"; genericTableApi: "sdk-owned-classified-endpoint"; importSets: "typed-json-create-read"; incidents: "typed-create-comment-worknote"; liveAgentTransfer: "provider-supported-not-typed"; readinessSearch: "typed-search"; tableRecords: "typed-json-create-read-update-search"; taskTableRecords: "provider-supported-not-typed"; virtualAgentApi: "provider-supported-not-typed"; virtualAgentBotIntegrationApi: "provider-supported-not-typed"; }; checkedProviderApiCoverage: { coverageArtifact: "docs/provider-coverage/servicenow-checked-table-attachment-importset-2026-06-18.inventory.json"; familyCount: 4; fullCoverageExportRequirement: "Full instance-specific ServiceNow coverage requires REST API Explorer/OpenAPI export for enabled APIs, table dictionary export, plugin/product inventory, ACL/role evidence, and scripted REST definitions from the SDK user's instance."; gapFamilyCount: 1; implementedFamilyCount: 3; implementedOperationCount: 11; sourceKind: "checked-endpoint-family-inventory"; verifiedAt: "2026-06-18"; }; checkedProviderSdk: { checkedVersion: "4.8.0"; license: "MIT"; package: "@servicenow/sdk-api"; reason: "OAuth default runtime uses Connector.fetch for create/read/update/attachment/import-set calls and Connector.queryTable for compatible table search calls. Non-OAuth tenant-auth transports must be supplied through ServiceNowRawClient injection instead of a package-owned REST fallback."; result: "used-as-runtime-connector"; }; implementation: { defaultClientPolicy: "use-official-servicenow-sdk-api-connector-for-oauth-runtime-transport; require ServiceNowRawClient injection for non-OAuth tenant-auth transports"; manifestImport: "no-sdk-client-initialization"; packageOwnedRestClient: false; rawClientEscapeHatch: "ServiceNowTicketingClient.rawClient"; rawClientOverride: true; runtimePackage: "@cognidesk/integration-ticketing-servicenow"; sdkPackage: "@servicenow/sdk-api"; sdkRuntimeSurface: "Connector.fetch and Connector.queryTable"; strategy: "official-sdk-connector"; }; sdkDecision: { checkedAt: "2026-06-25"; checkedVersion: "4.8.0"; license: "MIT"; package: "@servicenow/sdk-api"; reason: "The official ServiceNow SDK API exports Connector.fetch and Connector.queryTable as runtime instance transport. It does not provide a ticketing-specific Table/Attachment/Import Set client, so Cognidesk translates ticketing operations into the official connector transport and retains typed rawClient injection for host-owned clients."; result: "official-sdk-runtime-connector-not-ticketing-client"; }; }
metadata.channelCoverage { arbitraryTableTyping: "not-covered"; attachmentDownloadDelete: "provider-supported-not-implemented"; attachments: "typed-upload-list"; catalogWorkflowScriptedRest: "provider-supported-not-implemented"; cccifCustomChatIntegration: "provider-supported-not-typed"; connectConversationScopedApi: "provider-supported-not-typed"; csmCaseApi: "provider-supported-not-typed"; genericTableApi: "sdk-owned-classified-endpoint"; importSets: "typed-json-create-read"; incidents: "typed-create-comment-worknote"; liveAgentTransfer: "provider-supported-not-typed"; readinessSearch: "typed-search"; tableRecords: "typed-json-create-read-update-search"; taskTableRecords: "provider-supported-not-typed"; virtualAgentApi: "provider-supported-not-typed"; virtualAgentBotIntegrationApi: "provider-supported-not-typed"; }
metadata.channelCoverage.arbitraryTableTyping "not-covered"
metadata.channelCoverage.attachmentDownloadDelete "provider-supported-not-implemented"
metadata.channelCoverage.attachments "typed-upload-list"
metadata.channelCoverage.catalogWorkflowScriptedRest "provider-supported-not-implemented"
metadata.channelCoverage.cccifCustomChatIntegration "provider-supported-not-typed"
metadata.channelCoverage.connectConversationScopedApi "provider-supported-not-typed"
metadata.channelCoverage.csmCaseApi "provider-supported-not-typed"
metadata.channelCoverage.genericTableApi "sdk-owned-classified-endpoint"
metadata.channelCoverage.importSets "typed-json-create-read"
metadata.channelCoverage.incidents "typed-create-comment-worknote"
metadata.channelCoverage.liveAgentTransfer "provider-supported-not-typed"
metadata.channelCoverage.readinessSearch "typed-search"
metadata.channelCoverage.tableRecords "typed-json-create-read-update-search"
metadata.channelCoverage.taskTableRecords "provider-supported-not-typed"
metadata.channelCoverage.virtualAgentApi "provider-supported-not-typed"
metadata.channelCoverage.virtualAgentBotIntegrationApi "provider-supported-not-typed"
metadata.checkedProviderApiCoverage { coverageArtifact: "docs/provider-coverage/servicenow-checked-table-attachment-importset-2026-06-18.inventory.json"; familyCount: 4; fullCoverageExportRequirement: "Full instance-specific ServiceNow coverage requires REST API Explorer/OpenAPI export for enabled APIs, table dictionary export, plugin/product inventory, ACL/role evidence, and scripted REST definitions from the SDK user's instance."; gapFamilyCount: 1; implementedFamilyCount: 3; implementedOperationCount: 11; sourceKind: "checked-endpoint-family-inventory"; verifiedAt: "2026-06-18"; }
metadata.checkedProviderApiCoverage.coverageArtifact "docs/provider-coverage/servicenow-checked-table-attachment-importset-2026-06-18.inventory.json"
metadata.checkedProviderApiCoverage.familyCount 4
metadata.checkedProviderApiCoverage.fullCoverageExportRequirement "Full instance-specific ServiceNow coverage requires REST API Explorer/OpenAPI export for enabled APIs, table dictionary export, plugin/product inventory, ACL/role evidence, and scripted REST definitions from the SDK user's instance."
metadata.checkedProviderApiCoverage.gapFamilyCount 1
metadata.checkedProviderApiCoverage.implementedFamilyCount 3
metadata.checkedProviderApiCoverage.implementedOperationCount 11
metadata.checkedProviderApiCoverage.sourceKind "checked-endpoint-family-inventory"
metadata.checkedProviderApiCoverage.verifiedAt "2026-06-18"
metadata.checkedProviderSdk { checkedVersion: "4.8.0"; license: "MIT"; package: "@servicenow/sdk-api"; reason: "OAuth default runtime uses Connector.fetch for create/read/update/attachment/import-set calls and Connector.queryTable for compatible table search calls. Non-OAuth tenant-auth transports must be supplied through ServiceNowRawClient injection instead of a package-owned REST fallback."; result: "used-as-runtime-connector"; }
metadata.checkedProviderSdk.checkedVersion "4.8.0"
metadata.checkedProviderSdk.license "MIT"
metadata.checkedProviderSdk.package "@servicenow/sdk-api"
metadata.checkedProviderSdk.reason "OAuth default runtime uses Connector.fetch for create/read/update/attachment/import-set calls and Connector.queryTable for compatible table search calls. Non-OAuth tenant-auth transports must be supplied through ServiceNowRawClient injection instead of a package-owned REST fallback."
metadata.checkedProviderSdk.result "used-as-runtime-connector"
metadata.implementation { defaultClientPolicy: "use-official-servicenow-sdk-api-connector-for-oauth-runtime-transport; require ServiceNowRawClient injection for non-OAuth tenant-auth transports"; manifestImport: "no-sdk-client-initialization"; packageOwnedRestClient: false; rawClientEscapeHatch: "ServiceNowTicketingClient.rawClient"; rawClientOverride: true; runtimePackage: "@cognidesk/integration-ticketing-servicenow"; sdkPackage: "@servicenow/sdk-api"; sdkRuntimeSurface: "Connector.fetch and Connector.queryTable"; strategy: "official-sdk-connector"; }
metadata.implementation.defaultClientPolicy "use-official-servicenow-sdk-api-connector-for-oauth-runtime-transport; require ServiceNowRawClient injection for non-OAuth tenant-auth transports"
metadata.implementation.manifestImport "no-sdk-client-initialization"
metadata.implementation.packageOwnedRestClient false
metadata.implementation.rawClientEscapeHatch "ServiceNowTicketingClient.rawClient"
metadata.implementation.rawClientOverride true
metadata.implementation.runtimePackage "@cognidesk/integration-ticketing-servicenow"
metadata.implementation.sdkPackage "@servicenow/sdk-api"
metadata.implementation.sdkRuntimeSurface "Connector.fetch and Connector.queryTable"
metadata.implementation.strategy "official-sdk-connector"
metadata.sdkDecision { checkedAt: "2026-06-25"; checkedVersion: "4.8.0"; license: "MIT"; package: "@servicenow/sdk-api"; reason: "The official ServiceNow SDK API exports Connector.fetch and Connector.queryTable as runtime instance transport. It does not provide a ticketing-specific Table/Attachment/Import Set client, so Cognidesk translates ticketing operations into the official connector transport and retains typed rawClient injection for host-owned clients."; result: "official-sdk-runtime-connector-not-ticketing-client"; }
metadata.sdkDecision.checkedAt "2026-06-25"
metadata.sdkDecision.checkedVersion "4.8.0"
metadata.sdkDecision.license "MIT"
metadata.sdkDecision.package "@servicenow/sdk-api"
metadata.sdkDecision.reason "The official ServiceNow SDK API exports Connector.fetch and Connector.queryTable as runtime instance transport. It does not provide a ticketing-specific Table/Attachment/Import Set client, so Cognidesk translates ticketing operations into the official connector transport and retains typed rawClient injection for host-owned clients."
metadata.sdkDecision.result "official-sdk-runtime-connector-not-ticketing-client"
name "ServiceNow Ticketing"
operations ( | { alias: string; audiences: ("internal-support" | "mixed")[]; capability: string; changesWorkflow: true; description: string; exposesSensitiveData: true; extension?: never; externallyVisible?: never; label: string; providerObject: string; providerOperation: string; requiresApproval?: never; requiresCredential: true; sideEffect: true; } | { alias: string; audiences: ("internal-support" | "mixed")[]; capability: string; changesWorkflow?: never; description: string; exposesSensitiveData: true; extension?: never; externallyVisible?: never; label: string; providerObject: string; providerOperation: string; requiresApproval?: never; requiresCredential: true; sideEffect?: never; } | { alias: string; audiences: "mixed"[]; capability: string; changesWorkflow: true; description: string; exposesSensitiveData: true; extension?: never; externallyVisible: true; label: string; providerObject: string; providerOperation: string; requiresApproval: true; requiresCredential: true; sideEffect: true; } | { alias: string; audiences: ("internal-support" | "mixed")[]; capability: string; changesWorkflow: true; description: string; exposesSensitiveData: true; extension?: never; externallyVisible: false; label: string; providerObject: string; providerOperation: string; requiresApproval?: never; requiresCredential: true; sideEffect: true; } | { alias: string; audiences: ("internal-support" | "mixed")[]; capability: string; changesWorkflow?: never; description: string; exposesSensitiveData: true; extension?: never; externallyVisible: true; label: string; providerObject: string; providerOperation: string; requiresApproval?: never; requiresCredential: true; sideEffect: true; } | { alias: string; audiences: ("internal-support" | "mixed")[]; capability: string; changesWorkflow: true; description: string; exposesSensitiveData: true; extension: true; externallyVisible?: never; label: string; providerObject: string; providerOperation: string; requiresApproval?: never; requiresCredential: true; sideEffect: true; } | { alias: string; audiences: ("internal-support" | "mixed")[]; capability: string; changesWorkflow?: never; description: string; exposesSensitiveData: true; extension: true; externallyVisible?: never; label: string; providerObject: string; providerOperation: string; requiresApproval?: never; requiresCredential: true; sideEffect?: never; })[]
packageName "@cognidesk/integration-ticketing-servicenow"
privacyNotes readonly ["ServiceNow records can contain customer data, support notes, internal assignment data, and attached workflow context.", "ServiceNow credentials stay server-side and are never exposed through Studio credential status."]
provider "servicenow"
trustLevel "official"