# Integrations service

Service for managing integrations with external services.

OpenAPI file: [`IntegrationsService.json`](https://dev.nominal.io/api/_downloads/56f0a68a2161489bcc439ba033a299cb/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

`workspace` string (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.

`isGovSlack` boolean
:   If true, the link will be generated for a GovSlack workspace. This is required for GovSlack workspaces.

Response

`url` string
:   ​

Request

**curl**

```shell
curl "https://api.gov.nominal.io/api/scout/v2/integrations/slack-oauth/init-webhook" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
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())
```

**httpx**

```python
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())
```

**aiohttp**

```python
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`

```json
{
  "url": "<url>"
}
```

### Create Slack webhook

GET `/scout/v2/integrations/slack-oauth/redirect`

Creates a new Slack integration. Called internally after Slack authorization.

Query parameters

`code` string required
:   Temporary authorization code issued by Slack.

`state` string required
:   ​

Response

No content (HTTP 204).

Request

**curl**

```shell
curl "https://api.gov.nominal.io/api/scout/v2/integrations/slack-oauth/redirect?code=<code>&state=<state>" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
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()
```

**httpx**

```python
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()
```

**aiohttp**

```python
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

`name` string required
:   ​

`description` string
:   ​

`createIntegrationDetails` [`CreateIntegrationDetails`](https://dev.nominal.io/api/rest/integrations-service.md#createintegrationdetails) required
:   ​

    **createSimpleWebhookDetails**

    Set `type` to `"createSimpleWebhookDetails"`.

    `createSimpleWebhookDetails` [`CreateSimpleWebhookDetails`](https://dev.nominal.io/api/rest/integrations-service.md#createsimplewebhookdetails)
    :   ​

        Fields of `CreateSimpleWebhookDetails`

        `webhook` string required
        :   Webhook URL (must be HTTPS in production)

        `secret` string
        :   Optional secret for HMAC-SHA256 signing (recommended)

        `contentType` [`WebhookContentType`](https://dev.nominal.io/api/rest/integrations-service.md#webhookcontenttype)
        :   Content-Type for requests (default: application/json)

            Values of `WebhookContentType`

            `APPLICATION_JSON`
            :   application/json

            `APPLICATION_X_WWW_FORM_URLENCODED`
            :   application/x-www-form-urlencoded

        `timeoutSeconds` integer
        :   HTTP request timeout in seconds (default: 30, max: 120)

        `customHeaders` map of string to string
        :   Additional headers to include in all requests. Do not put API keys, tokens, or other secrets in custom headers.

    **createOpsgenieIntegrationDetails**

    Set `type` to `"createOpsgenieIntegrationDetails"`.

    `createOpsgenieIntegrationDetails` [`CreateOpsgenieIntegrationDetails`](https://dev.nominal.io/api/rest/integrations-service.md#createopsgenieintegrationdetails)
    :   ​

        Fields of `CreateOpsgenieIntegrationDetails`

        `apiKey` string required
        :   ​

        `region` [`OpsgenieRegion`](https://dev.nominal.io/api/rest/integrations-service.md#opsgenieregion) required
        :   ​

            Values of `OpsgenieRegion`

            `US`
            :   ​

            `EU`
            :   ​

    **createTeamsWebhookIntegrationDetails**

    Set `type` to `"createTeamsWebhookIntegrationDetails"`.

    `createTeamsWebhookIntegrationDetails` [`CreateTeamsWebhookIntegrationDetails`](https://dev.nominal.io/api/rest/integrations-service.md#createteamswebhookintegrationdetails)
    :   ​

        Fields of `CreateTeamsWebhookIntegrationDetails`

        `webhook` string required
        :   ​

    **createPagerDutyIntegrationDetails**

    Set `type` to `"createPagerDutyIntegrationDetails"`.

    `createPagerDutyIntegrationDetails` [`CreatePagerDutyIntegrationDetails`](https://dev.nominal.io/api/rest/integrations-service.md#createpagerdutyintegrationdetails)
    :   ​

        Fields of `CreatePagerDutyIntegrationDetails`

        `routingKey` string required
        :   ​

`workspace` string (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

`rid` string (RID)
:   ​

`name` string
:   ​

`description` string
:   ​

`integrationDetails` [`IntegrationDetails`](https://dev.nominal.io/api/rest/integrations-service.md#integrationdetails)
:   ​

    **slackWebhookIntegration**

    Set `type` to `"slackWebhookIntegration"`.

    `slackWebhookIntegration` [`SlackWebhookIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#slackwebhookintegration)
    :   ​

        Fields of `SlackWebhookIntegration`

        `teamName` string
        :   ​

        `channel` string
        :   ​

        `channelId` string
        :   ​

        `slackInstance` [`SlackInstanceType`](https://dev.nominal.io/api/rest/integrations-service.md#slackinstancetype)
        :   ​

            Values of `SlackInstanceType`

            `COMMERCIAL`
            :   ​

            `GOV`
            :   ​

    **opsgenieIntegration**

    Set `type` to `"opsgenieIntegration"`.

    `opsgenieIntegration` [`OpsgenieIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#opsgenieintegration)
    :   ​

        Fields of `OpsgenieIntegration`

        `region` [`OpsgenieRegion`](https://dev.nominal.io/api/rest/integrations-service.md#opsgenieregion)
        :   ​

            Values of `OpsgenieRegion`

            `US`
            :   ​

            `EU`
            :   ​

    **simpleWebhookIntegration**

    Set `type` to `"simpleWebhookIntegration"`.

    `simpleWebhookIntegration` [`SimpleWebhookIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#simplewebhookintegration)
    :   ​

        Fields of `SimpleWebhookIntegration`

        `hmacSecretRid` string (RID)
        :   Optional RID of secret containing HMAC-SHA256 signing key

        `contentType` [`WebhookContentType`](https://dev.nominal.io/api/rest/integrations-service.md#webhookcontenttype)
        :   Content-Type for requests (default: application/json)

            Values of `WebhookContentType`

            `APPLICATION_JSON`
            :   application/json

            `APPLICATION_X_WWW_FORM_URLENCODED`
            :   application/x-www-form-urlencoded

        `timeoutSeconds` integer
        :   HTTP request timeout in seconds (default: 30, max: 120)

        `customHeaders` map of string to string
        :   Additional headers to include in all requests. Do not put API keys, tokens, or other secrets in custom headers.

    **secureWebhookIntegration**

    Set `type` to `"secureWebhookIntegration"`.

    `secureWebhookIntegration` [`SecureWebhookIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#securewebhookintegration)
    :   ​

        Fields of `SecureWebhookIntegration`

        `url` string
        :   Webhook URL (must be HTTPS)

        `customHeaders` map of string to string
        :   Additional 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.

        `deliveryConfig` [`WebhookDeliveryConfig`](https://dev.nominal.io/api/rest/integrations-service.md#webhookdeliveryconfig)
        :   Retry and timeout configuration for webhook delivery attempts

            Fields of `WebhookDeliveryConfig`

            `defaultRequestTimeoutSeconds` integer
            :   Default HTTP request timeout in seconds (server default 10, range 5-120)

            `defaultMaxRetries` integer
            :   Default maximum delivery attempts before failing (server default 3, range 0-10)

            `defaultRetryIntervalSeconds` integer
            :   Default initial interval between retry attempts in seconds (server default 15, range 5-300)

            `defaultExponentialBackoff` boolean
            :   Whether to apply exponential backoff to retry intervals (server default true)

            `defaultMaxRetryIntervalSeconds` integer
            :   Default maximum interval between retries when using exponential backoff in seconds (server default 300, range 5-3600)

            `defaultDeliveryTimeoutSeconds` integer
            :   Default overall delivery timeout in seconds before giving up (server default 600, range 10-86400)

    **teamsWebhookIntegration**

    Set `type` to `"teamsWebhookIntegration"`.

    `teamsWebhookIntegration` [`TeamsWebhookIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#teamswebhookintegration)
    :   ​

    **pagerDutyIntegration**

    Set `type` to `"pagerDutyIntegration"`.

    `pagerDutyIntegration` [`PagerDutyIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#pagerdutyintegration)
    :   ​

`createdAt` string (date-time)
:   ​

`createdBy` string (RID)
:   ​

`isArchived` boolean
:   ​

Request

**curl**

```shell
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>"
    }
  }
}'
```

**requests**

```python
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())
```

**httpx**

```python
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())
```

**aiohttp**

```python
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`

```json
{
  "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

`name` string required
:   ​

`description` string
:   ​

`workspace` string (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.

`integration` [`SecureWebhookIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#securewebhookintegration) required
:   ​

    Fields of `SecureWebhookIntegration`

    `url` string required
    :   Webhook URL (must be HTTPS)

    `customHeaders` map of string to string
    :   Additional 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.

    `deliveryConfig` [`WebhookDeliveryConfig`](https://dev.nominal.io/api/rest/integrations-service.md#webhookdeliveryconfig) required
    :   Retry and timeout configuration for webhook delivery attempts

        Fields of `WebhookDeliveryConfig`

        `defaultRequestTimeoutSeconds` integer
        :   Default HTTP request timeout in seconds (server default 10, range 5-120)

        `defaultMaxRetries` integer
        :   Default maximum delivery attempts before failing (server default 3, range 0-10)

        `defaultRetryIntervalSeconds` integer
        :   Default initial interval between retry attempts in seconds (server default 15, range 5-300)

        `defaultExponentialBackoff` boolean
        :   Whether to apply exponential backoff to retry intervals (server default true)

        `defaultMaxRetryIntervalSeconds` integer
        :   Default maximum interval between retries when using exponential backoff in seconds (server default 300, range 5-3600)

        `defaultDeliveryTimeoutSeconds` integer
        :   Default overall delivery timeout in seconds before giving up (server default 600, range 10-86400)

Response

`integration` [`Integration`](https://dev.nominal.io/api/rest/integrations-service.md#integration)
:   ​

    Fields of `Integration`

    `rid` string (RID)
    :   ​

    `name` string
    :   ​

    `description` string
    :   ​

    `integrationDetails` [`IntegrationDetails`](https://dev.nominal.io/api/rest/integrations-service.md#integrationdetails)
    :   ​

        **slackWebhookIntegration**

        Set `type` to `"slackWebhookIntegration"`.

        `slackWebhookIntegration` [`SlackWebhookIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#slackwebhookintegration)
        :   ​

            Fields of `SlackWebhookIntegration`

            `teamName` string
            :   ​

            `channel` string
            :   ​

            `channelId` string
            :   ​

            `slackInstance` [`SlackInstanceType`](https://dev.nominal.io/api/rest/integrations-service.md#slackinstancetype)
            :   ​

                Values of `SlackInstanceType`

                `COMMERCIAL`
                :   ​

                `GOV`
                :   ​

        **opsgenieIntegration**

        Set `type` to `"opsgenieIntegration"`.

        `opsgenieIntegration` [`OpsgenieIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#opsgenieintegration)
        :   ​

            Fields of `OpsgenieIntegration`

            `region` [`OpsgenieRegion`](https://dev.nominal.io/api/rest/integrations-service.md#opsgenieregion)
            :   ​

                Values of `OpsgenieRegion`

                `US`
                :   ​

                `EU`
                :   ​

        **simpleWebhookIntegration**

        Set `type` to `"simpleWebhookIntegration"`.

        `simpleWebhookIntegration` [`SimpleWebhookIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#simplewebhookintegration)
        :   ​

            Fields of `SimpleWebhookIntegration`

            `hmacSecretRid` string (RID)
            :   Optional RID of secret containing HMAC-SHA256 signing key

            `contentType` [`WebhookContentType`](https://dev.nominal.io/api/rest/integrations-service.md#webhookcontenttype)
            :   Content-Type for requests (default: application/json)

                Values of `WebhookContentType`

                `APPLICATION_JSON`
                :   application/json

                `APPLICATION_X_WWW_FORM_URLENCODED`
                :   application/x-www-form-urlencoded

            `timeoutSeconds` integer
            :   HTTP request timeout in seconds (default: 30, max: 120)

            `customHeaders` map of string to string
            :   Additional headers to include in all requests. Do not put API keys, tokens, or other secrets in custom headers.

        **secureWebhookIntegration**

        Set `type` to `"secureWebhookIntegration"`.

        `secureWebhookIntegration` [`SecureWebhookIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#securewebhookintegration)
        :   ​

            Fields of `SecureWebhookIntegration`

            `url` string
            :   Webhook URL (must be HTTPS)

            `customHeaders` map of string to string
            :   Additional 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.

            `deliveryConfig` [`WebhookDeliveryConfig`](https://dev.nominal.io/api/rest/integrations-service.md#webhookdeliveryconfig)
            :   Retry and timeout configuration for webhook delivery attempts

                Fields of `WebhookDeliveryConfig`

                `defaultRequestTimeoutSeconds` integer
                :   Default HTTP request timeout in seconds (server default 10, range 5-120)

                `defaultMaxRetries` integer
                :   Default maximum delivery attempts before failing (server default 3, range 0-10)

                `defaultRetryIntervalSeconds` integer
                :   Default initial interval between retry attempts in seconds (server default 15, range 5-300)

                `defaultExponentialBackoff` boolean
                :   Whether to apply exponential backoff to retry intervals (server default true)

                `defaultMaxRetryIntervalSeconds` integer
                :   Default maximum interval between retries when using exponential backoff in seconds (server default 300, range 5-3600)

                `defaultDeliveryTimeoutSeconds` integer
                :   Default overall delivery timeout in seconds before giving up (server default 600, range 10-86400)

        **teamsWebhookIntegration**

        Set `type` to `"teamsWebhookIntegration"`.

        `teamsWebhookIntegration` [`TeamsWebhookIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#teamswebhookintegration)
        :   ​

        **pagerDutyIntegration**

        Set `type` to `"pagerDutyIntegration"`.

        `pagerDutyIntegration` [`PagerDutyIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#pagerdutyintegration)
        :   ​

    `createdAt` string (date-time)
    :   ​

    `createdBy` string (RID)
    :   ​

    `isArchived` boolean
    :   ​

`signingKey` string
:   Server-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**

```shell
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
    }
  }
}'
```

**requests**

```python
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())
```

**httpx**

```python
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())
```

**aiohttp**

```python
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`

```json
{
  "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

`integrationRid` string (RID) required
:   ​

Body

`payload` string required
:   JSON payload to send. Will be signed with HMAC-SHA256 using the integration’s signing key. Validated before signing to ensure well-formed JSON.

`customHeaders` map of string to string
:   Optional 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.

`deliveryConfig` [`WebhookDeliveryConfig`](https://dev.nominal.io/api/rest/integrations-service.md#webhookdeliveryconfig)
:   Optional 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 `WebhookDeliveryConfig`

    `defaultRequestTimeoutSeconds` integer
    :   Default HTTP request timeout in seconds (server default 10, range 5-120)

    `defaultMaxRetries` integer
    :   Default maximum delivery attempts before failing (server default 3, range 0-10)

    `defaultRetryIntervalSeconds` integer
    :   Default initial interval between retry attempts in seconds (server default 15, range 5-300)

    `defaultExponentialBackoff` boolean
    :   Whether to apply exponential backoff to retry intervals (server default true)

    `defaultMaxRetryIntervalSeconds` integer
    :   Default maximum interval between retries when using exponential backoff in seconds (server default 300, range 5-3600)

    `defaultDeliveryTimeoutSeconds` integer
    :   Default overall delivery timeout in seconds before giving up (server default 600, range 10-86400)

Response

An empty JSON object, `{}`.

Request

**curl**

```shell
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>"
}'
```

**requests**

```python
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())
```

**httpx**

```python
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())
```

**aiohttp**

```python
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`

```json
{}
```

### Delete integration

DELETE `/scout/v2/integrations/{integrationRid}`

Deletes an integration by archiving.

Path parameters

`integrationRid` string (RID) required
:   ​

Response

No content (HTTP 204).

Request

**curl**

```shell
curl -X DELETE "https://api.gov.nominal.io/api/scout/v2/integrations/<integration rid>" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
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()
```

**httpx**

```python
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()
```

**aiohttp**

```python
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

`integrationRid` string (RID) required
:   ​

Body

`name` string
:   ​

`description` string
:   ​

Response

`rid` string (RID)
:   ​

`name` string
:   ​

`description` string
:   ​

`integrationDetails` [`IntegrationDetails`](https://dev.nominal.io/api/rest/integrations-service.md#integrationdetails)
:   ​

    **slackWebhookIntegration**

    Set `type` to `"slackWebhookIntegration"`.

    `slackWebhookIntegration` [`SlackWebhookIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#slackwebhookintegration)
    :   ​

        Fields of `SlackWebhookIntegration`

        `teamName` string
        :   ​

        `channel` string
        :   ​

        `channelId` string
        :   ​

        `slackInstance` [`SlackInstanceType`](https://dev.nominal.io/api/rest/integrations-service.md#slackinstancetype)
        :   ​

            Values of `SlackInstanceType`

            `COMMERCIAL`
            :   ​

            `GOV`
            :   ​

    **opsgenieIntegration**

    Set `type` to `"opsgenieIntegration"`.

    `opsgenieIntegration` [`OpsgenieIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#opsgenieintegration)
    :   ​

        Fields of `OpsgenieIntegration`

        `region` [`OpsgenieRegion`](https://dev.nominal.io/api/rest/integrations-service.md#opsgenieregion)
        :   ​

            Values of `OpsgenieRegion`

            `US`
            :   ​

            `EU`
            :   ​

    **simpleWebhookIntegration**

    Set `type` to `"simpleWebhookIntegration"`.

    `simpleWebhookIntegration` [`SimpleWebhookIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#simplewebhookintegration)
    :   ​

        Fields of `SimpleWebhookIntegration`

        `hmacSecretRid` string (RID)
        :   Optional RID of secret containing HMAC-SHA256 signing key

        `contentType` [`WebhookContentType`](https://dev.nominal.io/api/rest/integrations-service.md#webhookcontenttype)
        :   Content-Type for requests (default: application/json)

            Values of `WebhookContentType`

            `APPLICATION_JSON`
            :   application/json

            `APPLICATION_X_WWW_FORM_URLENCODED`
            :   application/x-www-form-urlencoded

        `timeoutSeconds` integer
        :   HTTP request timeout in seconds (default: 30, max: 120)

        `customHeaders` map of string to string
        :   Additional headers to include in all requests. Do not put API keys, tokens, or other secrets in custom headers.

    **secureWebhookIntegration**

    Set `type` to `"secureWebhookIntegration"`.

    `secureWebhookIntegration` [`SecureWebhookIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#securewebhookintegration)
    :   ​

        Fields of `SecureWebhookIntegration`

        `url` string
        :   Webhook URL (must be HTTPS)

        `customHeaders` map of string to string
        :   Additional 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.

        `deliveryConfig` [`WebhookDeliveryConfig`](https://dev.nominal.io/api/rest/integrations-service.md#webhookdeliveryconfig)
        :   Retry and timeout configuration for webhook delivery attempts

            Fields of `WebhookDeliveryConfig`

            `defaultRequestTimeoutSeconds` integer
            :   Default HTTP request timeout in seconds (server default 10, range 5-120)

            `defaultMaxRetries` integer
            :   Default maximum delivery attempts before failing (server default 3, range 0-10)

            `defaultRetryIntervalSeconds` integer
            :   Default initial interval between retry attempts in seconds (server default 15, range 5-300)

            `defaultExponentialBackoff` boolean
            :   Whether to apply exponential backoff to retry intervals (server default true)

            `defaultMaxRetryIntervalSeconds` integer
            :   Default maximum interval between retries when using exponential backoff in seconds (server default 300, range 5-3600)

            `defaultDeliveryTimeoutSeconds` integer
            :   Default overall delivery timeout in seconds before giving up (server default 600, range 10-86400)

    **teamsWebhookIntegration**

    Set `type` to `"teamsWebhookIntegration"`.

    `teamsWebhookIntegration` [`TeamsWebhookIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#teamswebhookintegration)
    :   ​

    **pagerDutyIntegration**

    Set `type` to `"pagerDutyIntegration"`.

    `pagerDutyIntegration` [`PagerDutyIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#pagerdutyintegration)
    :   ​

`createdAt` string (date-time)
:   ​

`createdBy` string (RID)
:   ​

`isArchived` boolean
:   ​

Request

**curl**

```shell
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>"
}'
```

**requests**

```python
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())
```

**httpx**

```python
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())
```

**aiohttp**

```python
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`

```json
{
  "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

`integrationRid` string (RID) required
:   ​

Response

`rid` string (RID)
:   ​

`name` string
:   ​

`description` string
:   ​

`integrationDetails` [`IntegrationDetails`](https://dev.nominal.io/api/rest/integrations-service.md#integrationdetails)
:   ​

    **slackWebhookIntegration**

    Set `type` to `"slackWebhookIntegration"`.

    `slackWebhookIntegration` [`SlackWebhookIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#slackwebhookintegration)
    :   ​

        Fields of `SlackWebhookIntegration`

        `teamName` string
        :   ​

        `channel` string
        :   ​

        `channelId` string
        :   ​

        `slackInstance` [`SlackInstanceType`](https://dev.nominal.io/api/rest/integrations-service.md#slackinstancetype)
        :   ​

            Values of `SlackInstanceType`

            `COMMERCIAL`
            :   ​

            `GOV`
            :   ​

    **opsgenieIntegration**

    Set `type` to `"opsgenieIntegration"`.

    `opsgenieIntegration` [`OpsgenieIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#opsgenieintegration)
    :   ​

        Fields of `OpsgenieIntegration`

        `region` [`OpsgenieRegion`](https://dev.nominal.io/api/rest/integrations-service.md#opsgenieregion)
        :   ​

            Values of `OpsgenieRegion`

            `US`
            :   ​

            `EU`
            :   ​

    **simpleWebhookIntegration**

    Set `type` to `"simpleWebhookIntegration"`.

    `simpleWebhookIntegration` [`SimpleWebhookIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#simplewebhookintegration)
    :   ​

        Fields of `SimpleWebhookIntegration`

        `hmacSecretRid` string (RID)
        :   Optional RID of secret containing HMAC-SHA256 signing key

        `contentType` [`WebhookContentType`](https://dev.nominal.io/api/rest/integrations-service.md#webhookcontenttype)
        :   Content-Type for requests (default: application/json)

            Values of `WebhookContentType`

            `APPLICATION_JSON`
            :   application/json

            `APPLICATION_X_WWW_FORM_URLENCODED`
            :   application/x-www-form-urlencoded

        `timeoutSeconds` integer
        :   HTTP request timeout in seconds (default: 30, max: 120)

        `customHeaders` map of string to string
        :   Additional headers to include in all requests. Do not put API keys, tokens, or other secrets in custom headers.

    **secureWebhookIntegration**

    Set `type` to `"secureWebhookIntegration"`.

    `secureWebhookIntegration` [`SecureWebhookIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#securewebhookintegration)
    :   ​

        Fields of `SecureWebhookIntegration`

        `url` string
        :   Webhook URL (must be HTTPS)

        `customHeaders` map of string to string
        :   Additional 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.

        `deliveryConfig` [`WebhookDeliveryConfig`](https://dev.nominal.io/api/rest/integrations-service.md#webhookdeliveryconfig)
        :   Retry and timeout configuration for webhook delivery attempts

            Fields of `WebhookDeliveryConfig`

            `defaultRequestTimeoutSeconds` integer
            :   Default HTTP request timeout in seconds (server default 10, range 5-120)

            `defaultMaxRetries` integer
            :   Default maximum delivery attempts before failing (server default 3, range 0-10)

            `defaultRetryIntervalSeconds` integer
            :   Default initial interval between retry attempts in seconds (server default 15, range 5-300)

            `defaultExponentialBackoff` boolean
            :   Whether to apply exponential backoff to retry intervals (server default true)

            `defaultMaxRetryIntervalSeconds` integer
            :   Default maximum interval between retries when using exponential backoff in seconds (server default 300, range 5-3600)

            `defaultDeliveryTimeoutSeconds` integer
            :   Default overall delivery timeout in seconds before giving up (server default 600, range 10-86400)

    **teamsWebhookIntegration**

    Set `type` to `"teamsWebhookIntegration"`.

    `teamsWebhookIntegration` [`TeamsWebhookIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#teamswebhookintegration)
    :   ​

    **pagerDutyIntegration**

    Set `type` to `"pagerDutyIntegration"`.

    `pagerDutyIntegration` [`PagerDutyIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#pagerdutyintegration)
    :   ​

`createdAt` string (date-time)
:   ​

`createdBy` string (RID)
:   ​

`isArchived` boolean
:   ​

Request

**curl**

```shell
curl "https://api.gov.nominal.io/api/scout/v2/integrations/<integration rid>" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
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())
```

**httpx**

```python
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())
```

**aiohttp**

```python
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`

```json
{
  "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

`integrationRid` string (RID) required
:   ​

Body

`updateIntegrationDetails` [`UpdateIntegrationDetails`](https://dev.nominal.io/api/rest/integrations-service.md#updateintegrationdetails) required
:   Includes the information needed to rotate the integration-specific secrets. Examples include unsecured webhook URL or API keys.

    **simpleWebhook**

    Set `type` to `"simpleWebhook"`.

    `simpleWebhook` [`UpdateSimpleWebhookDetails`](https://dev.nominal.io/api/rest/integrations-service.md#updatesimplewebhookdetails)
    :   ​

        Fields of `UpdateSimpleWebhookDetails`

        `webhook` string required
        :   Webhook URL (must be HTTPS in production)

        `secret` string
        :   Optional secret for HMAC-SHA256 signing

        `contentType` [`WebhookContentType`](https://dev.nominal.io/api/rest/integrations-service.md#webhookcontenttype)
        :   Content-Type for requests

            Values of `WebhookContentType`

            `APPLICATION_JSON`
            :   application/json

            `APPLICATION_X_WWW_FORM_URLENCODED`
            :   application/x-www-form-urlencoded

        `timeoutSeconds` integer
        :   HTTP request timeout in seconds

        `customHeaders` map of string to string
        :   Additional headers to include in all requests. Do not put API keys, tokens, or other secrets in custom headers.

    **secureWebhookIntegration**

    Set `type` to `"secureWebhookIntegration"`.

    `secureWebhookIntegration` [`UpdateSecureWebhookIntegrationDetails`](https://dev.nominal.io/api/rest/integrations-service.md#updatesecurewebhookintegrationdetails)
    :   ​

        Fields of `UpdateSecureWebhookIntegrationDetails`

        `url` string required
        :   Webhook URL (must be HTTPS)

        `customHeaders` map of string to string
        :   Additional 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.

        `deliveryConfig` [`WebhookDeliveryConfig`](https://dev.nominal.io/api/rest/integrations-service.md#webhookdeliveryconfig) required
        :   Retry and timeout configuration for webhook delivery attempts

            Fields of `WebhookDeliveryConfig`

            `defaultRequestTimeoutSeconds` integer
            :   Default HTTP request timeout in seconds (server default 10, range 5-120)

            `defaultMaxRetries` integer
            :   Default maximum delivery attempts before failing (server default 3, range 0-10)

            `defaultRetryIntervalSeconds` integer
            :   Default initial interval between retry attempts in seconds (server default 15, range 5-300)

            `defaultExponentialBackoff` boolean
            :   Whether to apply exponential backoff to retry intervals (server default true)

            `defaultMaxRetryIntervalSeconds` integer
            :   Default maximum interval between retries when using exponential backoff in seconds (server default 300, range 5-3600)

            `defaultDeliveryTimeoutSeconds` integer
            :   Default overall delivery timeout in seconds before giving up (server default 600, range 10-86400)

    **opsgenieIntegration**

    Set `type` to `"opsgenieIntegration"`.

    `opsgenieIntegration` [`UpdateOpsgenieIntegrationDetails`](https://dev.nominal.io/api/rest/integrations-service.md#updateopsgenieintegrationdetails)
    :   ​

        Fields of `UpdateOpsgenieIntegrationDetails`

        `apiKey` string required
        :   ​

        `region` [`OpsgenieRegion`](https://dev.nominal.io/api/rest/integrations-service.md#opsgenieregion) required
        :   ​

            Values of `OpsgenieRegion`

            `US`
            :   ​

            `EU`
            :   ​

    **teamsWebhook**

    Set `type` to `"teamsWebhook"`.

    `teamsWebhook` [`UpdateTeamsWebhookIntegrationDetails`](https://dev.nominal.io/api/rest/integrations-service.md#updateteamswebhookintegrationdetails)
    :   ​

        Fields of `UpdateTeamsWebhookIntegrationDetails`

        `webhook` string required
        :   ​

    **pagerDuty**

    Set `type` to `"pagerDuty"`.

    `pagerDuty` [`UpdatePagerDutyIntegrationDetails`](https://dev.nominal.io/api/rest/integrations-service.md#updatepagerdutyintegrationdetails)
    :   ​

        Fields of `UpdatePagerDutyIntegrationDetails`

        `routingKey` string required
        :   ​

Response

`rid` string (RID)
:   ​

`name` string
:   ​

`description` string
:   ​

`integrationDetails` [`IntegrationDetails`](https://dev.nominal.io/api/rest/integrations-service.md#integrationdetails)
:   ​

    **slackWebhookIntegration**

    Set `type` to `"slackWebhookIntegration"`.

    `slackWebhookIntegration` [`SlackWebhookIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#slackwebhookintegration)
    :   ​

        Fields of `SlackWebhookIntegration`

        `teamName` string
        :   ​

        `channel` string
        :   ​

        `channelId` string
        :   ​

        `slackInstance` [`SlackInstanceType`](https://dev.nominal.io/api/rest/integrations-service.md#slackinstancetype)
        :   ​

            Values of `SlackInstanceType`

            `COMMERCIAL`
            :   ​

            `GOV`
            :   ​

    **opsgenieIntegration**

    Set `type` to `"opsgenieIntegration"`.

    `opsgenieIntegration` [`OpsgenieIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#opsgenieintegration)
    :   ​

        Fields of `OpsgenieIntegration`

        `region` [`OpsgenieRegion`](https://dev.nominal.io/api/rest/integrations-service.md#opsgenieregion)
        :   ​

            Values of `OpsgenieRegion`

            `US`
            :   ​

            `EU`
            :   ​

    **simpleWebhookIntegration**

    Set `type` to `"simpleWebhookIntegration"`.

    `simpleWebhookIntegration` [`SimpleWebhookIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#simplewebhookintegration)
    :   ​

        Fields of `SimpleWebhookIntegration`

        `hmacSecretRid` string (RID)
        :   Optional RID of secret containing HMAC-SHA256 signing key

        `contentType` [`WebhookContentType`](https://dev.nominal.io/api/rest/integrations-service.md#webhookcontenttype)
        :   Content-Type for requests (default: application/json)

            Values of `WebhookContentType`

            `APPLICATION_JSON`
            :   application/json

            `APPLICATION_X_WWW_FORM_URLENCODED`
            :   application/x-www-form-urlencoded

        `timeoutSeconds` integer
        :   HTTP request timeout in seconds (default: 30, max: 120)

        `customHeaders` map of string to string
        :   Additional headers to include in all requests. Do not put API keys, tokens, or other secrets in custom headers.

    **secureWebhookIntegration**

    Set `type` to `"secureWebhookIntegration"`.

    `secureWebhookIntegration` [`SecureWebhookIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#securewebhookintegration)
    :   ​

        Fields of `SecureWebhookIntegration`

        `url` string
        :   Webhook URL (must be HTTPS)

        `customHeaders` map of string to string
        :   Additional 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.

        `deliveryConfig` [`WebhookDeliveryConfig`](https://dev.nominal.io/api/rest/integrations-service.md#webhookdeliveryconfig)
        :   Retry and timeout configuration for webhook delivery attempts

            Fields of `WebhookDeliveryConfig`

            `defaultRequestTimeoutSeconds` integer
            :   Default HTTP request timeout in seconds (server default 10, range 5-120)

            `defaultMaxRetries` integer
            :   Default maximum delivery attempts before failing (server default 3, range 0-10)

            `defaultRetryIntervalSeconds` integer
            :   Default initial interval between retry attempts in seconds (server default 15, range 5-300)

            `defaultExponentialBackoff` boolean
            :   Whether to apply exponential backoff to retry intervals (server default true)

            `defaultMaxRetryIntervalSeconds` integer
            :   Default maximum interval between retries when using exponential backoff in seconds (server default 300, range 5-3600)

            `defaultDeliveryTimeoutSeconds` integer
            :   Default overall delivery timeout in seconds before giving up (server default 600, range 10-86400)

    **teamsWebhookIntegration**

    Set `type` to `"teamsWebhookIntegration"`.

    `teamsWebhookIntegration` [`TeamsWebhookIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#teamswebhookintegration)
    :   ​

    **pagerDutyIntegration**

    Set `type` to `"pagerDutyIntegration"`.

    `pagerDutyIntegration` [`PagerDutyIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#pagerdutyintegration)
    :   ​

`createdAt` string (date-time)
:   ​

`createdBy` string (RID)
:   ​

`isArchived` boolean
:   ​

Request

**curl**

```shell
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>"
    }
  }
}'
```

**requests**

```python
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())
```

**httpx**

```python
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())
```

**aiohttp**

```python
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`

```json
{
  "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

`workspaces` array 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`](https://dev.nominal.io/api/rest/integrations-service.md#integration).

Fields of `Integration`

`rid` string (RID)
:   ​

`name` string
:   ​

`description` string
:   ​

`integrationDetails` [`IntegrationDetails`](https://dev.nominal.io/api/rest/integrations-service.md#integrationdetails)
:   ​

    **slackWebhookIntegration**

    Set `type` to `"slackWebhookIntegration"`.

    `slackWebhookIntegration` [`SlackWebhookIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#slackwebhookintegration)
    :   ​

        Fields of `SlackWebhookIntegration`

        `teamName` string
        :   ​

        `channel` string
        :   ​

        `channelId` string
        :   ​

        `slackInstance` [`SlackInstanceType`](https://dev.nominal.io/api/rest/integrations-service.md#slackinstancetype)
        :   ​

            Values of `SlackInstanceType`

            `COMMERCIAL`
            :   ​

            `GOV`
            :   ​

    **opsgenieIntegration**

    Set `type` to `"opsgenieIntegration"`.

    `opsgenieIntegration` [`OpsgenieIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#opsgenieintegration)
    :   ​

        Fields of `OpsgenieIntegration`

        `region` [`OpsgenieRegion`](https://dev.nominal.io/api/rest/integrations-service.md#opsgenieregion)
        :   ​

            Values of `OpsgenieRegion`

            `US`
            :   ​

            `EU`
            :   ​

    **simpleWebhookIntegration**

    Set `type` to `"simpleWebhookIntegration"`.

    `simpleWebhookIntegration` [`SimpleWebhookIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#simplewebhookintegration)
    :   ​

        Fields of `SimpleWebhookIntegration`

        `hmacSecretRid` string (RID)
        :   Optional RID of secret containing HMAC-SHA256 signing key

        `contentType` [`WebhookContentType`](https://dev.nominal.io/api/rest/integrations-service.md#webhookcontenttype)
        :   Content-Type for requests (default: application/json)

            Values of `WebhookContentType`

            `APPLICATION_JSON`
            :   application/json

            `APPLICATION_X_WWW_FORM_URLENCODED`
            :   application/x-www-form-urlencoded

        `timeoutSeconds` integer
        :   HTTP request timeout in seconds (default: 30, max: 120)

        `customHeaders` map of string to string
        :   Additional headers to include in all requests. Do not put API keys, tokens, or other secrets in custom headers.

    **secureWebhookIntegration**

    Set `type` to `"secureWebhookIntegration"`.

    `secureWebhookIntegration` [`SecureWebhookIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#securewebhookintegration)
    :   ​

        Fields of `SecureWebhookIntegration`

        `url` string
        :   Webhook URL (must be HTTPS)

        `customHeaders` map of string to string
        :   Additional 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.

        `deliveryConfig` [`WebhookDeliveryConfig`](https://dev.nominal.io/api/rest/integrations-service.md#webhookdeliveryconfig)
        :   Retry and timeout configuration for webhook delivery attempts

            Fields of `WebhookDeliveryConfig`

            `defaultRequestTimeoutSeconds` integer
            :   Default HTTP request timeout in seconds (server default 10, range 5-120)

            `defaultMaxRetries` integer
            :   Default maximum delivery attempts before failing (server default 3, range 0-10)

            `defaultRetryIntervalSeconds` integer
            :   Default initial interval between retry attempts in seconds (server default 15, range 5-300)

            `defaultExponentialBackoff` boolean
            :   Whether to apply exponential backoff to retry intervals (server default true)

            `defaultMaxRetryIntervalSeconds` integer
            :   Default maximum interval between retries when using exponential backoff in seconds (server default 300, range 5-3600)

            `defaultDeliveryTimeoutSeconds` integer
            :   Default overall delivery timeout in seconds before giving up (server default 600, range 10-86400)

    **teamsWebhookIntegration**

    Set `type` to `"teamsWebhookIntegration"`.

    `teamsWebhookIntegration` [`TeamsWebhookIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#teamswebhookintegration)
    :   ​

    **pagerDutyIntegration**

    Set `type` to `"pagerDutyIntegration"`.

    `pagerDutyIntegration` [`PagerDutyIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#pagerdutyintegration)
    :   ​

`createdAt` string (date-time)
:   ​

`createdBy` string (RID)
:   ​

`isArchived` boolean
:   ​

Request

**curl**

```shell
curl "https://api.gov.nominal.io/api/scout/v2/integrations/list" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
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())
```

**httpx**

```python
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())
```

**aiohttp**

```python
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`

```json
[
  {
    "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

`title` string
:   Optional title for the message. 130 characters max.

`message` string required
:   ​

`tags` array of string
:   20 tags max, 50 characters max each. Tags are used to filter messages in Opsgenie. For other integrations, tags are ignored.

`opsGenieAlias` string
:   Alias to use for the Opsgenie alert deduplication. 512 characters max.

`integrationRid` string (RID) required
:   ​

`priority` [`Priority`](https://dev.nominal.io/api/rest/integrations-service.md#priority)
:   ​

    Values of `Priority`

    `P0`
    :   ​

    `P1`
    :   ​

    `P2`
    :   ​

    `P3`
    :   ​

    `P4`
    :   ​

Response

No content (HTTP 204).

Request

**curl**

```shell
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>"
}'
```

**requests**

```python
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()
```

**httpx**

```python
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()
```

**aiohttp**

```python
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

`integrationRid` string (RID) required
:   ​

Response

`signingKey` string
:   New 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**

```shell
curl -X POST "https://api.gov.nominal.io/api/scout/v2/integrations/internal/<integration rid>/rotate-signing-key" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
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())
```

**httpx**

```python
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())
```

**aiohttp**

```python
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`

```json
{
  "signingKey": "<signing key>"
}
```

## Errors

[Errors](https://dev.nominal.io/api/legacy.md#errors) shows how these errors are sent.

Each error’s `errorName` is `Scout:` followed by its name below.

| Status | Name | Notes |
| --- | --- | --- |
| 400 | `InvalidDeliveryConfig` |  |
| 400 | `InvalidWebhookHeaders` |  |
| 400 | `InvalidWebhookUrl` |  |
| 400 | `NotImplemented` |  |
| 400 | `SlackIntegrationNotAvailable` |  |
| 400 | `UnsupportedOperationForIntegration` |  |
| 404 | `IntegrationNotFound` |  |
| 404 | `IntegrationTokenNotFound` |  |
| 404 | `IntegrationsNotFound` |  |

## Types

### CreateIntegrationDetails

Set `type` to the name of one of the other fields, and set only that field.

`createSimpleWebhookDetails` [`CreateSimpleWebhookDetails`](https://dev.nominal.io/api/rest/integrations-service.md#createsimplewebhookdetails)
:   ​

`createOpsgenieIntegrationDetails` [`CreateOpsgenieIntegrationDetails`](https://dev.nominal.io/api/rest/integrations-service.md#createopsgenieintegrationdetails)
:   ​

`createTeamsWebhookIntegrationDetails` [`CreateTeamsWebhookIntegrationDetails`](https://dev.nominal.io/api/rest/integrations-service.md#createteamswebhookintegrationdetails)
:   ​

`createPagerDutyIntegrationDetails` [`CreatePagerDutyIntegrationDetails`](https://dev.nominal.io/api/rest/integrations-service.md#createpagerdutyintegrationdetails)
:   ​

### CreateOpsgenieIntegrationDetails

`apiKey` string required
:   ​

`region` [`OpsgenieRegion`](https://dev.nominal.io/api/rest/integrations-service.md#opsgenieregion) required
:   ​

### CreatePagerDutyIntegrationDetails

`routingKey` string required
:   ​

### CreateSimpleWebhookDetails

`webhook` string required
:   Webhook URL (must be HTTPS in production)

`secret` string
:   Optional secret for HMAC-SHA256 signing (recommended)

`contentType` [`WebhookContentType`](https://dev.nominal.io/api/rest/integrations-service.md#webhookcontenttype)
:   Content-Type for requests (default: application/json)

`timeoutSeconds` integer
:   HTTP request timeout in seconds (default: 30, max: 120)

`customHeaders` map of string to string
:   Additional headers to include in all requests. Do not put API keys, tokens, or other secrets in custom headers.

### CreateTeamsWebhookIntegrationDetails

`webhook` string required
:   ​

### Integration

Configuration details used to connect to an external service.

`rid` string (RID) required
:   ​

`name` string required
:   ​

`description` string
:   ​

`integrationDetails` [`IntegrationDetails`](https://dev.nominal.io/api/rest/integrations-service.md#integrationdetails) required
:   ​

`createdAt` string (date-time) required
:   ​

`createdBy` string (RID) required
:   ​

`isArchived` boolean required
:   ​

### IntegrationDetails

Set `type` to the name of one of the other fields, and set only that field.

`slackWebhookIntegration` [`SlackWebhookIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#slackwebhookintegration)
:   ​

`opsgenieIntegration` [`OpsgenieIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#opsgenieintegration)
:   ​

`simpleWebhookIntegration` [`SimpleWebhookIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#simplewebhookintegration)
:   ​

`secureWebhookIntegration` [`SecureWebhookIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#securewebhookintegration)
:   ​

`teamsWebhookIntegration` [`TeamsWebhookIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#teamswebhookintegration)
:   ​

`pagerDutyIntegration` [`PagerDutyIntegration`](https://dev.nominal.io/api/rest/integrations-service.md#pagerdutyintegration)
:   ​

### OpsgenieIntegration

`region` [`OpsgenieRegion`](https://dev.nominal.io/api/rest/integrations-service.md#opsgenieregion) required
:   ​

### 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)

`url` string required
:   Webhook URL (must be HTTPS)

`customHeaders` map of string to string
:   Additional 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.

`deliveryConfig` [`WebhookDeliveryConfig`](https://dev.nominal.io/api/rest/integrations-service.md#webhookdeliveryconfig) required
:   Retry and timeout configuration for webhook delivery attempts

### SimpleWebhookIntegration

`hmacSecretRid` string (RID)
:   Optional RID of secret containing HMAC-SHA256 signing key

`contentType` [`WebhookContentType`](https://dev.nominal.io/api/rest/integrations-service.md#webhookcontenttype)
:   Content-Type for requests (default: application/json)

`timeoutSeconds` integer
:   HTTP request timeout in seconds (default: 30, max: 120)

`customHeaders` map of string to string
:   Additional headers to include in all requests. Do not put API keys, tokens, or other secrets in custom headers.

### SlackInstanceType

`COMMERCIAL`
:   ​

`GOV`
:   ​

### SlackWebhookIntegration

`teamName` string required
:   ​

`channel` string required
:   ​

`channelId` string required
:   ​

`slackInstance` [`SlackInstanceType`](https://dev.nominal.io/api/rest/integrations-service.md#slackinstancetype)
:   ​

### TeamsWebhookIntegration

An empty JSON object, `{}`.

### UpdateIntegrationDetails

Set `type` to the name of one of the other fields, and set only that field.

`simpleWebhook` [`UpdateSimpleWebhookDetails`](https://dev.nominal.io/api/rest/integrations-service.md#updatesimplewebhookdetails)
:   ​

`secureWebhookIntegration` [`UpdateSecureWebhookIntegrationDetails`](https://dev.nominal.io/api/rest/integrations-service.md#updatesecurewebhookintegrationdetails)
:   ​

`opsgenieIntegration` [`UpdateOpsgenieIntegrationDetails`](https://dev.nominal.io/api/rest/integrations-service.md#updateopsgenieintegrationdetails)
:   ​

`teamsWebhook` [`UpdateTeamsWebhookIntegrationDetails`](https://dev.nominal.io/api/rest/integrations-service.md#updateteamswebhookintegrationdetails)
:   ​

`pagerDuty` [`UpdatePagerDutyIntegrationDetails`](https://dev.nominal.io/api/rest/integrations-service.md#updatepagerdutyintegrationdetails)
:   ​

### UpdateOpsgenieIntegrationDetails

`apiKey` string required
:   ​

`region` [`OpsgenieRegion`](https://dev.nominal.io/api/rest/integrations-service.md#opsgenieregion) required
:   ​

### UpdatePagerDutyIntegrationDetails

`routingKey` string 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.

`url` string required
:   Webhook URL (must be HTTPS)

`customHeaders` map of string to string
:   Additional 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.

`deliveryConfig` [`WebhookDeliveryConfig`](https://dev.nominal.io/api/rest/integrations-service.md#webhookdeliveryconfig) required
:   Retry and timeout configuration for webhook delivery attempts

### UpdateSimpleWebhookDetails

`webhook` string required
:   Webhook URL (must be HTTPS in production)

`secret` string
:   Optional secret for HMAC-SHA256 signing

`contentType` [`WebhookContentType`](https://dev.nominal.io/api/rest/integrations-service.md#webhookcontenttype)
:   Content-Type for requests

`timeoutSeconds` integer
:   HTTP request timeout in seconds

`customHeaders` map of string to string
:   Additional headers to include in all requests. Do not put API keys, tokens, or other secrets in custom headers.

### UpdateTeamsWebhookIntegrationDetails

`webhook` string required
:   ​

### WebhookContentType

Content-Type for webhook requests

`APPLICATION_JSON`
:   application/json

`APPLICATION_X_WWW_FORM_URLENCODED`
:   application/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

`defaultRequestTimeoutSeconds` integer
:   Default HTTP request timeout in seconds (server default 10, range 5-120)

`defaultMaxRetries` integer
:   Default maximum delivery attempts before failing (server default 3, range 0-10)

`defaultRetryIntervalSeconds` integer
:   Default initial interval between retry attempts in seconds (server default 15, range 5-300)

`defaultExponentialBackoff` boolean
:   Whether to apply exponential backoff to retry intervals (server default true)

`defaultMaxRetryIntervalSeconds` integer
:   Default maximum interval between retries when using exponential backoff in seconds (server default 300, range 5-3600)

`defaultDeliveryTimeoutSeconds` integer
:   Default overall delivery timeout in seconds before giving up (server default 600, range 10-86400)

Page design based on [Scalar](https://scalar.com), MIT License.
