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

# Register a webhook

> Registers a public HTTPS endpoint for one event type. Your service receives previous and current values and decides how to respond. Creating a webhook does not disable a default hook.

The response includes a signing secret once. Store it in your service and verify deliveries as described in [Webhook events](/reference/webhooks). Destinations on private, loopback, link-local, or metadata-service addresses are rejected, including after DNS resolution. Redirects are not followed.



## OpenAPI

````yaml /reference/openapi.yaml post /hooks
openapi: 3.1.0
info:
  title: Antigen API
  version: v1
  description: >-
    Work with the same agents, runs, and resources your team uses in Antigen.
    Requests and responses use camelCase fields. List endpoints return arrays.
    See the [overview](/reference) for authentication, updates, and errors.
servers:
  - url: https://api.antigen.sh/v1
security:
  - ApiKeyAuth: []
tags:
  - name: Agents
    description: Retrieve, compose, and register agent configurations.
  - name: Models
    description: Models available to agents in your organization.
  - name: Targets
    description: Submit testing scope for human approval.
  - name: Runs
    description: Execute agents and control their work.
  - name: Vulnerabilities
    description: Track weaknesses, remediation, status, and assignment.
  - name: Evidence
    description: Read supporting file metadata and retrieve file contents.
  - name: Reports
    description: Read and export captured engagement results.
  - name: Human tasks
    description: Ask people for help and follow their responses.
  - name: Hooks
    description: Connect status and assignment changes to your own service.
  - name: Asset Map
    description: Read your organization’s infrastructure graph.
  - name: Integrations
    description: Inspect and disconnect provider connections.
  - name: API keys
    description: Create and revoke credentials for automation.
paths:
  /hooks:
    post:
      tags:
        - Hooks
      summary: Register a webhook
      description: >-
        Registers a public HTTPS endpoint for one event type. Your service
        receives previous and current values and decides how to respond.
        Creating a webhook does not disable a default hook.


        The response includes a signing secret once. Store it in your service
        and verify deliveries as described in [Webhook
        events](/reference/webhooks). Destinations on private, loopback,
        link-local, or metadata-service addresses are rejected, including after
        DNS resolution. Redirects are not followed.
      operationId: createHook
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateHook'
      responses:
        '201':
          description: Created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreatedHook'
        '400':
          $ref: '#/components/responses/Error400'
        '401':
          $ref: '#/components/responses/Error401'
        '403':
          $ref: '#/components/responses/Error403'
        '429':
          $ref: '#/components/responses/Error429'
components:
  schemas:
    CreateHook:
      type: object
      properties:
        event:
          type: string
          enum:
            - vulnerability.status_changed
            - vulnerability.assignee_changed
        url:
          type: string
          description: Public HTTPS endpoint that receives events.
          format: uri
          pattern: ^https://
        enabled:
          type: boolean
          default: true
      required:
        - event
        - url
      additionalProperties: false
      example:
        event: vulnerability.assignee_changed
        url: https://automation.example.com/antigen/events
        enabled: true
    CreatedHook:
      type: object
      properties:
        id:
          type: string
          description: >-
            Built-in hook IDs are triage, remediation, and verification. Custom
            webhook IDs are opaque.
          minLength: 1
        event:
          type: string
          enum:
            - vulnerability.status_changed
            - vulnerability.assignee_changed
        url:
          type:
            - string
            - 'null'
          format: uri
          description: Webhook destination. Null for a built-in hook.
        enabled:
          type: boolean
        builtIn:
          type: boolean
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        secret:
          type: string
          description: >-
            Signing secret returned only when the hook is created. Store it in
            your receiving service.
      required:
        - id
        - event
        - url
        - enabled
        - builtIn
        - createdAt
        - updatedAt
        - secret
      additionalProperties: false
      example:
        id: hook_123
        event: vulnerability.assignee_changed
        url: https://automation.example.com/antigen/events
        enabled: true
        builtIn: false
        createdAt: '2026-09-13T10:00:00.000Z'
        updatedAt: '2026-09-13T10:00:00.000Z'
        secret: whsec_example_only
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              description: Stable error code.
            message:
              type: string
              description: Description of the problem.
          required:
            - code
            - message
          additionalProperties: false
      required:
        - error
      additionalProperties: false
      example:
        error:
          code: invalid_request
          message: The target value is required.
  responses:
    Error400:
      description: Invalid request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: invalid_request
              message: Check the request fields and values.
    Error401:
      description: Authentication required
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: unauthorized
              message: Supply a valid API key.
    Error403:
      description: Permission denied
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: forbidden
              message: The API key does not permit this operation or requested scope.
    Error429:
      description: Too many requests
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: rate_limited
              message: Retry after the interval in Retry-After.
      headers:
        Retry-After:
          description: Seconds to wait before retrying.
          schema:
            type: integer
            minimum: 1
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        API key from your organization. Supply the value directly, without a
        Bearer prefix.

````