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

# Get Competitor Alerts

> Where competitor alerts go, and when an account alerts

Read the competitor alert setting: whether alerts go out, the Slack channel and the email for
each use case, the webhook, the Attack threshold and its scope, and how far back a single
interaction still alerts. Change it with
[Update Competitor Alerts](https://docs.clustr-ai.com/api-reference/update-competitor-alerts.md).

Each alert is sent on its own. A **Defense** alert (an interaction on one of your customers)
posts in `defense_slack_channel_id` and names the account's CS owner; an **Attack** alert (a
critical comment, or an account over the threshold, on a non-customer) posts in
`attack_slack_channel_id` and names the account's owner. Both owners come from the fields you
map in your CRM, read live when the alert is sent; with no owner, the alert names nobody.

When email is on for a use case, each alert is also emailed to its owner and to that use
case's extra addresses. When the webhook is on, every alert is also POSTed to `webhook_url`;
see [Webhook payloads](https://docs.clustr-ai.com/competitor-monitoring/webhook-payload.md).

> [!NOTE]
>
> **On, with nowhere to send yet.** A workspace that never saved the setting reads as
> `enabled: true`, for customers and target accounts, with the threshold at 10 interactions in
> 30 days per competitor, a 14-day history window, no channel, no email and no webhook, and
> `is_default: true`. `has_delivery` is `false` until a channel, an email or the webhook is
> set: until then, no alert is sent.

| Field | Description |
| - | - |
| `enabled` | Whether alerts go out at all |
| `attack_slack_channel_id` | The Slack channel Attack alerts post in, or `null` |
| `defense_slack_channel_id` | The Slack channel Defense alerts post in, or `null`. May be the same as Attack |
| `attack_email_enabled` | Whether each Attack alert is emailed to the account owner and `attack_email_recipients` |
| `defense_email_enabled` | Whether each Defense alert is emailed to the CS owner and `defense_email_recipients` |
| `attack_email_recipients` | Extra addresses that get every Attack alert by email |
| `defense_email_recipients` | Extra addresses that get every Defense alert by email |
| `webhook_enabled` | Whether every alert is also POSTed to `webhook_url` |
| `webhook_url` | The webhook endpoint, or `null` |
| `has_webhook_secret` | Whether a signing secret is saved. The secret itself is never returned |
| `attack_threshold_interactions` | An Attack account alerts at this many interactions or more |
| `attack_threshold_days` | ...over this many days |
| `attack_threshold_scope` | `per_competitor`: counted with each competitor on its own. `all_competitors`: with all your competitors together |
| `alert_history_days` | A Defense interaction or a critical comment alerts only if it happened within this many days |
| `has_delivery` | `false` when there is no channel, no email and no webhook: alerts are not sent |
| `customers` | Defense alerts on (one of your customers) |
| `targets` | Attack alerts on (an account that is not a customer). Each Attack alert says whether its account is a target account or an other account |
| `attack_other_accounts` | `true` (default): Attack also alerts on other accounts, the non-customers that are not on your target account list, labelled "Other account". `false`: target accounts only |
| `customer_rule` | Who counts as a customer, in one line: your [client list](https://docs.clustr-ai.com/client-companies.md) |

```bash cURL theme={null}
curl "https://api.clustr-ai.com/api/public/notifications/competitor-alerts?account=acc_0v7tgcp9dspw8x9zc6teb5qx8z" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

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

requests.get(
    "https://api.clustr-ai.com/api/public/notifications/competitor-alerts",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    params={"account": "acc_0v7tgcp9dspw8x9zc6teb5qx8z"},
)
```

```javascript JavaScript theme={null}
await fetch("https://api.clustr-ai.com/api/public/notifications/competitor-alerts?account=acc_0v7tgcp9dspw8x9zc6teb5qx8z", {
  headers: { Authorization: "Bearer YOUR_API_KEY" },
});
```

```json 200 theme={null}
{
  "success": true,
  "data": {
    "enabled": true,
    "attack_slack_channel_id": "C0123456789",
    "defense_slack_channel_id": "C0987654321",
    "attack_email_enabled": true,
    "defense_email_enabled": false,
    "attack_email_recipients": ["sales-leads@example.com"],
    "defense_email_recipients": [],
    "webhook_enabled": true,
    "webhook_url": "https://hooks.example.com/clustr",
    "has_webhook_secret": true,
    "attack_threshold_interactions": 10,
    "attack_threshold_days": 30,
    "attack_threshold_scope": "per_competitor",
    "alert_history_days": 14,
    "has_delivery": true,
    "customers": true,
    "targets": true,
    "attack_other_accounts": true,
    "is_default": false,
    "updated_at": "2026-10-08T09:12:44Z",
    "customer_rule": { "summary": "Won deals in HubSpot and your client list", "count": 14 },
    "account": {
      "name": "Initech",
      "owner": {
        "clustr_user_id": "usr_6h0tgfv0qq26twwzng1g624dt6",
        "user_id": "3f7a9d2e-0c4b-4e1f-8a6d-5b2c9e1f0a47",
        "email": "marine.b@example.com",
        "name": "Marine B"
      },
      "owner_source": "crm_owner",
      "recipients": ["marine.b@example.com", "sales-leads@example.com"]
    }
  }
}
```


## OpenAPI

````yaml GET /notifications/competitor-alerts
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:
  /notifications/competitor-alerts:
    get:
      tags:
        - Competitor Monitoring
      summary: Get Competitor Alerts
      description: >-
        Returns where competitor alerts go: for each use case (Attack and
        Defense), the Slack channel and the email settings (to the owner from
        your CRM, plus extra addresses), along with the webhook, the Attack
        threshold and its scope, and how far back a single interaction still
        alerts. Alerts are on by default and start going out once a Slack
        channel, an email or the webhook is set.
      operationId: getCompetitorAlerts
      parameters:
        - name: account
          in: query
          required: false
          description: >-
            Optional. An account's Clustr ID (`acc_…`); its LinkedIn numeric id
            also works. Also returns

            `account`: the owner an Attack alert on it names (its owner in your
            CRM, from the last CRM

            sync), with `owner_source` `crm_owner`, or `owner: null` and
            `owner_source: "none"` when your

            CRM names nobody. `recipients` lists who an Attack alert on it is
            emailed to when Attack email

            is on.
          schema:
            type: string
          example: acc_2x3k3af0edqjcjjrvr139d5h8a
      responses:
        '200':
          description: The current setting
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CompetitorAlertsResponse'
        '401':
          description: Invalid or missing API key
components:
  schemas:
    CompetitorAlertsResponse:
      type: object
      required:
        - success
        - data
      properties:
        success:
          type: boolean
          example: true
        data:
          type: object
          properties:
            enabled:
              type: boolean
              description: >-
                Whether competitor alerts are sent. On by default; `false` stops
                alerts on every channel.
            attack_slack_channel_id:
              type: string
              nullable: true
              description: Slack channel Attack alerts post in.
            defense_slack_channel_id:
              type: string
              nullable: true
              description: >-
                Slack channel Defense alerts post in. May equal the Attack
                channel.
            attack_email_enabled:
              type: boolean
              description: >-
                Email each Attack alert to the account owner and
                attack_email_recipients.
            defense_email_enabled:
              type: boolean
              description: >-
                Email each Defense alert to the CS owner and
                defense_email_recipients.
            attack_email_recipients:
              type: array
              items:
                type: string
                format: email
            defense_email_recipients:
              type: array
              items:
                type: string
                format: email
            webhook_enabled:
              type: boolean
            webhook_url:
              type: string
              nullable: true
            has_webhook_secret:
              type: boolean
              description: >-
                True when a webhook signing secret is saved. The secret itself
                is write-only.
            attack_threshold_interactions:
              type: integer
              description: >-
                The Attack threshold: an account with at least this many
                interactions within `attack_threshold_days` triggers an Attack
                alert. Between 1 and 10,000; default 10.
            attack_threshold_days:
              type: integer
              description: >-
                The window, in days, over which `attack_threshold_interactions`
                is counted. Between 1 and 365; default 30.
            attack_threshold_scope:
              type: string
              enum:
                - per_competitor
                - all_competitors
            alert_history_days:
              type: integer
              description: >-
                How old an interaction may be and still alert on its own.
                Default 14.
            has_delivery:
              type: boolean
              description: >-
                True when at least one Slack channel, email or webhook is set up
                to receive alerts. Alerts are sent only when it is true.
            customers:
              type: boolean
            targets:
              type: boolean
              description: >-
                Whether Attack alerts are sent. They cover target accounts and
                every other account that is not a customer, each labelled with
                its kind.
            attack_other_accounts:
              type: boolean
              description: >-
                True (the default) also alerts on other accounts, the
                non-customers that are not on your target account list, labelled
                Other account. False mutes them.
            defense_interaction_kinds:
              type: array
              items:
                type: string
                enum:
                  - comment
                  - like
              description: >-
                Defense alerts: the interactions that count, `comment` and/or
                `like`. Default both.
            attack_interaction_kinds:
              type: array
              items:
                type: string
                enum:
                  - comment
                  - like
              description: >-
                Attack alerts: the interactions that count, `comment` and/or
                `like`. Default both.
            defense_min_people:
              type: integer
              description: >-
                Defense alerts: an account alerts once this many people there
                were engaged in the period. Default 2.
            attack_min_people:
              type: integer
              description: >-
                Attack alerts: an account alerts once this many people there
                were engaged in the period. Default 2.
            defense_period_days:
              type: integer
              description: >-
                Defense alerts: the period the people engaged are counted over,
                in days (1 to 365). Default 30.
            attack_period_days:
              type: integer
              description: >-
                Attack alerts: the period the people engaged are counted over,
                in days (1 to 365). Default 30.
            defense_comment_alone:
              type: boolean
              description: >-
                Defense alerts: a comment is enough. An account also alerts when
                one comment there falls in the period, below
                `defense_min_people`. Default true.
            attack_comment_alone:
              type: boolean
              description: >-
                Attack alerts: a comment is enough. An account also alerts when
                one comment there falls in the period, below
                `attack_min_people`. Default true.
            notify_defaults:
              type: boolean
              description: >-
                Stored and returned as sent. Alert delivery uses the Attack and
                Defense settings above.
            slack_dm:
              type: boolean
              description: >-
                Stored and returned as sent. Alert delivery uses the Attack and
                Defense settings above.
            slack_channel_id:
              type: string
              nullable: true
              description: >-
                Stored and returned as sent. Alert delivery uses the Attack and
                Defense settings above.
            recipients:
              type: array
              description: >-
                Stored and returned as sent. Alert delivery uses the Attack and
                Defense settings above.
              items:
                type: string
                format: email
            is_default:
              type: boolean
              description: True when the workspace never saved the setting.
            updated_at:
              type: string
              format: date-time
            admins:
              type: array
              description: The workspace's admins.
              items:
                type: object
                properties:
                  clustr_user_id:
                    type: string
                    description: >-
                      The member's Clustr ID, for example
                      `usr_tavgqb2hrgsnw3wc0f9sbbjwx0`.
                    example: usr_tavgqb2hrgsnw3wc0f9sbbjwx0
                  user_id:
                    type: string
                    description: >-
                      Kept for integrations built before Clustr IDs. New
                      integrations should use `clustr_user_id`.
                  email:
                    type: string
                    format: email
                  name:
                    type: string
            customer_rule:
              type: object
              description: Who counts as a customer, in one line.
              properties:
                summary:
                  type: string
                count:
                  type: integer
            account:
              type: object
              description: >-
                Present when the request sets `account`: the owner an Attack
                alert on that account names.
              properties:
                name:
                  type: string
                owner:
                  type: object
                  nullable: true
                  description: Null when the CRM names no owner.
                  properties:
                    clustr_user_id:
                      type: string
                      description: >-
                        The member's Clustr ID, for example
                        `usr_tavgqb2hrgsnw3wc0f9sbbjwx0`.
                      example: usr_tavgqb2hrgsnw3wc0f9sbbjwx0
                    user_id:
                      type: string
                      description: >-
                        Kept for integrations built before Clustr IDs. New
                        integrations should use `clustr_user_id`.
                    email:
                      type: string
                      format: email
                    name:
                      type: string
                owner_source:
                  type: string
                  enum:
                    - account_owner
                    - crm_owner
                    - deal_owner
                    - admins
                    - none
                recipients:
                  type: array
                  description: >-
                    Who an Attack alert on it is emailed to, when Attack email
                    is on.
                  items:
                    type: string
  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.