Integrations service#
Service for managing integrations with external services.
OpenAPI file: IntegrationsService.json
Endpoints#
Generate Slack webhook link#
GET /scout/v2/integrations/slack-oauth/init-webhook
Generates link to request permissions for Slack bot to join workspaces and use a webhook.
Query parameters
workspacestring (RID)The (Nominal) workspace for which the link is valid. If not provided, will use the default workspace for the user’s organization, if the default workspace for the organization is configured.
isGovSlackbooleanIf true, the link will be generated for a GovSlack workspace. This is required for GovSlack workspaces.
Response
urlstring
Request
curl "https://api.gov.nominal.io/api/scout/v2/integrations/slack-oauth/init-webhook" \
-H "Authorization: Bearer <api key>"
import requests
response = requests.get(
"https://api.gov.nominal.io/api/scout/v2/integrations/slack-oauth/init-webhook",
headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.get(
"https://api.gov.nominal.io/api/scout/v2/integrations/slack-oauth/init-webhook",
headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import asyncio
import aiohttp
async def main() -> None:
async with aiohttp.ClientSession() as session:
async with session.get(
"https://api.gov.nominal.io/api/scout/v2/integrations/slack-oauth/init-webhook",
headers={"Authorization": "Bearer <api key>"},
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
{
"url": "<url>"
}
Create Slack webhook#
GET /scout/v2/integrations/slack-oauth/redirect
Creates a new Slack integration. Called internally after Slack authorization.
Query parameters
codestring requiredTemporary authorization code issued by Slack.
statestring required
Response
No content (HTTP 204).
Request
curl "https://api.gov.nominal.io/api/scout/v2/integrations/slack-oauth/redirect?code=<code>&state=<state>" \
-H "Authorization: Bearer <api key>"
import requests
response = requests.get(
"https://api.gov.nominal.io/api/scout/v2/integrations/slack-oauth/redirect?code=<code>&state=<state>",
headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
import httpx
response = httpx.get(
"https://api.gov.nominal.io/api/scout/v2/integrations/slack-oauth/redirect?code=<code>&state=<state>",
headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
import asyncio
import aiohttp
async def main() -> None:
async with aiohttp.ClientSession() as session:
async with session.get(
"https://api.gov.nominal.io/api/scout/v2/integrations/slack-oauth/redirect?code=<code>&state=<state>",
headers={"Authorization": "Bearer <api key>"},
) as response:
response.raise_for_status()
asyncio.run(main())
Response: 204
No content.
Create integration#
POST /scout/v2/integrations
Creates a new integration.
Body
namestring required
descriptionstring
createIntegrationDetailsCreateIntegrationDetailsrequired
Set
typeto"createSimpleWebhookDetails".createSimpleWebhookDetailsCreateSimpleWebhookDetails
Fields of
CreateSimpleWebhookDetailswebhookstring requiredWebhook URL (must be HTTPS in production)
secretstringOptional secret for HMAC-SHA256 signing (recommended)
contentTypeWebhookContentTypeContent-Type for requests (default: application/json)
Values of
WebhookContentTypeAPPLICATION_JSONapplication/json
APPLICATION_X_WWW_FORM_URLENCODEDapplication/x-www-form-urlencoded
timeoutSecondsintegerHTTP request timeout in seconds (default: 30, max: 120)
customHeadersmap of string to stringAdditional headers to include in all requests. Do not put API keys, tokens, or other secrets in custom headers.
Set
typeto"createOpsgenieIntegrationDetails".createOpsgenieIntegrationDetailsCreateOpsgenieIntegrationDetails
Fields of
CreateOpsgenieIntegrationDetailsapiKeystring required
regionOpsgenieRegionrequired
Values of
OpsgenieRegionUS
EU
Set
typeto"createTeamsWebhookIntegrationDetails".createTeamsWebhookIntegrationDetailsCreateTeamsWebhookIntegrationDetails
Fields of
CreateTeamsWebhookIntegrationDetailswebhookstring required
Set
typeto"createPagerDutyIntegrationDetails".createPagerDutyIntegrationDetailsCreatePagerDutyIntegrationDetails
Fields of
CreatePagerDutyIntegrationDetailsroutingKeystring required
workspacestring (RID)The workspace in which to create the integration. If not provided, the integration will be created in the default workspace for the user’s organization, if the default workspace for the organization is configured.
Response
ridstring (RID)
namestring
descriptionstring
integrationDetailsIntegrationDetails
Set
typeto"slackWebhookIntegration".slackWebhookIntegrationSlackWebhookIntegration
Fields of
SlackWebhookIntegrationteamNamestring
channelstring
channelIdstring
slackInstanceSlackInstanceType
Values of
SlackInstanceTypeCOMMERCIAL
GOV
Set
typeto"opsgenieIntegration".opsgenieIntegrationOpsgenieIntegration
Fields of
OpsgenieIntegrationregionOpsgenieRegion
Values of
OpsgenieRegionUS
EU
Set
typeto"simpleWebhookIntegration".simpleWebhookIntegrationSimpleWebhookIntegration
Fields of
SimpleWebhookIntegrationhmacSecretRidstring (RID)Optional RID of secret containing HMAC-SHA256 signing key
contentTypeWebhookContentTypeContent-Type for requests (default: application/json)
Values of
WebhookContentTypeAPPLICATION_JSONapplication/json
APPLICATION_X_WWW_FORM_URLENCODEDapplication/x-www-form-urlencoded
timeoutSecondsintegerHTTP request timeout in seconds (default: 30, max: 120)
customHeadersmap of string to stringAdditional headers to include in all requests. Do not put API keys, tokens, or other secrets in custom headers.
Set
typeto"secureWebhookIntegration".secureWebhookIntegrationSecureWebhookIntegration
Fields of
SecureWebhookIntegrationurlstringWebhook URL (must be HTTPS)
customHeadersmap of string to stringAdditional HTTP headers to include in all webhook requests. Do not put API keys, tokens, or other secrets in custom headers. Server-side validation rejects security-sensitive headers to prevent credential leakage: Authorization, Cookie, X-API-Key, X-Auth-Token, Proxy-Authorization, and any header starting with X-Nominal-. Validation returns clear error messages for blocked headers.
deliveryConfigWebhookDeliveryConfigRetry and timeout configuration for webhook delivery attempts
Fields of
WebhookDeliveryConfigdefaultRequestTimeoutSecondsintegerDefault HTTP request timeout in seconds (server default 10, range 5-120)
defaultMaxRetriesintegerDefault maximum delivery attempts before failing (server default 3, range 0-10)
defaultRetryIntervalSecondsintegerDefault initial interval between retry attempts in seconds (server default 15, range 5-300)
defaultExponentialBackoffbooleanWhether to apply exponential backoff to retry intervals (server default true)
defaultMaxRetryIntervalSecondsintegerDefault maximum interval between retries when using exponential backoff in seconds (server default 300, range 5-3600)
defaultDeliveryTimeoutSecondsintegerDefault overall delivery timeout in seconds before giving up (server default 600, range 10-86400)
Set
typeto"teamsWebhookIntegration".teamsWebhookIntegrationTeamsWebhookIntegration
Set
typeto"pagerDutyIntegration".pagerDutyIntegrationPagerDutyIntegration
createdAtstring (date-time)
createdBystring (RID)
isArchivedboolean
Request
curl -X POST "https://api.gov.nominal.io/api/scout/v2/integrations" \
-H "Authorization: Bearer <api key>" \
-H "Content-Type: application/json" \
--data '{
"name": "<name>",
"createIntegrationDetails": {
"type": "createSimpleWebhookDetails",
"createSimpleWebhookDetails": {
"webhook": "<webhook>"
}
}
}'
import requests
response = requests.post(
"https://api.gov.nominal.io/api/scout/v2/integrations",
headers={"Authorization": "Bearer <api key>"},
json={
"name": "<name>",
"createIntegrationDetails": {
"type": "createSimpleWebhookDetails",
"createSimpleWebhookDetails": {"webhook": "<webhook>"},
},
},
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.post(
"https://api.gov.nominal.io/api/scout/v2/integrations",
headers={"Authorization": "Bearer <api key>"},
json={
"name": "<name>",
"createIntegrationDetails": {
"type": "createSimpleWebhookDetails",
"createSimpleWebhookDetails": {"webhook": "<webhook>"},
},
},
)
response.raise_for_status()
print(response.json())
import asyncio
import aiohttp
async def main() -> None:
async with aiohttp.ClientSession() as session:
async with session.post(
"https://api.gov.nominal.io/api/scout/v2/integrations",
headers={"Authorization": "Bearer <api key>"},
json={
"name": "<name>",
"createIntegrationDetails": {
"type": "createSimpleWebhookDetails",
"createSimpleWebhookDetails": {"webhook": "<webhook>"},
},
},
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
{
"rid": "<integration rid>",
"name": "<name>",
"description": "<description>",
"integrationDetails": {
"type": "slackWebhookIntegration",
"slackWebhookIntegration": {
"teamName": "<team name>",
"channel": "<channel>",
"channelId": "<channel id>",
"slackInstance": "COMMERCIAL"
}
},
"createdAt": "2026-01-01T00:00:00Z",
"createdBy": "<created by>",
"isArchived": true
}
Create secure webhook integration#
POST /scout/v2/integrations/internal/secure-webhook
Creates a new webhook integration with HMAC signing. Returns the integration and the server-generated signing key. The signing key is only returned once — store it securely.
Body
namestring required
descriptionstring
workspacestring (RID)The workspace in which to create the integration. If not provided, the integration will be created in the default workspace for the user’s organization, if the default workspace for the organization is configured.
integrationSecureWebhookIntegrationrequired
Fields of
SecureWebhookIntegrationurlstring requiredWebhook URL (must be HTTPS)
customHeadersmap of string to stringAdditional HTTP headers to include in all webhook requests. Do not put API keys, tokens, or other secrets in custom headers. Server-side validation rejects security-sensitive headers to prevent credential leakage: Authorization, Cookie, X-API-Key, X-Auth-Token, Proxy-Authorization, and any header starting with X-Nominal-. Validation returns clear error messages for blocked headers.
deliveryConfigWebhookDeliveryConfigrequiredRetry and timeout configuration for webhook delivery attempts
Fields of
WebhookDeliveryConfigdefaultRequestTimeoutSecondsintegerDefault HTTP request timeout in seconds (server default 10, range 5-120)
defaultMaxRetriesintegerDefault maximum delivery attempts before failing (server default 3, range 0-10)
defaultRetryIntervalSecondsintegerDefault initial interval between retry attempts in seconds (server default 15, range 5-300)
defaultExponentialBackoffbooleanWhether to apply exponential backoff to retry intervals (server default true)
defaultMaxRetryIntervalSecondsintegerDefault maximum interval between retries when using exponential backoff in seconds (server default 300, range 5-3600)
defaultDeliveryTimeoutSecondsintegerDefault overall delivery timeout in seconds before giving up (server default 600, range 10-86400)
Response
integrationIntegration
Fields of
Integrationridstring (RID)
namestring
descriptionstring
integrationDetailsIntegrationDetails
Set
typeto"slackWebhookIntegration".slackWebhookIntegrationSlackWebhookIntegration
Fields of
SlackWebhookIntegrationteamNamestring
channelstring
channelIdstring
slackInstanceSlackInstanceType
Values of
SlackInstanceTypeCOMMERCIAL
GOV
Set
typeto"opsgenieIntegration".opsgenieIntegrationOpsgenieIntegration
Fields of
OpsgenieIntegrationregionOpsgenieRegion
Values of
OpsgenieRegionUS
EU
Set
typeto"simpleWebhookIntegration".simpleWebhookIntegrationSimpleWebhookIntegration
Fields of
SimpleWebhookIntegrationhmacSecretRidstring (RID)Optional RID of secret containing HMAC-SHA256 signing key
contentTypeWebhookContentTypeContent-Type for requests (default: application/json)
Values of
WebhookContentTypeAPPLICATION_JSONapplication/json
APPLICATION_X_WWW_FORM_URLENCODEDapplication/x-www-form-urlencoded
timeoutSecondsintegerHTTP request timeout in seconds (default: 30, max: 120)
customHeadersmap of string to stringAdditional headers to include in all requests. Do not put API keys, tokens, or other secrets in custom headers.
Set
typeto"secureWebhookIntegration".secureWebhookIntegrationSecureWebhookIntegration
Fields of
SecureWebhookIntegrationurlstringWebhook URL (must be HTTPS)
customHeadersmap of string to stringAdditional HTTP headers to include in all webhook requests. Do not put API keys, tokens, or other secrets in custom headers. Server-side validation rejects security-sensitive headers to prevent credential leakage: Authorization, Cookie, X-API-Key, X-Auth-Token, Proxy-Authorization, and any header starting with X-Nominal-. Validation returns clear error messages for blocked headers.
deliveryConfigWebhookDeliveryConfigRetry and timeout configuration for webhook delivery attempts
Fields of
WebhookDeliveryConfigdefaultRequestTimeoutSecondsintegerDefault HTTP request timeout in seconds (server default 10, range 5-120)
defaultMaxRetriesintegerDefault maximum delivery attempts before failing (server default 3, range 0-10)
defaultRetryIntervalSecondsintegerDefault initial interval between retry attempts in seconds (server default 15, range 5-300)
defaultExponentialBackoffbooleanWhether to apply exponential backoff to retry intervals (server default true)
defaultMaxRetryIntervalSecondsintegerDefault maximum interval between retries when using exponential backoff in seconds (server default 300, range 5-3600)
defaultDeliveryTimeoutSecondsintegerDefault overall delivery timeout in seconds before giving up (server default 600, range 10-86400)
Set
typeto"teamsWebhookIntegration".teamsWebhookIntegrationTeamsWebhookIntegration
Set
typeto"pagerDutyIntegration".pagerDutyIntegrationPagerDutyIntegration
createdAtstring (date-time)
createdBystring (RID)
isArchivedboolean
signingKeystringServer-generated HMAC-SHA256 signing key (256-bit, base64-encoded). Store this securely in your secrets manager (e.g., AWS Secrets Manager, HashiCorp Vault). This key cannot be retrieved again - if you lose it, use rotateSecureWebhookIntegrationSigningKey to generate a new one.
Request
curl -X POST "https://api.gov.nominal.io/api/scout/v2/integrations/internal/secure-webhook" \
-H "Authorization: Bearer <api key>" \
-H "Content-Type: application/json" \
--data '{
"name": "<name>",
"integration": {
"url": "<url>",
"deliveryConfig": {
"defaultRequestTimeoutSeconds": 1,
"defaultMaxRetries": 1,
"defaultRetryIntervalSeconds": 1,
"defaultExponentialBackoff": true,
"defaultMaxRetryIntervalSeconds": 1,
"defaultDeliveryTimeoutSeconds": 1
}
}
}'
import requests
response = requests.post(
"https://api.gov.nominal.io/api/scout/v2/integrations/internal/secure-webhook",
headers={"Authorization": "Bearer <api key>"},
json={
"name": "<name>",
"integration": {
"url": "<url>",
"deliveryConfig": {
"defaultRequestTimeoutSeconds": 1,
"defaultMaxRetries": 1,
"defaultRetryIntervalSeconds": 1,
"defaultExponentialBackoff": True,
"defaultMaxRetryIntervalSeconds": 1,
"defaultDeliveryTimeoutSeconds": 1,
},
},
},
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.post(
"https://api.gov.nominal.io/api/scout/v2/integrations/internal/secure-webhook",
headers={"Authorization": "Bearer <api key>"},
json={
"name": "<name>",
"integration": {
"url": "<url>",
"deliveryConfig": {
"defaultRequestTimeoutSeconds": 1,
"defaultMaxRetries": 1,
"defaultRetryIntervalSeconds": 1,
"defaultExponentialBackoff": True,
"defaultMaxRetryIntervalSeconds": 1,
"defaultDeliveryTimeoutSeconds": 1,
},
},
},
)
response.raise_for_status()
print(response.json())
import asyncio
import aiohttp
async def main() -> None:
async with aiohttp.ClientSession() as session:
async with session.post(
"https://api.gov.nominal.io/api/scout/v2/integrations/internal/secure-webhook",
headers={"Authorization": "Bearer <api key>"},
json={
"name": "<name>",
"integration": {
"url": "<url>",
"deliveryConfig": {
"defaultRequestTimeoutSeconds": 1,
"defaultMaxRetries": 1,
"defaultRetryIntervalSeconds": 1,
"defaultExponentialBackoff": True,
"defaultMaxRetryIntervalSeconds": 1,
"defaultDeliveryTimeoutSeconds": 1,
},
},
},
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
{
"integration": {
"rid": "<integration rid>",
"name": "<name>",
"description": "<description>",
"integrationDetails": {
"type": "slackWebhookIntegration",
"slackWebhookIntegration": {
"teamName": "<team name>",
"channel": "<channel>",
"channelId": "<channel id>",
"slackInstance": "COMMERCIAL"
}
},
"createdAt": "2026-01-01T00:00:00Z",
"createdBy": "<created by>",
"isArchived": true
},
"signingKey": "<signing key>"
}
Send secure webhook message#
POST /scout/v2/integrations/internal/secure-webhook/{integrationRid}
Sends a message to a secure webhook integration with HMAC-SHA256 signature. Implements retry logic with exponential backoff based on merged delivery configuration. Request configuration overrides take precedence over integration’s stored configuration.
Path parameters
integrationRidstring (RID) required
Body
payloadstring requiredJSON payload to send. Will be signed with HMAC-SHA256 using the integration’s signing key. Validated before signing to ensure well-formed JSON.
customHeadersmap of string to stringOptional custom headers to override integration’s stored customHeaders for this request. Must not include blocked headers (Authorization, Cookie, X-API-Key, X-Auth-Token, Proxy-Authorization, X-Nominal-*). Merged with integration headers, request overrides take precedence.
deliveryConfigWebhookDeliveryConfigOptional delivery configuration to override integration’s stored deliveryConfig for this request. Merged with integration config, request overrides take precedence. Cross-field constraints (e.g., maxRetryInterval >= retryInterval) validated on merged result.
Fields of
WebhookDeliveryConfigdefaultRequestTimeoutSecondsintegerDefault HTTP request timeout in seconds (server default 10, range 5-120)
defaultMaxRetriesintegerDefault maximum delivery attempts before failing (server default 3, range 0-10)
defaultRetryIntervalSecondsintegerDefault initial interval between retry attempts in seconds (server default 15, range 5-300)
defaultExponentialBackoffbooleanWhether to apply exponential backoff to retry intervals (server default true)
defaultMaxRetryIntervalSecondsintegerDefault maximum interval between retries when using exponential backoff in seconds (server default 300, range 5-3600)
defaultDeliveryTimeoutSecondsintegerDefault overall delivery timeout in seconds before giving up (server default 600, range 10-86400)
Response
An empty JSON object, {}.
Request
curl -X POST "https://api.gov.nominal.io/api/scout/v2/integrations/internal/secure-webhook/<integration rid>" \
-H "Authorization: Bearer <api key>" \
-H "Content-Type: application/json" \
--data '{
"payload": "<payload>"
}'
import requests
response = requests.post(
"https://api.gov.nominal.io/api/scout/v2/integrations/internal/secure-webhook/<integration rid>",
headers={"Authorization": "Bearer <api key>"},
json={"payload": "<payload>"},
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.post(
"https://api.gov.nominal.io/api/scout/v2/integrations/internal/secure-webhook/<integration rid>",
headers={"Authorization": "Bearer <api key>"},
json={"payload": "<payload>"},
)
response.raise_for_status()
print(response.json())
import asyncio
import aiohttp
async def main() -> None:
async with aiohttp.ClientSession() as session:
async with session.post(
"https://api.gov.nominal.io/api/scout/v2/integrations/internal/secure-webhook/<integration rid>",
headers={"Authorization": "Bearer <api key>"},
json={"payload": "<payload>"},
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
{}
Delete integration#
DELETE /scout/v2/integrations/{integrationRid}
Deletes an integration by archiving.
Path parameters
integrationRidstring (RID) required
Response
No content (HTTP 204).
Request
curl -X DELETE "https://api.gov.nominal.io/api/scout/v2/integrations/<integration rid>" \
-H "Authorization: Bearer <api key>"
import requests
response = requests.delete(
"https://api.gov.nominal.io/api/scout/v2/integrations/<integration rid>",
headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
import httpx
response = httpx.delete(
"https://api.gov.nominal.io/api/scout/v2/integrations/<integration rid>",
headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
import asyncio
import aiohttp
async def main() -> None:
async with aiohttp.ClientSession() as session:
async with session.delete(
"https://api.gov.nominal.io/api/scout/v2/integrations/<integration rid>",
headers={"Authorization": "Bearer <api key>"},
) as response:
response.raise_for_status()
asyncio.run(main())
Response: 204
No content.
Update integration metadata#
PUT /scout/v2/integrations/{integrationRid}
Updates the metadata of an integration.
Path parameters
integrationRidstring (RID) required
Body
namestring
descriptionstring
Response
ridstring (RID)
namestring
descriptionstring
integrationDetailsIntegrationDetails
Set
typeto"slackWebhookIntegration".slackWebhookIntegrationSlackWebhookIntegration
Fields of
SlackWebhookIntegrationteamNamestring
channelstring
channelIdstring
slackInstanceSlackInstanceType
Values of
SlackInstanceTypeCOMMERCIAL
GOV
Set
typeto"opsgenieIntegration".opsgenieIntegrationOpsgenieIntegration
Fields of
OpsgenieIntegrationregionOpsgenieRegion
Values of
OpsgenieRegionUS
EU
Set
typeto"simpleWebhookIntegration".simpleWebhookIntegrationSimpleWebhookIntegration
Fields of
SimpleWebhookIntegrationhmacSecretRidstring (RID)Optional RID of secret containing HMAC-SHA256 signing key
contentTypeWebhookContentTypeContent-Type for requests (default: application/json)
Values of
WebhookContentTypeAPPLICATION_JSONapplication/json
APPLICATION_X_WWW_FORM_URLENCODEDapplication/x-www-form-urlencoded
timeoutSecondsintegerHTTP request timeout in seconds (default: 30, max: 120)
customHeadersmap of string to stringAdditional headers to include in all requests. Do not put API keys, tokens, or other secrets in custom headers.
Set
typeto"secureWebhookIntegration".secureWebhookIntegrationSecureWebhookIntegration
Fields of
SecureWebhookIntegrationurlstringWebhook URL (must be HTTPS)
customHeadersmap of string to stringAdditional HTTP headers to include in all webhook requests. Do not put API keys, tokens, or other secrets in custom headers. Server-side validation rejects security-sensitive headers to prevent credential leakage: Authorization, Cookie, X-API-Key, X-Auth-Token, Proxy-Authorization, and any header starting with X-Nominal-. Validation returns clear error messages for blocked headers.
deliveryConfigWebhookDeliveryConfigRetry and timeout configuration for webhook delivery attempts
Fields of
WebhookDeliveryConfigdefaultRequestTimeoutSecondsintegerDefault HTTP request timeout in seconds (server default 10, range 5-120)
defaultMaxRetriesintegerDefault maximum delivery attempts before failing (server default 3, range 0-10)
defaultRetryIntervalSecondsintegerDefault initial interval between retry attempts in seconds (server default 15, range 5-300)
defaultExponentialBackoffbooleanWhether to apply exponential backoff to retry intervals (server default true)
defaultMaxRetryIntervalSecondsintegerDefault maximum interval between retries when using exponential backoff in seconds (server default 300, range 5-3600)
defaultDeliveryTimeoutSecondsintegerDefault overall delivery timeout in seconds before giving up (server default 600, range 10-86400)
Set
typeto"teamsWebhookIntegration".teamsWebhookIntegrationTeamsWebhookIntegration
Set
typeto"pagerDutyIntegration".pagerDutyIntegrationPagerDutyIntegration
createdAtstring (date-time)
createdBystring (RID)
isArchivedboolean
Request
curl -X PUT "https://api.gov.nominal.io/api/scout/v2/integrations/<integration rid>" \
-H "Authorization: Bearer <api key>" \
-H "Content-Type: application/json" \
--data '{
"name": "<name>",
"description": "<description>"
}'
import requests
response = requests.put(
"https://api.gov.nominal.io/api/scout/v2/integrations/<integration rid>",
headers={"Authorization": "Bearer <api key>"},
json={"name": "<name>", "description": "<description>"},
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.put(
"https://api.gov.nominal.io/api/scout/v2/integrations/<integration rid>",
headers={"Authorization": "Bearer <api key>"},
json={"name": "<name>", "description": "<description>"},
)
response.raise_for_status()
print(response.json())
import asyncio
import aiohttp
async def main() -> None:
async with aiohttp.ClientSession() as session:
async with session.put(
"https://api.gov.nominal.io/api/scout/v2/integrations/<integration rid>",
headers={"Authorization": "Bearer <api key>"},
json={"name": "<name>", "description": "<description>"},
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
{
"rid": "<integration rid>",
"name": "<name>",
"description": "<description>",
"integrationDetails": {
"type": "slackWebhookIntegration",
"slackWebhookIntegration": {
"teamName": "<team name>",
"channel": "<channel>",
"channelId": "<channel id>",
"slackInstance": "COMMERCIAL"
}
},
"createdAt": "2026-01-01T00:00:00Z",
"createdBy": "<created by>",
"isArchived": true
}
Get integration#
GET /scout/v2/integrations/{integrationRid}
Retrieves an integration with the specified integration RID.
Path parameters
integrationRidstring (RID) required
Response
ridstring (RID)
namestring
descriptionstring
integrationDetailsIntegrationDetails
Set
typeto"slackWebhookIntegration".slackWebhookIntegrationSlackWebhookIntegration
Fields of
SlackWebhookIntegrationteamNamestring
channelstring
channelIdstring
slackInstanceSlackInstanceType
Values of
SlackInstanceTypeCOMMERCIAL
GOV
Set
typeto"opsgenieIntegration".opsgenieIntegrationOpsgenieIntegration
Fields of
OpsgenieIntegrationregionOpsgenieRegion
Values of
OpsgenieRegionUS
EU
Set
typeto"simpleWebhookIntegration".simpleWebhookIntegrationSimpleWebhookIntegration
Fields of
SimpleWebhookIntegrationhmacSecretRidstring (RID)Optional RID of secret containing HMAC-SHA256 signing key
contentTypeWebhookContentTypeContent-Type for requests (default: application/json)
Values of
WebhookContentTypeAPPLICATION_JSONapplication/json
APPLICATION_X_WWW_FORM_URLENCODEDapplication/x-www-form-urlencoded
timeoutSecondsintegerHTTP request timeout in seconds (default: 30, max: 120)
customHeadersmap of string to stringAdditional headers to include in all requests. Do not put API keys, tokens, or other secrets in custom headers.
Set
typeto"secureWebhookIntegration".secureWebhookIntegrationSecureWebhookIntegration
Fields of
SecureWebhookIntegrationurlstringWebhook URL (must be HTTPS)
customHeadersmap of string to stringAdditional HTTP headers to include in all webhook requests. Do not put API keys, tokens, or other secrets in custom headers. Server-side validation rejects security-sensitive headers to prevent credential leakage: Authorization, Cookie, X-API-Key, X-Auth-Token, Proxy-Authorization, and any header starting with X-Nominal-. Validation returns clear error messages for blocked headers.
deliveryConfigWebhookDeliveryConfigRetry and timeout configuration for webhook delivery attempts
Fields of
WebhookDeliveryConfigdefaultRequestTimeoutSecondsintegerDefault HTTP request timeout in seconds (server default 10, range 5-120)
defaultMaxRetriesintegerDefault maximum delivery attempts before failing (server default 3, range 0-10)
defaultRetryIntervalSecondsintegerDefault initial interval between retry attempts in seconds (server default 15, range 5-300)
defaultExponentialBackoffbooleanWhether to apply exponential backoff to retry intervals (server default true)
defaultMaxRetryIntervalSecondsintegerDefault maximum interval between retries when using exponential backoff in seconds (server default 300, range 5-3600)
defaultDeliveryTimeoutSecondsintegerDefault overall delivery timeout in seconds before giving up (server default 600, range 10-86400)
Set
typeto"teamsWebhookIntegration".teamsWebhookIntegrationTeamsWebhookIntegration
Set
typeto"pagerDutyIntegration".pagerDutyIntegrationPagerDutyIntegration
createdAtstring (date-time)
createdBystring (RID)
isArchivedboolean
Request
curl "https://api.gov.nominal.io/api/scout/v2/integrations/<integration rid>" \
-H "Authorization: Bearer <api key>"
import requests
response = requests.get(
"https://api.gov.nominal.io/api/scout/v2/integrations/<integration rid>",
headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.get(
"https://api.gov.nominal.io/api/scout/v2/integrations/<integration rid>",
headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import asyncio
import aiohttp
async def main() -> None:
async with aiohttp.ClientSession() as session:
async with session.get(
"https://api.gov.nominal.io/api/scout/v2/integrations/<integration rid>",
headers={"Authorization": "Bearer <api key>"},
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
{
"rid": "<integration rid>",
"name": "<name>",
"description": "<description>",
"integrationDetails": {
"type": "slackWebhookIntegration",
"slackWebhookIntegration": {
"teamName": "<team name>",
"channel": "<channel>",
"channelId": "<channel id>",
"slackInstance": "COMMERCIAL"
}
},
"createdAt": "2026-01-01T00:00:00Z",
"createdBy": "<created by>",
"isArchived": true
}
Update integration details#
PUT /scout/v2/integrations/{integrationRid}/details
Updates the integration details for an integration. Intended to allow changing webhooks or rotating API keys.
Path parameters
integrationRidstring (RID) required
Body
updateIntegrationDetailsUpdateIntegrationDetailsrequiredIncludes the information needed to rotate the integration-specific secrets. Examples include unsecured webhook URL or API keys.
Set
typeto"simpleWebhook".simpleWebhookUpdateSimpleWebhookDetails
Fields of
UpdateSimpleWebhookDetailswebhookstring requiredWebhook URL (must be HTTPS in production)
secretstringOptional secret for HMAC-SHA256 signing
contentTypeWebhookContentTypeContent-Type for requests
Values of
WebhookContentTypeAPPLICATION_JSONapplication/json
APPLICATION_X_WWW_FORM_URLENCODEDapplication/x-www-form-urlencoded
timeoutSecondsintegerHTTP request timeout in seconds
customHeadersmap of string to stringAdditional headers to include in all requests. Do not put API keys, tokens, or other secrets in custom headers.
Set
typeto"secureWebhookIntegration".secureWebhookIntegrationUpdateSecureWebhookIntegrationDetails
Fields of
UpdateSecureWebhookIntegrationDetailsurlstring requiredWebhook URL (must be HTTPS)
customHeadersmap of string to stringAdditional HTTP headers to include in all webhook requests. Do not put API keys, tokens, or other secrets in custom headers. Server-side validation rejects security-sensitive headers to prevent credential leakage: Authorization, Cookie, X-API-Key, X-Auth-Token, Proxy-Authorization, and any header starting with X-Nominal-. Validation returns clear error messages for blocked headers.
deliveryConfigWebhookDeliveryConfigrequiredRetry and timeout configuration for webhook delivery attempts
Fields of
WebhookDeliveryConfigdefaultRequestTimeoutSecondsintegerDefault HTTP request timeout in seconds (server default 10, range 5-120)
defaultMaxRetriesintegerDefault maximum delivery attempts before failing (server default 3, range 0-10)
defaultRetryIntervalSecondsintegerDefault initial interval between retry attempts in seconds (server default 15, range 5-300)
defaultExponentialBackoffbooleanWhether to apply exponential backoff to retry intervals (server default true)
defaultMaxRetryIntervalSecondsintegerDefault maximum interval between retries when using exponential backoff in seconds (server default 300, range 5-3600)
defaultDeliveryTimeoutSecondsintegerDefault overall delivery timeout in seconds before giving up (server default 600, range 10-86400)
Set
typeto"opsgenieIntegration".opsgenieIntegrationUpdateOpsgenieIntegrationDetails
Fields of
UpdateOpsgenieIntegrationDetailsapiKeystring required
regionOpsgenieRegionrequired
Values of
OpsgenieRegionUS
EU
Set
typeto"teamsWebhook".teamsWebhookUpdateTeamsWebhookIntegrationDetails
Fields of
UpdateTeamsWebhookIntegrationDetailswebhookstring required
Set
typeto"pagerDuty".pagerDutyUpdatePagerDutyIntegrationDetails
Fields of
UpdatePagerDutyIntegrationDetailsroutingKeystring required
Response
ridstring (RID)
namestring
descriptionstring
integrationDetailsIntegrationDetails
Set
typeto"slackWebhookIntegration".slackWebhookIntegrationSlackWebhookIntegration
Fields of
SlackWebhookIntegrationteamNamestring
channelstring
channelIdstring
slackInstanceSlackInstanceType
Values of
SlackInstanceTypeCOMMERCIAL
GOV
Set
typeto"opsgenieIntegration".opsgenieIntegrationOpsgenieIntegration
Fields of
OpsgenieIntegrationregionOpsgenieRegion
Values of
OpsgenieRegionUS
EU
Set
typeto"simpleWebhookIntegration".simpleWebhookIntegrationSimpleWebhookIntegration
Fields of
SimpleWebhookIntegrationhmacSecretRidstring (RID)Optional RID of secret containing HMAC-SHA256 signing key
contentTypeWebhookContentTypeContent-Type for requests (default: application/json)
Values of
WebhookContentTypeAPPLICATION_JSONapplication/json
APPLICATION_X_WWW_FORM_URLENCODEDapplication/x-www-form-urlencoded
timeoutSecondsintegerHTTP request timeout in seconds (default: 30, max: 120)
customHeadersmap of string to stringAdditional headers to include in all requests. Do not put API keys, tokens, or other secrets in custom headers.
Set
typeto"secureWebhookIntegration".secureWebhookIntegrationSecureWebhookIntegration
Fields of
SecureWebhookIntegrationurlstringWebhook URL (must be HTTPS)
customHeadersmap of string to stringAdditional HTTP headers to include in all webhook requests. Do not put API keys, tokens, or other secrets in custom headers. Server-side validation rejects security-sensitive headers to prevent credential leakage: Authorization, Cookie, X-API-Key, X-Auth-Token, Proxy-Authorization, and any header starting with X-Nominal-. Validation returns clear error messages for blocked headers.
deliveryConfigWebhookDeliveryConfigRetry and timeout configuration for webhook delivery attempts
Fields of
WebhookDeliveryConfigdefaultRequestTimeoutSecondsintegerDefault HTTP request timeout in seconds (server default 10, range 5-120)
defaultMaxRetriesintegerDefault maximum delivery attempts before failing (server default 3, range 0-10)
defaultRetryIntervalSecondsintegerDefault initial interval between retry attempts in seconds (server default 15, range 5-300)
defaultExponentialBackoffbooleanWhether to apply exponential backoff to retry intervals (server default true)
defaultMaxRetryIntervalSecondsintegerDefault maximum interval between retries when using exponential backoff in seconds (server default 300, range 5-3600)
defaultDeliveryTimeoutSecondsintegerDefault overall delivery timeout in seconds before giving up (server default 600, range 10-86400)
Set
typeto"teamsWebhookIntegration".teamsWebhookIntegrationTeamsWebhookIntegration
Set
typeto"pagerDutyIntegration".pagerDutyIntegrationPagerDutyIntegration
createdAtstring (date-time)
createdBystring (RID)
isArchivedboolean
Request
curl -X PUT "https://api.gov.nominal.io/api/scout/v2/integrations/<integration rid>/details" \
-H "Authorization: Bearer <api key>" \
-H "Content-Type: application/json" \
--data '{
"updateIntegrationDetails": {
"type": "simpleWebhook",
"simpleWebhook": {
"webhook": "<webhook>"
}
}
}'
import requests
response = requests.put(
"https://api.gov.nominal.io/api/scout/v2/integrations/<integration rid>/details",
headers={"Authorization": "Bearer <api key>"},
json={
"updateIntegrationDetails": {
"type": "simpleWebhook",
"simpleWebhook": {"webhook": "<webhook>"},
},
},
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.put(
"https://api.gov.nominal.io/api/scout/v2/integrations/<integration rid>/details",
headers={"Authorization": "Bearer <api key>"},
json={
"updateIntegrationDetails": {
"type": "simpleWebhook",
"simpleWebhook": {"webhook": "<webhook>"},
},
},
)
response.raise_for_status()
print(response.json())
import asyncio
import aiohttp
async def main() -> None:
async with aiohttp.ClientSession() as session:
async with session.put(
"https://api.gov.nominal.io/api/scout/v2/integrations/<integration rid>/details",
headers={"Authorization": "Bearer <api key>"},
json={
"updateIntegrationDetails": {
"type": "simpleWebhook",
"simpleWebhook": {"webhook": "<webhook>"},
},
},
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
{
"rid": "<integration rid>",
"name": "<name>",
"description": "<description>",
"integrationDetails": {
"type": "slackWebhookIntegration",
"slackWebhookIntegration": {
"teamName": "<team name>",
"channel": "<channel>",
"channelId": "<channel id>",
"slackInstance": "COMMERCIAL"
}
},
"createdAt": "2026-01-01T00:00:00Z",
"createdBy": "<created by>",
"isArchived": true
}
List integrations#
GET /scout/v2/integrations/list
Lists all integrations. Archived integrations are not included.
Query parameters
workspacesarray of string (RID)If supplied, will return only the integrations within the supplied workspaces. If empty will return all integrations for workspaces that the user is permitted to see.
Response
The body is an array of Integration.
Fields of Integration
ridstring (RID)
namestring
descriptionstring
integrationDetailsIntegrationDetails
Set
typeto"slackWebhookIntegration".slackWebhookIntegrationSlackWebhookIntegration
Fields of
SlackWebhookIntegrationteamNamestring
channelstring
channelIdstring
slackInstanceSlackInstanceType
Values of
SlackInstanceTypeCOMMERCIAL
GOV
Set
typeto"opsgenieIntegration".opsgenieIntegrationOpsgenieIntegration
Fields of
OpsgenieIntegrationregionOpsgenieRegion
Values of
OpsgenieRegionUS
EU
Set
typeto"simpleWebhookIntegration".simpleWebhookIntegrationSimpleWebhookIntegration
Fields of
SimpleWebhookIntegrationhmacSecretRidstring (RID)Optional RID of secret containing HMAC-SHA256 signing key
contentTypeWebhookContentTypeContent-Type for requests (default: application/json)
Values of
WebhookContentTypeAPPLICATION_JSONapplication/json
APPLICATION_X_WWW_FORM_URLENCODEDapplication/x-www-form-urlencoded
timeoutSecondsintegerHTTP request timeout in seconds (default: 30, max: 120)
customHeadersmap of string to stringAdditional headers to include in all requests. Do not put API keys, tokens, or other secrets in custom headers.
Set
typeto"secureWebhookIntegration".secureWebhookIntegrationSecureWebhookIntegration
Fields of
SecureWebhookIntegrationurlstringWebhook URL (must be HTTPS)
customHeadersmap of string to stringAdditional HTTP headers to include in all webhook requests. Do not put API keys, tokens, or other secrets in custom headers. Server-side validation rejects security-sensitive headers to prevent credential leakage: Authorization, Cookie, X-API-Key, X-Auth-Token, Proxy-Authorization, and any header starting with X-Nominal-. Validation returns clear error messages for blocked headers.
deliveryConfigWebhookDeliveryConfigRetry and timeout configuration for webhook delivery attempts
Fields of
WebhookDeliveryConfigdefaultRequestTimeoutSecondsintegerDefault HTTP request timeout in seconds (server default 10, range 5-120)
defaultMaxRetriesintegerDefault maximum delivery attempts before failing (server default 3, range 0-10)
defaultRetryIntervalSecondsintegerDefault initial interval between retry attempts in seconds (server default 15, range 5-300)
defaultExponentialBackoffbooleanWhether to apply exponential backoff to retry intervals (server default true)
defaultMaxRetryIntervalSecondsintegerDefault maximum interval between retries when using exponential backoff in seconds (server default 300, range 5-3600)
defaultDeliveryTimeoutSecondsintegerDefault overall delivery timeout in seconds before giving up (server default 600, range 10-86400)
Set
typeto"teamsWebhookIntegration".teamsWebhookIntegrationTeamsWebhookIntegration
Set
typeto"pagerDutyIntegration".pagerDutyIntegrationPagerDutyIntegration
createdAtstring (date-time)
createdBystring (RID)
isArchivedboolean
Request
curl "https://api.gov.nominal.io/api/scout/v2/integrations/list" \
-H "Authorization: Bearer <api key>"
import requests
response = requests.get(
"https://api.gov.nominal.io/api/scout/v2/integrations/list",
headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.get(
"https://api.gov.nominal.io/api/scout/v2/integrations/list",
headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import asyncio
import aiohttp
async def main() -> None:
async with aiohttp.ClientSession() as session:
async with session.get(
"https://api.gov.nominal.io/api/scout/v2/integrations/list",
headers={"Authorization": "Bearer <api key>"},
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
[
{
"rid": "<integration rid>",
"name": "<name>",
"description": "<description>",
"integrationDetails": {
"type": "slackWebhookIntegration",
"slackWebhookIntegration": {
"teamName": "<team name>",
"channel": "<channel>",
"channelId": "<channel id>",
"slackInstance": "COMMERCIAL"
}
},
"createdAt": "2026-01-01T00:00:00Z",
"createdBy": "<created by>",
"isArchived": true
}
]
Send message#
POST /scout/v2/integrations/send-message
Sends a string message to the specified integration from a checklist execution.
Body
titlestringOptional title for the message. 130 characters max.
messagestring required
tagsarray of string20 tags max, 50 characters max each. Tags are used to filter messages in Opsgenie. For other integrations, tags are ignored.
opsGenieAliasstringAlias to use for the Opsgenie alert deduplication. 512 characters max.
integrationRidstring (RID) required
priorityPriority
Values of
PriorityP0
P1
P2
P3
P4
Response
No content (HTTP 204).
Request
curl -X POST "https://api.gov.nominal.io/api/scout/v2/integrations/send-message" \
-H "Authorization: Bearer <api key>" \
-H "Content-Type: application/json" \
--data '{
"message": "<message>",
"integrationRid": "<integration rid>"
}'
import requests
response = requests.post(
"https://api.gov.nominal.io/api/scout/v2/integrations/send-message",
headers={"Authorization": "Bearer <api key>"},
json={"message": "<message>", "integrationRid": "<integration rid>"},
)
response.raise_for_status()
import httpx
response = httpx.post(
"https://api.gov.nominal.io/api/scout/v2/integrations/send-message",
headers={"Authorization": "Bearer <api key>"},
json={"message": "<message>", "integrationRid": "<integration rid>"},
)
response.raise_for_status()
import asyncio
import aiohttp
async def main() -> None:
async with aiohttp.ClientSession() as session:
async with session.post(
"https://api.gov.nominal.io/api/scout/v2/integrations/send-message",
headers={"Authorization": "Bearer <api key>"},
json={"message": "<message>", "integrationRid": "<integration rid>"},
) as response:
response.raise_for_status()
asyncio.run(main())
Response: 204
No content.
Rotate secure webhook integration signing key#
POST /scout/v2/integrations/internal/{integrationRid}/rotate-signing-key
Rotates the HMAC signing key for a webhook integration. The old key is immediately invalidated and a new key is generated and returned. This is the only way to retrieve the signing key after initial creation.
Path parameters
integrationRidstring (RID) required
Response
signingKeystringNew HMAC-SHA256 signing key (256-bit, base64-encoded). The old key is immediately invalidated. Store this securely - update your application configuration with the new key before the next webhook delivery.
Request
curl -X POST "https://api.gov.nominal.io/api/scout/v2/integrations/internal/<integration rid>/rotate-signing-key" \
-H "Authorization: Bearer <api key>"
import requests
response = requests.post(
"https://api.gov.nominal.io/api/scout/v2/integrations/internal/<integration rid>/rotate-signing-key",
headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.post(
"https://api.gov.nominal.io/api/scout/v2/integrations/internal/<integration rid>/rotate-signing-key",
headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import asyncio
import aiohttp
async def main() -> None:
async with aiohttp.ClientSession() as session:
async with session.post(
"https://api.gov.nominal.io/api/scout/v2/integrations/internal/<integration rid>/rotate-signing-key",
headers={"Authorization": "Bearer <api key>"},
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
{
"signingKey": "<signing key>"
}
Errors#
Errors shows how these errors are sent.
Each error’s errorName is Scout: followed by its name below.
Status |
Name |
Notes |
|---|---|---|
400 |
|
|
400 |
|
|
400 |
|
|
400 |
|
|
400 |
|
|
400 |
|
|
404 |
|
|
404 |
|
|
404 |
|
Types#
CreateIntegrationDetails#
Set type to the name of one of the other fields, and set only that field.
createSimpleWebhookDetailsCreateSimpleWebhookDetails
createOpsgenieIntegrationDetailsCreateOpsgenieIntegrationDetails
createTeamsWebhookIntegrationDetailsCreateTeamsWebhookIntegrationDetails
createPagerDutyIntegrationDetailsCreatePagerDutyIntegrationDetails
CreateOpsgenieIntegrationDetails#
apiKeystring required
regionOpsgenieRegionrequired
CreatePagerDutyIntegrationDetails#
routingKeystring required
CreateSimpleWebhookDetails#
webhookstring requiredWebhook URL (must be HTTPS in production)
secretstringOptional secret for HMAC-SHA256 signing (recommended)
contentTypeWebhookContentTypeContent-Type for requests (default: application/json)
timeoutSecondsintegerHTTP request timeout in seconds (default: 30, max: 120)
customHeadersmap of string to stringAdditional headers to include in all requests. Do not put API keys, tokens, or other secrets in custom headers.
CreateTeamsWebhookIntegrationDetails#
webhookstring required
Integration#
Configuration details used to connect to an external service.
ridstring (RID) required
namestring required
descriptionstring
integrationDetailsIntegrationDetailsrequired
createdAtstring (date-time) required
createdBystring (RID) required
isArchivedboolean required
IntegrationDetails#
Set type to the name of one of the other fields, and set only that field.
slackWebhookIntegrationSlackWebhookIntegration
opsgenieIntegrationOpsgenieIntegration
simpleWebhookIntegrationSimpleWebhookIntegration
secureWebhookIntegrationSecureWebhookIntegration
teamsWebhookIntegrationTeamsWebhookIntegration
pagerDutyIntegrationPagerDutyIntegration
OpsgenieIntegration#
regionOpsgenieRegionrequired
OpsgenieRegion#
Opsgenie region for the account linked to the provided API key.
US
EU
PagerDutyIntegration#
An empty JSON object, {}.
Priority#
P0
P1
P2
P3
P4
SecureWebhookIntegration#
Advanced webhook integration with HMAC signing, custom headers, and configurable defaults.
Server-side validation enforces: - URL must use HTTPS protocol - customHeaders blocklist (see customHeaders field documentation)
urlstring requiredWebhook URL (must be HTTPS)
customHeadersmap of string to stringAdditional HTTP headers to include in all webhook requests. Do not put API keys, tokens, or other secrets in custom headers. Server-side validation rejects security-sensitive headers to prevent credential leakage: Authorization, Cookie, X-API-Key, X-Auth-Token, Proxy-Authorization, and any header starting with X-Nominal-. Validation returns clear error messages for blocked headers.
deliveryConfigWebhookDeliveryConfigrequiredRetry and timeout configuration for webhook delivery attempts
SimpleWebhookIntegration#
hmacSecretRidstring (RID)Optional RID of secret containing HMAC-SHA256 signing key
contentTypeWebhookContentTypeContent-Type for requests (default: application/json)
timeoutSecondsintegerHTTP request timeout in seconds (default: 30, max: 120)
customHeadersmap of string to stringAdditional headers to include in all requests. Do not put API keys, tokens, or other secrets in custom headers.
SlackInstanceType#
COMMERCIAL
GOV
SlackWebhookIntegration#
teamNamestring required
channelstring required
channelIdstring required
slackInstanceSlackInstanceType
TeamsWebhookIntegration#
An empty JSON object, {}.
UpdateIntegrationDetails#
Set type to the name of one of the other fields, and set only that field.
simpleWebhookUpdateSimpleWebhookDetails
secureWebhookIntegrationUpdateSecureWebhookIntegrationDetails
opsgenieIntegrationUpdateOpsgenieIntegrationDetails
teamsWebhookUpdateTeamsWebhookIntegrationDetails
pagerDutyUpdatePagerDutyIntegrationDetails
UpdateOpsgenieIntegrationDetails#
apiKeystring required
regionOpsgenieRegionrequired
UpdatePagerDutyIntegrationDetails#
routingKeystring required
UpdateSecureWebhookIntegrationDetails#
Configuration for updating an advanced webhook integration. This is a full replacement update - all fields must be provided. Optional retry/timeout fields not provided will be reset to server defaults. Note: To rotate the signing key, use the rotateSecureWebhookIntegrationSigningKey endpoint instead.
urlstring requiredWebhook URL (must be HTTPS)
customHeadersmap of string to stringAdditional HTTP headers to include in all webhook requests. Do not put API keys, tokens, or other secrets in custom headers. Server-side validation rejects security-sensitive headers to prevent credential leakage: Authorization, Cookie, X-API-Key, X-Auth-Token, Proxy-Authorization, and any header starting with X-Nominal-. Validation returns clear error messages for blocked headers.
deliveryConfigWebhookDeliveryConfigrequiredRetry and timeout configuration for webhook delivery attempts
UpdateSimpleWebhookDetails#
webhookstring requiredWebhook URL (must be HTTPS in production)
secretstringOptional secret for HMAC-SHA256 signing
contentTypeWebhookContentTypeContent-Type for requests
timeoutSecondsintegerHTTP request timeout in seconds
customHeadersmap of string to stringAdditional headers to include in all requests. Do not put API keys, tokens, or other secrets in custom headers.
UpdateTeamsWebhookIntegrationDetails#
webhookstring required
WebhookContentType#
Content-Type for webhook requests
APPLICATION_JSONapplication/json
APPLICATION_X_WWW_FORM_URLENCODEDapplication/x-www-form-urlencoded
WebhookDeliveryConfig#
Retry parameters serve as integration-level defaults that can be overridden at runtime.
Server-side validation enforces: - defaultRequestTimeoutSeconds maximum of 120 - defaultMaxRetryIntervalSeconds must be >= defaultRetryIntervalSeconds when both are provided
defaultRequestTimeoutSecondsintegerDefault HTTP request timeout in seconds (server default 10, range 5-120)
defaultMaxRetriesintegerDefault maximum delivery attempts before failing (server default 3, range 0-10)
defaultRetryIntervalSecondsintegerDefault initial interval between retry attempts in seconds (server default 15, range 5-300)
defaultExponentialBackoffbooleanWhether to apply exponential backoff to retry intervals (server default true)
defaultMaxRetryIntervalSecondsintegerDefault maximum interval between retries when using exponential backoff in seconds (server default 300, range 5-3600)
defaultDeliveryTimeoutSecondsintegerDefault overall delivery timeout in seconds before giving up (server default 600, range 10-86400)
Page design based on Scalar, MIT License.