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

# Update Delivery Config

> Set where competitor reports are delivered

Set where finished competitor reports are delivered.

See [the webhook payload](https://docs.clustr-ai.com/competitor-monitoring/report-schema.md#report-ready-webhook) for what a `competitor_monitoring.report_ready` event contains.

```bash cURL theme={null}
curl -X PUT https://api.clustr-ai.com/api/public/competitor-monitoring/delivery-config \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "email_enabled": true,
    "extra_recipients": ["gtm@yourcompany.com"],
    "slack_enabled": true,
    "slack_channel_id": "C0123456789",
    "webhook_enabled": true,
    "webhook_url": "https://hooks.yourcompany.com/clustr/competitors",
    "routes": [
      { "scope": "in_crm", "label": "CS team", "slack_enabled": true, "slack_channel_id": "C0CSCHANNEL" },
      { "scope": "open_deal", "label": "AEs", "slack_enabled": true, "slack_channel_id": "C0AECHANNEL" }
    ]
  }'
```

```python Python theme={null}
import requests

requests.put(
    "https://api.clustr-ai.com/api/public/competitor-monitoring/delivery-config",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json={
        "email_enabled": True,
        "slack_enabled": True,
        "slack_channel_id": "C0123456789",
    },
)
```

```javascript JavaScript theme={null}
await fetch("https://api.clustr-ai.com/api/public/competitor-monitoring/delivery-config", {
  method: "PUT",
  headers: { Authorization: "Bearer YOUR_API_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({
    email_enabled: true,
    slack_enabled: true,
    slack_channel_id: "C0123456789",
  }),
});
```

```json 200 theme={null}
{
  "success": true,
  "data": {
    "email_enabled": true,
    "extra_recipients": ["gtm@yourcompany.com"],
    "slack_enabled": true,
    "slack_channel_id": "C0123456789",
    "webhook_enabled": true,
    "webhook_url": "https://hooks.yourcompany.com/clustr/competitors",
    "routes": [
      { "scope": "in_crm", "label": "CS team", "slack_enabled": true, "slack_channel_id": "C0CSCHANNEL" },
      { "scope": "open_deal", "label": "AEs", "slack_enabled": true, "slack_channel_id": "C0AECHANNEL" }
    ]
  }
}
```


## OpenAPI

````yaml PUT /competitor-monitoring/delivery-config
openapi: 3.1.0
info:
  title: Clustr Public API
  description: >
    Programmatic access to your Clustr network: import connectors, search warm
    intros (opportunities), and manage target accounts.


    ## Authentication

    All endpoints require a Bearer token (API key) in the `Authorization`
    header.


    ```

    Authorization: Bearer <your_api_key>

    ```


    API keys can be created and managed from the [API settings
    page](https://app.clustr-ai.com/api).
  version: '1.0'
  contact:
    name: Clustr Support
    url: https://clustr-ai.com
servers:
  - url: https://api.clustr-ai.com/api/public
    description: Production
security:
  - BearerAuth: []
paths:
  /competitor-monitoring/delivery-config:
    put:
      tags:
        - Competitor Monitoring
      summary: Update Delivery Config
      description: >
        Set where reports are delivered. Each channel is delivered on its own,
        so the

        others still receive the report when one of them is unavailable.
      operationId: updateCompetitorDeliveryConfig
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                email_enabled:
                  type: boolean
                  description: Send the report summary by email.
                notify_admins:
                  type: boolean
                  description: >-
                    Also email the report to your workspace admins, on top of
                    extra_recipients, while email_enabled is true. When you
                    leave it out, the admins receive the report if
                    extra_recipients is empty, and only the addresses in
                    extra_recipients receive it otherwise.
                  example: true
                extra_recipients:
                  type: array
                  description: Additional email recipients beyond your workspace's default.
                  items:
                    type: string
                slack_enabled:
                  type: boolean
                  description: Post a one-line summary to Slack.
                slack_channel_id:
                  type: string
                  description: >-
                    Slack channel id to post to. Requires a connected Slack
                    workspace.
                webhook_enabled:
                  type: boolean
                  description: >-
                    POST a `competitor_monitoring.report_ready` event when a
                    report is ready.
                webhook_url:
                  type: string
                  description: Your endpoint for that event.
                routes:
                  type: array
                  description: >-
                    Destinations for each audience. When you leave it out, the
                    channels above

                    receive the whole digest. With routes, each route receives
                    only its own slice,

                    so your CS channel can follow the accounts you already own
                    while your SDRs

                    follow the prospects they are working.


                    The scopes split the accounts between them, so each account
                    is delivered once.
                  items:
                    type: object
                    properties:
                      scope:
                        type: string
                        enum:
                          - all
                          - open_deal
                          - in_crm
                          - not_in_crm
                        description: >-
                          `all` is every account; `open_deal` an account with a
                          live CRM deal; `in_crm` an account in your CRM with no
                          live deal; `not_in_crm` everything else.
                      label:
                        type: string
                        description: Your name for the route, shown for display.
                      slack_enabled:
                        type: boolean
                        description: Post this slice to `slack_channel_id`.
                      slack_channel_id:
                        type: string
                        description: The channel this slice goes to.
                      email_enabled:
                        type: boolean
                        description: Email this slice to `recipients`.
                      recipients:
                        type: array
                        description: This route's own recipients.
                        items:
                          type: string
                      webhook_enabled:
                        type: boolean
                        description: POST this slice to `webhook_url`.
                      webhook_url:
                        type: string
                        description: This route's endpoint.
      responses:
        '200':
          description: The saved delivery config
          content:
            application/json:
              schema:
                type: object
                required:
                  - success
                  - data
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: object
                    additionalProperties: true
        '401':
          description: Invalid or missing API key
        '403':
          description: Competitor monitoring is not enabled for this workspace
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    ErrorResponse:
      type: object
      required:
        - success
        - error
      properties:
        success:
          type: boolean
          example: false
        error:
          type: object
          properties:
            message:
              type: string
              example: Invalid request body
            code:
              type: string
              example: BAD_REQUEST
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: The API key you created on the API settings page of the Clustr app.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.