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

# Update alert API

> Edit an alert's name, status, webhook URL, filters, crawl cadence or delivery frequency. Scope is immutable. Free.

## Frequently asked questions

<AccordionGroup>
  <Accordion title="How do I pause and resume an alert?">
    Patch `status` to `paused` to stop deliveries, and back to `active` to resume. While paused the watermark stays where it is, so resuming picks up from where you left off rather than replaying everything.
  </Accordion>

  <Accordion title="What happens when I re-enable a disabled alert?">
    It resumes with a clean failure count. A backlog guard caps how far back the resumed sweep reaches at 7 days, and the next payload carries a `gap` note telling you that older events were skipped. An alert that has never swept is exempt, since its watermark is the `backfill_days` value you deliberately chose.
  </Accordion>

  <Accordion title="Which fields cannot be changed?">
    The scope — `technology_id`, `category_id`, `domains` and `segment_id`. The watermark's meaning is bound to the scope, so changing it would corrupt delivery tracking. Delete and recreate instead.
  </Accordion>
</AccordionGroup>


## OpenAPI

````yaml PATCH /v1/alerts/{id}
openapi: 3.1.0
info:
  title: TechnologyChecker API
  description: >-
    Discover technology stacks, track market trends, and enrich data with
    company intelligence.
  version: 1.0.0
  contact:
    name: TechnologyChecker Support
    email: support@technologychecker.io
    url: https://technologychecker.io
servers:
  - url: https://api.technologychecker.io
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Domain technologies
    description: Look up technologies detected on any domain
  - name: Technology data
    description: Search, look up, and get details on tracked technologies
  - name: Market intelligence
    description: Technology stats, trends, and market share
  - name: Company data
    description: Firmographic and company intelligence
  - name: Live detection
    description: Real-time technology detection with browser rendering
  - name: Signals
    description: >-
      Intent signals derived from technology state transitions: who adopted, who
      churned, who switched, and who has a gap in their stack.
  - name: Alerts
    description: >-
      Saved signal queries delivered to your webhook. Every signal you can
      query, you can subscribe to.
  - name: Audiences
    description: >-
      Saved groups of domains — uploaded lists or computed recipes — that you
      can profile, slice and monitor.
  - name: Lead lists
    description: >-
      Build and export targeted domain lists combining technology detection with
      company data.
paths:
  /v1/alerts/{id}:
    patch:
      tags:
        - Alerts
      summary: Update alert API
      description: >-
        Edit an alert's name, status, webhook URL, filters, crawl cadence or
        delivery frequency.


        **Scope is immutable** — delete and recreate to change what the alert
        watches. Setting `status` back to `active` on a disabled alert
        re-enables it with a clean slate; the resumed sweep reaches back at most
        7 days and the next payload carries a `gap` note saying so. Free.
      operationId: updateAlert
      parameters:
        - name: id
          in: path
          required: true
          description: The alert id.
          schema:
            type: string
            example: alrt_9f2c4a1e
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                status:
                  type: string
                  enum:
                    - active
                    - paused
                webhook_url:
                  type: string
                  format: uri
                filters:
                  $ref: '#/components/schemas/AlertFilters'
                crawl_cadence:
                  type: string
                  enum:
                    - daily
                    - weekly
                    - monthly
                delivery_frequency:
                  type: string
                  enum:
                    - hourly
                    - daily
              example:
                status: paused
      responses:
        '200':
          description: The updated alert
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: object
                    properties:
                      alert:
                        $ref: '#/components/schemas/Alert'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
components:
  schemas:
    AlertFilters:
      type: object
      description: >-
        Row-level filters applied to every sweep. Firmographic keys use the same
        vocabulary as the Signals API.
      properties:
        min_confidence:
          type: number
          format: float
          default: 0.5
          description: Detection-rate floor.
          example: 0.5
        churn_reliability:
          type: array
          items:
            type: string
            enum:
              - high
              - medium
              - low
          description: >-
            Churn alerts only. Defaults to `["high","medium"]` — low-reliability
            technologies flap and produce false-churn spam. Unclassified
            technologies count as medium.
          example:
            - high
            - medium
        min_confidence_label:
          type: string
          enum:
            - high
            - medium
            - low
          description: >-
            Per-event confidence floor, off by default. Unlike
            `churn_reliability` this gates the combined score and applies to
            adoption too, so it is how a watchlist suppresses single-scan noise.
            Note that a churn with fewer than 2 detections is floored to `low`,
            so any value above `low` drops single-scan churns.
          example: medium
        country:
          type: string
          example: united states
        city:
          type: string
        state:
          type: string
        industry:
          type: string
        industry_code:
          type: integer
        employees:
          type: string
          example: 51-200
        company_type:
          type: string
        founded_min:
          type: integer
        founded_max:
          type: integer
        company:
          type: boolean
          description: Attach company cards without filtering.
        has_email:
          type: boolean
        has_phone:
          type: boolean
        social:
          type: string
        language:
          type: string
        web_country:
          type: string
    Alert:
      type: object
      properties:
        id:
          type: string
          example: alrt_9f2c4a1e
        name:
          type: string
          example: Who leaves Shopify (US, 51-200)
        signal_types:
          type: array
          items:
            type: string
            enum:
              - churn
              - adoption
              - switch
          example:
            - switch
        scope:
          type: object
          description: The saved scope. Immutable after creation.
          properties:
            kind:
              type: string
              enum:
                - technology
                - category
                - domains
                - segment
              example: technology
            technology_id:
              type: integer
              nullable: true
              example: 2184
            technology_name:
              type: string
              nullable: true
              example: Shopify
            category_id:
              type: integer
              nullable: true
            domains:
              type: array
              nullable: true
              items:
                type: string
            segment_id:
              type: string
              nullable: true
        direction:
          type: string
          nullable: true
          enum:
            - from
            - to
            - null
        missing_category_id:
          type: integer
          nullable: true
          description: Set turns an adoption alert into a whitespace-entrant alert.
        filters:
          $ref: '#/components/schemas/AlertFilters'
        webhook_url:
          type: string
          format: uri
          example: https://example.com/hooks/tc
        status:
          type: string
          enum:
            - active
            - paused
            - disabled
          example: active
        delivery_frequency:
          type: string
          enum:
            - hourly
            - daily
          default: daily
          example: daily
        crawl_cadence:
          type: string
          nullable: true
          enum:
            - daily
            - weekly
            - monthly
            - null
          example: monthly
        last_fired_at:
          type: string
          nullable: true
          example: '2026-06-10 17:39:39'
        consecutive_failures:
          type: integer
          example: 0
        created_at:
          type: string
          example: '2026-06-10T16:39:39.000Z'
        updated_at:
          type: string
          example: '2026-06-10T16:39:39.000Z'
    ApiError:
      type: object
      properties:
        success:
          type: boolean
          example: false
        error:
          type: object
          properties:
            code:
              type: string
              example: UNAUTHORIZED
            message:
              type: string
              example: Missing or invalid API key
  responses:
    BadRequest:
      description: Invalid or missing parameters
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
          example:
            success: false
            error:
              code: VALIDATION_ERROR
              message: >-
                Provide exactly one scope: technology_id, technology or
                category_id.
    Unauthorized:
      description: Missing or invalid API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
    Forbidden:
      description: The plan does not allow this action, or a plan limit was reached
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
          example:
            success: false
            error:
              code: PLAN_LIMIT
              message: >-
                Your plan allows up to 2 saved audiences. Delete one to create
                another.
    NotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
    RateLimited:
      description: Rate limit exceeded
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        API key in format `tapi_live_[32-char]` (live) or `tapi_test_[32-char]`
        (test)

````