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

# Test alert delivery API

> Fire a synthetic payload through the real delivery path — same headers, same HMAC, same timeout — to verify your webhook end to end. Free.

## Frequently asked questions

<AccordionGroup>
  <Accordion title="How is this different from a real delivery?">
    Only the data. The payload carries `"test": true` and synthetic events, but it travels the identical code path with the same headers, the same HMAC signing and the same timeout. If your verification passes here it will pass in production.
  </Accordion>

  <Accordion title="Does a test move the watermark?">
    No. A test fire never advances the watermark and never consumes real events, so you can run it as often as you need while building your receiver.
  </Accordion>

  <Accordion title="Is there a limit?">
    Roughly 10 test fires per hour per key.
  </Accordion>
</AccordionGroup>


## OpenAPI

````yaml POST /v1/alerts/{id}/test
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}/test:
    post:
      tags:
        - Alerts
      summary: Test alert delivery API
      description: >-
        Fire a synthetic payload through the **real** delivery path — same
        headers, same HMAC signing, same timeout. The payload carries `"test":
        true`.


        Use it to exercise your signature verification end to end before relying
        on live deliveries. Rate-limited to roughly 10 per hour per key. Free.
      operationId: testAlert
      parameters:
        - name: id
          in: path
          required: true
          description: The alert id.
          schema:
            type: string
            example: alrt_9f2c4a1e
      responses:
        '200':
          description: The test fire result, including how your endpoint responded
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: object
                    properties:
                      delivered:
                        type: boolean
                        example: true
                      delivery_id:
                        type: string
                        example: dlv_7a1c3e9f
                      response_status:
                        type: integer
                        example: 200
                      duration_ms:
                        type: integer
                        example: 214
                      error:
                        type: string
                        nullable: true
        '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:
  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'
  schemas:
    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
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        API key in format `tapi_live_[32-char]` (live) or `tapi_test_[32-char]`
        (test)

````