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

# Add a webhook endpoint

> Add an HTTPS endpoint that receives search and shortlist events as signed POSTs, so results reach your systems without an agent running. Returns the signing secret once. Up to 10 endpoints a workspace. events defaults to every event (["*"]). The URL must be public HTTPS; private, loopback and link-local addresses are refused, and redirects are never followed. Store secret now: it is not shown again. Does not use credits.

Needs scope `webhooks:write`.



## OpenAPI

````yaml /openapi.json post /webhooks
openapi: 3.1.0
info:
  title: Revcenter API
  version: v1
  description: >-
    Projects, searches, scored candidates and shortlists. Generated from the
    agent API's registry.
servers:
  - url: https://api.revcenter.ai/v1
security:
  - bearer: []
tags:
  - name: Login
  - name: Account
  - name: Actions
  - name: Reference
  - name: Projects
  - name: Searches
  - name: Scoring
  - name: Shortlists
  - name: Candidates
  - name: Webhooks
  - name: Health
paths:
  /webhooks:
    post:
      tags:
        - Webhooks
      summary: Add a webhook endpoint
      description: >-
        Add an HTTPS endpoint that receives search and shortlist events as
        signed POSTs, so results reach your systems without an agent running.
        Returns the signing secret once. Up to 10 endpoints a workspace. events
        defaults to every event (["*"]). The URL must be public HTTPS; private,
        loopback and link-local addresses are refused, and redirects are never
        followed. Store secret now: it is not shown again. Does not use credits.


        Needs scope `webhooks:write`.
      operationId: create_webhook
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - url
              properties:
                url:
                  type: string
                  description: https://… on a public host.
                events:
                  type: array
                  items:
                    type: string
                    enum:
                      - '*'
                      - search.queued
                      - search.started
                      - search.completed
                      - search.failed
                      - shortlist.changed
                      - webhook.test
                  description: The events to send, or ["*"] (the default) for all.
                description:
                  type: string
                  maxLength: 200
            example:
              url: https://hooks.example.com/revcenter
              events:
                - search.completed
                - shortlist.changed
              description: ATS sync
      responses:
        '201':
          description: Created
          headers:
            X-RateLimit-Limit:
              description: >-
                Requests allowed this minute (the tighter of the key's and the
                workspace's).
              schema:
                type: integer
            X-RateLimit-Remaining:
              description: Requests left this minute.
              schema:
                type: integer
            X-RateLimit-Reset:
              description: When the minute resets, in Unix seconds.
              schema:
                type: integer
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/CreatedWebhook'
                  meta:
                    $ref: '#/components/schemas/Meta'
              example:
                data:
                  id: 5e4d3c2b-1a09-4f8e-9d7c-6b5a4f3e2d1c
                  url: https://hooks.example.com/revcenter
                  description: ATS sync
                  events:
                    - search.completed
                    - shortlist.changed
                  enabled: true
                  disabled_reason: null
                  consecutive_failures: 0
                  secret_hint: whsec_…Qz1c
                  created_at: '2026-10-19T09:12:00.000Z'
                  updated_at: '2026-10-19T09:12:00.000Z'
                  secret: whsec_3q2-7wE1Vb0N8c5k2Lr9xY4mT6pA1sD0fG7hJ3kQz1c
                meta:
                  request_id: req_01JABCDEF
        '400':
          $ref: '#/components/responses/Error'
        '401':
          $ref: '#/components/responses/Error'
        '402':
          $ref: '#/components/responses/Error'
        '403':
          $ref: '#/components/responses/Error'
        '404':
          $ref: '#/components/responses/Error'
        '409':
          $ref: '#/components/responses/Error'
        '429':
          $ref: '#/components/responses/Error'
        '500':
          $ref: '#/components/responses/Error'
        '503':
          $ref: '#/components/responses/Error'
components:
  schemas:
    CreatedWebhook:
      allOf:
        - $ref: '#/components/schemas/Webhook'
        - type: object
          properties:
            secret:
              type: string
              description: >-
                The signing secret (whsec_…), shown once. Verify each delivery's
                Revcenter-Signature with it.
    Meta:
      type: object
      properties:
        request_id:
          type: string
        total:
          type: integer
          description: On lists that count everything that matched.
    Webhook:
      type: object
      properties:
        id:
          type: string
        url:
          type: string
        description:
          type:
            - string
            - 'null'
        events:
          type: array
          items:
            type: string
          description: Event types it receives, or ["*"] for all.
        enabled:
          type: boolean
        disabled_reason:
          type:
            - string
            - 'null'
          description: 'Why it is off: turned off, or 20 deliveries in a row abandoned.'
        consecutive_failures:
          type: integer
          description: Deliveries abandoned in a row; a delivered one resets it.
        secret_hint:
          type: string
          description: The secret's last four characters.
        created_at:
          type: string
        updated_at:
          type: string
    Error:
      type: object
      required:
        - error
      properties:
        error:
          type: object
          required:
            - code
            - message
            - request_id
          properties:
            code:
              type: string
              description: 'Stable: every code is on the Errors page.'
            message:
              type: string
            details:
              type:
                - object
                - 'null'
              description: >-
                Structured specifics, when there are any (for example
                retry_after_seconds).
            request_id:
              type: string
        meta:
          $ref: '#/components/schemas/Meta'
      example:
        error:
          code: search_not_found
          message: No search with that id in this workspace.
          details: null
          request_id: req_01JABCDEF
        meta:
          request_id: req_01JABCDEF
  responses:
    Error:
      description: 'An error: one envelope everywhere. A 429 carries Retry-After.'
      headers:
        X-RateLimit-Limit:
          description: >-
            Requests allowed this minute (the tighter of the key's and the
            workspace's).
          schema:
            type: integer
        X-RateLimit-Remaining:
          description: Requests left this minute.
          schema:
            type: integer
        X-RateLimit-Reset:
          description: When the minute resets, in Unix seconds.
          schema:
            type: integer
        Retry-After:
          description: Seconds to wait (on 429 and 503).
          schema:
            type: integer
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
      description: An API key from Settings → Usage → API (rvc_live_…).

````

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