Orq.ai Webhooks API

Create and manage webhooks that deliver workspace events to external HTTPS endpoints.

Operations 8

GET /v2/webhooks List webhooks #
POST /v2/webhooks Create a webhook #
GET /v2/webhooks/count Count webhooks #
POST /v2/webhooks/query Query webhooks #
GET /v2/webhooks/secret Generate a webhook secret #
GET /v2/webhooks/{id} Retrieve a webhook #
DELETE /v2/webhooks/{id} Delete a webhook #
PATCH /v2/webhooks/{id} Update a webhook #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/orq:orq-webhooks-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

orq-webhooks-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: orq.ai Webhooks API
  version: '2.0'
  description: orq.ai API documentation
servers:
- url: https://my.orq.ai
security:
- ApiKey: []
tags:
- name: Webhooks
  description: Create and manage webhooks that deliver workspace events to external HTTPS endpoints.
paths:
  /v2/webhooks:
    get:
      tags:
      - Webhooks
      summary: List webhooks
      description: Returns a page of webhooks in the current workspace. By default, the first 20 matching webhooks are ordered by creation time, newest first. Supplied filters are combined, `count` reports the total number of matches before pagination, and `has_more` indicates whether another page is available.
      operationId: WebhookList
      parameters:
      - name: page
        in: query
        description: One-based page number. Defaults to 1 and must be between 1 and 1,000,000.
        schema:
          type: integer
          format: int32
      - name: limit
        in: query
        description: "Number of webhooks to return per page. Defaults to 20 and must be between\n 1 and 200."
        schema:
          type: integer
          format: int32
      - name: search
        in: query
        description: "Optional case-insensitive substring matched against display name, content\n type, and URL. Maximum length is 200 characters."
        schema:
          type: string
      - name: event
        in: query
        description: "Optional event slug that must be present in the webhook's event\n subscriptions, for example `llm.response`. Maximum length is 200\n characters."
        schema:
          type: string
      - name: sort
        in: query
        description: "Field used to order results. Allowed values are `created`, `updated`, and\n `display_name`. Defaults to `created`."
        schema:
          type: string
      - name: direction
        in: query
        description: Sort direction. Allowed values are `asc` and `desc`. Defaults to `desc`.
        schema:
          type: string
      - name: content_type
        in: query
        description: "Optional comma-separated content types to match, for example\n `application/json,application/x-www-form-urlencoded`. A webhook matches\n when its content type equals any supplied value."
        schema:
          type: string
      - name: enabled
        in: query
        description: "Optional delivery status filter. When omitted, enabled and disabled\n webhooks are returned."
        schema:
          type: boolean
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListWebhooksResponse'
        '401':
          description: Authentication required. See https://docs.orq.ai/reference/errors for the error codes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-speakeasy-group: webhooks
      x-speakeasy-name-override: list
      x-code-samples:
      - lang: curl
        label: Core - List filtered webhooks
        source: "curl --get 'https://my.orq.ai/v2/webhooks' \\\n  --header \"Authorization: Bearer $ORQ_API_KEY\" \\\n  --data-urlencode 'search=production' \\\n  --data-urlencode 'event=llm.response' \\\n  --data-urlencode 'content_type=application/json' \\\n  --data-urlencode 'enabled=true' \\\n  --data-urlencode 'page=1' \\\n  --data-urlencode 'limit=20' \\\n  --data-urlencode 'sort=created' \\\n  --data-urlencode 'direction=desc'\n"
      - lang: python
        label: Python - List filtered webhooks
        source: "import os\nfrom orq_ai_sdk import Orq\n\nclient = Orq(api_key=os.environ[\"ORQ_API_KEY\"])\n\npage = client.webhooks.list(\n    search=\"production\",\n    event=\"llm.response\",\n    content_type=\"application/json\",\n    enabled=True,\n    page=1,\n    limit=20,\n    sort=\"created\",\n    direction=\"desc\",\n)\n\nprint(f\"{page.count} matching webhooks\")\nfor webhook in page.items:\n    print(webhook._id, webhook.display_name)\nprint(f\"Has more: {page.has_more}\")\n"
      - lang: typescript
        label: Node.js - List filtered webhooks
        source: "import { Orq } from '@orq-ai/node';\n\nconst client = new Orq({\n  apiKey: process.env.ORQ_API_KEY,\n});\n\nconst page = await client.webhooks.list({\n  search: 'production',\n  event: 'llm.response',\n  contentType: 'application/json',\n  enabled: true,\n  page: 1,\n  limit: 20,\n  sort: 'created',\n  direction: 'desc',\n});\n\nconsole.log(`${page.count} matching webhooks`);\nfor (const webhook of page.items) {\n  console.log(webhook._id, webhook.displayName);\n}\nconsole.log(`Has more: ${page.hasMore}`);\n"
    post:
      tags:
      - Webhooks
      summary: Create a webhook
      description: Creates a webhook that delivers the selected workspace events to an HTTPS endpoint. Generate a signing secret first with `GET /v2/webhooks/secret`.
      operationId: WebhookCreate
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateWebhookRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Webhook'
        '401':
          description: Authentication required. See https://docs.orq.ai/reference/errors for the error codes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-speakeasy-group: webhooks
      x-speakeasy-name-override: create
      x-code-samples:
      - lang: curl
        label: Core - Create webhook
        source: "curl --request POST \\\n  --url 'https://my.orq.ai/v2/webhooks' \\\n  --header \"Authorization: Bearer $ORQ_API_KEY\" \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n    \"_id\": \"webhook_01HZXW2K7Y8Q9M0N1P2R3S4T5V\",\n    \"url\": \"https://example.com/orq-webhook\",\n    \"content_type\": \"application/json\",\n    \"display_name\": \"Production alerts\",\n    \"events\": [\"deployment.invoked\"],\n    \"secret\": \"orq_wh_example\",\n    \"enabled\": true\n  }'\n"
  /v2/webhooks/count:
    get:
      tags:
      - Webhooks
      summary: Count webhooks
      description: Returns the total number of enabled and disabled webhooks in the current workspace.
      operationId: WebhookCount
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CountWebhooksResponse'
        '401':
          description: Authentication required. See https://docs.orq.ai/reference/errors for the error codes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-speakeasy-group: webhooks
      x-speakeasy-name-override: count
      x-code-samples:
      - lang: curl
        label: Core - Count webhooks
        source: "curl --request GET \\\n  --url 'https://my.orq.ai/v2/webhooks/count' \\\n  --header \"Authorization: Bearer $ORQ_API_KEY\"\n"
  /v2/webhooks/query:
    post:
      tags:
      - Webhooks
      summary: Query webhooks
      description: '**Deprecated.** Returns webhooks matching legacy query filters. Use `GET /v2/webhooks` for pagination, search, event filtering, and sorting.'
      operationId: WebhookQuery
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QueryWebhooksRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QueryWebhooksResponse'
        '401':
          description: Authentication required. See https://docs.orq.ai/reference/errors for the error codes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      deprecated: true
      x-speakeasy-group: webhooks
      x-speakeasy-name-override: query
      x-code-samples:
      - lang: curl
        label: Core - Query webhooks
        source: "curl --request POST \\\n  --url 'https://my.orq.ai/v2/webhooks/query' \\\n  --header \"Authorization: Bearer $ORQ_API_KEY\" \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n    \"sortingProps\": [{\"key\": \"created\", \"direction\": \"desc\"}],\n    \"filters\": []\n  }'\n"
  /v2/webhooks/secret:
    get:
      tags:
      - Webhooks
      summary: Generate a webhook secret
      description: Generates a signing secret for verifying webhook deliveries. The secret is not persisted until it is used to create or update a webhook; store it securely.
      operationId: WebhookGenerateSecret
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenerateWebhookSecretResponse'
        '401':
          description: Authentication required. See https://docs.orq.ai/reference/errors for the error codes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-speakeasy-group: webhooks
      x-speakeasy-name-override: generateSecret
      x-code-samples:
      - lang: curl
        label: Core - Generate webhook secret
        source: "curl --request GET \\\n  --url 'https://my.orq.ai/v2/webhooks/secret' \\\n  --header \"Authorization: Bearer $ORQ_API_KEY\"\n"
  /v2/webhooks/{id}:
    get:
      tags:
      - Webhooks
      summary: Retrieve a webhook
      description: Retrieves a webhook in the current workspace by ID. The signing secret is returned masked; it is only shown in full when the webhook is created.
      operationId: WebhookGet
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Webhook'
        '401':
          description: Authentication required. See https://docs.orq.ai/reference/errors for the error codes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: The resource does not exist. See https://docs.orq.ai/reference/errors for the error codes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-speakeasy-group: webhooks
      x-speakeasy-name-override: get
      x-code-samples:
      - lang: curl
        label: Core - Retrieve webhook
        source: "curl --request GET \\\n  --url 'https://my.orq.ai/v2/webhooks/webhook_01HZXW2K7Y8Q9M0N1P2R3S4T5V' \\\n  --header \"Authorization: Bearer $ORQ_API_KEY\"\n"
    delete:
      tags:
      - Webhooks
      summary: Delete a webhook
      description: Deletes a webhook in the current workspace and returns the deleted webhook ID.
      operationId: WebhookDelete
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeleteWebhookResponse'
        '401':
          description: Authentication required. See https://docs.orq.ai/reference/errors for the error codes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-speakeasy-group: webhooks
      x-speakeasy-name-override: delete
      x-code-samples:
      - lang: curl
        label: Core - Delete webhook
        source: "curl --request DELETE \\\n  --url 'https://my.orq.ai/v2/webhooks/webhook_01HZXW2K7Y8Q9M0N1P2R3S4T5V' \\\n  --header \"Authorization: Bearer $ORQ_API_KEY\"\n"
    patch:
      tags:
      - Webhooks
      summary: Update a webhook
      description: Updates the supplied fields on a webhook in the current workspace. Omitted fields are unchanged. The response contains the applied fields rather than the complete webhook.
      operationId: WebhookUpdate
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
        '401':
          description: Authentication required. See https://docs.orq.ai/reference/errors for the error codes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-speakeasy-group: webhooks
      x-speakeasy-name-override: update
      x-code-samples:
      - lang: curl
        label: Core - Update webhook
        source: "curl --request PATCH \\\n  --url 'https://my.orq.ai/v2/webhooks/webhook_01HZXW2K7Y8Q9M0N1P2R3S4T5V' \\\n  --header \"Authorization: Bearer $ORQ_API_KEY\" \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n    \"display_name\": \"Updated alerts\",\n    \"enabled\": false\n  }'\n"
components:
  schemas:
    DeleteWebhookResponse:
      required:
      - id
      type: object
      properties:
        id:
          type: string
          description: ID of the deleted webhook.
    QueryWebhooksRequest:
      type: object
      properties:
        pagination:
          $ref: '#/components/schemas/QueryParamsPagination'
        sortingProps:
          type: array
          items:
            $ref: '#/components/schemas/QueryParamsSort'
        query:
          type: object
        filters:
          type: array
          items:
            type: object
        includedFields:
          type: object
          additionalProperties:
            type: string
    Webhook:
      required:
      - _id
      - url
      - content_type
      - display_name
      - events
      - secret
      - created_by_id
      - updated_by_id
      - created
      - updated
      type: object
      properties:
        _id:
          type: string
          description: Unique webhook ID.
        url:
          pattern: ^https://
          type: string
          description: HTTPS endpoint that receives webhook deliveries.
          format: uri
        content_type:
          enum:
          - application/json
          - application/x-www-form-urlencoded
          type: string
          description: Content type sent with webhook deliveries.
        display_name:
          type: string
          description: Human-readable webhook name.
        events:
          type: array
          items:
            type: string
          description: Workspace event slugs that trigger a delivery, for example `deployment.invoked` or `llm.response`.
        secret:
          type: string
          description: Signing secret used to compute `X-Orq-Signature` as the lowercase hexadecimal HMAC-SHA256 of the exact request body bytes. Shown in full only in the create response; list and get return a masked value.
        enabled:
          type: boolean
          description: Whether webhook deliveries are enabled.
        failure_count:
          readOnly: true
          type: integer
          description: Server-managed number of consecutive delivery failures.
          format: int32
        created_by_id:
          readOnly: true
          type: string
          description: Account ID that created the webhook.
        updated_by_id:
          readOnly: true
          type: string
          description: Account ID that most recently updated the webhook.
        created:
          readOnly: true
          type: string
          description: Creation time in RFC 3339 format.
          format: date-time
        updated:
          readOnly: true
          type: string
          description: Most recent update time in RFC 3339 format.
          format: date-time
      description: A webhook subscription and its delivery configuration. The signing secret is shown in full only in the create response and is masked everywhere else.
    QueryParamsSort:
      type: object
      properties:
        key:
          type: string
        direction:
          type: string
    CountWebhooksResponse:
      required:
      - total
      type: object
      properties:
        total:
          type: integer
          description: Total number of webhooks in the current workspace.
          format: int32
      description: Webhook count for the current workspace.
    QueryParamsPagination:
      type: object
      properties:
        page:
          type: integer
          format: int32
        limit:
          type: integer
          format: int32
        lastId:
          type: string
        firstId:
          type: string
    QueryWebhooksResponse:
      required:
      - count
      - items
      type: object
      properties:
        count:
          type: integer
          format: int32
        items:
          type: array
          items:
            $ref: '#/components/schemas/Webhook'
    ListWebhooksResponse:
      required:
      - count
      - items
      - has_more
      type: object
      properties:
        count:
          type: integer
          description: Total number of webhooks matching the filters, before pagination.
          format: int32
        items:
          type: array
          items:
            $ref: '#/components/schemas/Webhook'
          description: Requested page of webhooks.
        has_more:
          type: boolean
          description: Whether another page of matching webhooks is available.
      description: A page of webhooks and the total number of matching records.
    ErrorResponse:
      type: object
      properties:
        message:
          type: string
          description: Human-readable error message.
        code:
          type: integer
          description: gRPC status code, when the service reports one.
        details:
          type: array
          items: {}
          description: Additional error details, when the service reports any.
      required:
      - message
    CreateWebhookRequest:
      required:
      - _id
      - url
      - content_type
      - display_name
      - events
      - secret
      type: object
      properties:
        _id:
          minLength: 1
          type: string
          description: Client-generated webhook ID.
        url:
          pattern: ^https://
          type: string
          description: HTTPS endpoint that receives webhook deliveries.
          format: uri
        content_type:
          enum:
          - application/json
          - application/x-www-form-urlencoded
          type: string
          description: Content type sent with webhook deliveries.
        display_name:
          type: string
          description: Human-readable webhook name.
        events:
          minItems: 1
          type: array
          items:
            type: string
          description: One or more workspace event slugs that trigger a delivery, for example `deployment.invoked` or `llm.response`.
        secret:
          writeOnly: true
          minLength: 1
          type: string
          description: Signing secret returned by `GET /v2/webhooks/secret`. Deliveries set `X-Orq-Signature` to the lowercase hexadecimal HMAC-SHA256 of the exact request body bytes.
        enabled:
          type: boolean
          description: Whether webhook deliveries are enabled.
      description: Configuration used to create a webhook in the current workspace.
    GenerateWebhookSecretResponse:
      required:
      - secret
      type: object
      properties:
        secret:
          type: string
          description: Signing secret to supply when creating or updating a webhook. Store it securely.
      description: A newly generated webhook signing secret.
  securitySchemes:
    ApiKey:
      type: http
      scheme: bearer
      bearerFormat: JWT
externalDocs:
  url: https://docs.orq.ai
  description: orq.ai Documentation
x-speakeasy-timeout: 600000