Ando Webhooks API

Outbound webhook endpoint and delivery routes.

OpenAPI Specification

ando-webhooks-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  description: Generated from Ando's accepted public API v1 contract metadata. Current routes preserve legacy /api/v1 response envelopes while converging on the public https://api.ando.so/v1 shape.
  title: Ando Public Calls Webhooks API
  version: v1
servers:
- description: Canonical public API host.
  url: https://api.ando.so/v1
tags:
- description: Outbound webhook endpoint and delivery routes.
  name: Webhooks
paths:
  /webhook-endpoints:
    post:
      description: Creates a workspace webhook endpoint and returns its signing secret exactly once.
      operationId: createWebhookEndpoint
      requestBody:
        content:
          application/json:
            examples:
              endpoint:
                summary: Create a webhook endpoint.
                value:
                  name: Production receiver
                  url: https://example.com/ando/webhooks
                  enabled_events:
                  - webhook.test
                  - message.created
                  - message.updated
                  - conversation.membership.created
                  - conversation.archived
                  - conversation.unarchived
                  - call.started
                  - call.ended
                  - call.updated
                  - call.transcript.updated
            schema:
              $ref: '#/components/schemas/CreateWebhookEndpointBody'
        required: true
      responses:
        '201':
          content:
            application/json:
              examples:
                created:
                  summary: Created endpoint with one-time signing secret.
                  value:
                    data:
                      object: webhook_endpoint
                      id: wep_01jzn7e61x3a7v9h2r7t2m3q4p
                      workspace_id: workspace_01jzn7e61x3a7v9h2r7t2m3q4p
                      name: Production receiver
                      url: https://example.com/ando/webhooks
                      enabled_events:
                      - webhook.test
                      - message.created
                      - message.updated
                      - conversation.membership.created
                      - conversation.archived
                      - conversation.unarchived
                      - call.started
                      - call.ended
                      - call.updated
                      - call.transcript.updated
                      delivery_scope:
                        type: workspace_member
                        actor_workspace_membership_id: wsm_01jzn7e61x3a7v9h2r7t2m3q4p
                        direct_message_delivery_enabled: false
                      status: active
                      signing_secret_prefix: example
                      previous_signing_secret_expires_at: null
                      disabled_at: null
                      created_at: '2026-05-27T08:00:00.000Z'
                      updated_at: '2026-05-27T08:00:00.000Z'
                      signing_secret: example
              schema:
                $ref: '#/components/schemas/WebhookEndpointSecretResponse'
          description: Created webhook endpoint.
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
      security:
      - AndoApiKey: []
      - BearerApiKey: []
      summary: Create a webhook endpoint
      tags:
      - Webhooks
      x-ando-compatibility-mode: standard_public
      x-ando-migration-target: standard_public
      x-ando-rate-limit-policy: declared
      x-ando-route-id: api.api_v1_webhook_endpoints.post
      x-ando-required: true
      x-ando-canonical-host: api.ando.so
      x-ando-documentation-owner: api_platform
      x-ando-principal-kind: workspace_api_key
      x-ando-public-api-route-class: durable_ingress
      x-ando-public-path: /v1/webhook-endpoints
      x-ando-runtime-owner: convex_product
      x-ando-status-probe-owner: none
      x-ando-rollback-runtime: convex_http
      x-ando-selected-runtime: convex_http
      x-ando-target-runtime: convex_http
    get:
      description: Lists workspace webhook endpoint metadata.
      operationId: listWebhookEndpoints
      responses:
        '200':
          content:
            application/json:
              examples:
                endpoints:
                  summary: Webhook endpoints.
                  value:
                    data:
                      items:
                      - object: webhook_endpoint
                        id: wep_01jzn7e61x3a7v9h2r7t2m3q4p
                        workspace_id: workspace_01jzn7e61x3a7v9h2r7t2m3q4p
                        name: Production receiver
                        url: https://example.com/ando/webhooks
                        enabled_events:
                        - webhook.test
                        - message.created
                        - message.updated
                        - conversation.membership.created
                        - conversation.archived
                        - conversation.unarchived
                        - call.started
                        - call.ended
                        - call.updated
                        - call.transcript.updated
                        delivery_scope:
                          type: workspace_member
                          actor_workspace_membership_id: wsm_01jzn7e61x3a7v9h2r7t2m3q4p
                          direct_message_delivery_enabled: false
                        status: active
                        signing_secret_prefix: example
                        previous_signing_secret_expires_at: null
                        disabled_at: null
                        created_at: '2026-05-27T08:00:00.000Z'
                        updated_at: '2026-05-27T08:00:00.000Z'
                    items:
                    - object: webhook_endpoint
                      id: wep_01jzn7e61x3a7v9h2r7t2m3q4p
                      workspace_id: workspace_01jzn7e61x3a7v9h2r7t2m3q4p
                      name: Production receiver
                      url: https://example.com/ando/webhooks
                      enabled_events:
                      - webhook.test
                      - message.created
                      - message.updated
                      - conversation.membership.created
                      - conversation.archived
                      - conversation.unarchived
                      - call.started
                      - call.ended
                      - call.updated
                      - call.transcript.updated
                      delivery_scope:
                        type: workspace_member
                        actor_workspace_membership_id: wsm_01jzn7e61x3a7v9h2r7t2m3q4p
                        direct_message_delivery_enabled: false
                      status: active
                      signing_secret_prefix: example
                      previous_signing_secret_expires_at: null
                      disabled_at: null
                      created_at: '2026-05-27T08:00:00.000Z'
                      updated_at: '2026-05-27T08:00:00.000Z'
              schema:
                $ref: '#/components/schemas/WebhookEndpointListResponse'
          description: Webhook endpoints.
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
      security:
      - AndoApiKey: []
      - BearerApiKey: []
      summary: List webhook endpoints
      tags:
      - Webhooks
      x-ando-compatibility-mode: standard_public
      x-ando-migration-target: standard_public
      x-ando-rate-limit-policy: declared
      x-ando-route-id: api.api_v1_webhook_endpoints.get
      x-ando-required: true
      x-ando-canonical-host: api.ando.so
      x-ando-documentation-owner: api_platform
      x-ando-principal-kind: workspace_api_key
      x-ando-public-api-route-class: public_data
      x-ando-public-path: /v1/webhook-endpoints
      x-ando-runtime-owner: convex_product
      x-ando-status-probe-owner: none
      x-ando-rollback-runtime: convex_http
      x-ando-selected-runtime: convex_http
      x-ando-target-runtime: convex_http
  /webhook-endpoints/{endpointId}:
    get:
      description: Returns webhook endpoint metadata and a recent delivery summary.
      operationId: getWebhookEndpoint
      parameters:
      - description: Webhook endpoint identifier.
        in: path
        name: endpointId
        required: true
        schema:
          description: Webhook endpoint identifier.
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookEndpointDetailResponse'
          description: Webhook endpoint details.
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
      security:
      - AndoApiKey: []
      - BearerApiKey: []
      summary: Get a webhook endpoint
      tags:
      - Webhooks
      x-ando-compatibility-mode: standard_public
      x-ando-migration-target: standard_public
      x-ando-rate-limit-policy: declared
      x-ando-route-id: api.api_v1_webhook_endpoints_by_endpointid.get
      x-ando-required: true
      x-ando-canonical-host: api.ando.so
      x-ando-documentation-owner: api_platform
      x-ando-principal-kind: workspace_api_key
      x-ando-public-api-route-class: public_data
      x-ando-public-path: /v1/webhook-endpoints/:endpointId
      x-ando-runtime-owner: convex_product
      x-ando-status-probe-owner: none
      x-ando-rollback-runtime: convex_http
      x-ando-selected-runtime: convex_http
      x-ando-target-runtime: convex_http
    patch:
      description: Updates webhook endpoint metadata and delivery settings.
      operationId: updateWebhookEndpoint
      parameters:
      - description: Webhook endpoint identifier.
        in: path
        name: endpointId
        required: true
        schema:
          description: Webhook endpoint identifier.
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateWebhookEndpointBody'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookEndpointResponse'
          description: Updated webhook endpoint.
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
      security:
      - AndoApiKey: []
      - BearerApiKey: []
      summary: Update a webhook endpoint
      tags:
      - Webhooks
      x-ando-compatibility-mode: standard_public
      x-ando-migration-target: standard_public
      x-ando-rate-limit-policy: declared
      x-ando-route-id: api.api_v1_webhook_endpoints_by_endpointid.patch
      x-ando-required: true
      x-ando-canonical-host: api.ando.so
      x-ando-documentation-owner: api_platform
      x-ando-principal-kind: workspace_api_key
      x-ando-public-api-route-class: durable_ingress
      x-ando-public-path: /v1/webhook-endpoints/:endpointId
      x-ando-runtime-owner: convex_product
      x-ando-status-probe-owner: none
      x-ando-rollback-runtime: convex_http
      x-ando-selected-runtime: convex_http
      x-ando-target-runtime: convex_http
  /webhook-endpoints/{endpointId}/rotate-secret:
    post:
      description: Rotates a webhook endpoint signing secret and returns the new secret exactly once.
      operationId: rotateWebhookEndpointSecret
      parameters:
      - description: Webhook endpoint identifier.
        in: path
        name: endpointId
        required: true
        schema:
          description: Webhook endpoint identifier.
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RotateWebhookEndpointSecretBody'
        required: false
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookEndpointSecretResponse'
          description: Rotated webhook endpoint secret.
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
      security:
      - AndoApiKey: []
      - BearerApiKey: []
      summary: Rotate webhook endpoint secret
      tags:
      - Webhooks
      x-ando-compatibility-mode: standard_public
      x-ando-migration-target: standard_public
      x-ando-rate-limit-policy: declared
      x-ando-route-id: api.api_v1_webhook_endpoints_by_endpointid_rotate_secret.post
      x-ando-required: true
      x-ando-canonical-host: api.ando.so
      x-ando-documentation-owner: api_platform
      x-ando-principal-kind: workspace_api_key
      x-ando-public-api-route-class: durable_ingress
      x-ando-public-path: /v1/webhook-endpoints/:endpointId/rotate-secret
      x-ando-runtime-owner: convex_product
      x-ando-status-probe-owner: none
      x-ando-rollback-runtime: convex_http
      x-ando-selected-runtime: convex_http
      x-ando-target-runtime: convex_http
  /webhook-endpoints/{endpointId}/test:
    post:
      description: Creates a webhook.test event and schedules delivery to one endpoint.
      operationId: sendWebhookEndpointTestEvent
      parameters:
      - description: Webhook endpoint identifier.
        in: path
        name: endpointId
        required: true
        schema:
          description: Webhook endpoint identifier.
          type: string
      responses:
        '202':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookTestEventResponse'
          description: Scheduled webhook test event.
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
      security:
      - AndoApiKey: []
      - BearerApiKey: []
      summary: Send a webhook test event
      tags:
      - Webhooks
      x-ando-compatibility-mode: standard_public
      x-ando-migration-target: standard_public
      x-ando-rate-limit-policy: declared
      x-ando-route-id: api.api_v1_webhook_endpoints_by_endpointid_test.post
      x-ando-required: true
      x-ando-canonical-host: api.ando.so
      x-ando-documentation-owner: api_platform
      x-ando-principal-kind: workspace_api_key
      x-ando-public-api-route-class: durable_ingress
      x-ando-public-path: /v1/webhook-endpoints/:endpointId/test
      x-ando-runtime-owner: convex_product
      x-ando-status-probe-owner: none
      x-ando-rollback-runtime: convex_http
      x-ando-selected-runtime: convex_http
      x-ando-target-runtime: convex_http
  /webhook-deliveries:
    get:
      description: Lists webhook deliveries with optional endpoint, event, status, and creation-time filters.
      operationId: listWebhookDeliveries
      parameters:
      - description: Filter by webhook endpoint identifier.
        in: query
        name: endpoint_id
        schema:
          description: Filter by webhook endpoint identifier.
          type: string
      - description: Filter by webhook event identifier.
        in: query
        name: event_id
        schema:
          description: Filter by webhook event identifier.
          type: string
      - description: Filter by delivery status.
        in: query
        name: status
        schema:
          description: Filter by delivery status.
          type: string
      - description: Return deliveries created after this timestamp.
        in: query
        name: created_after
        schema:
          description: Return deliveries created after this timestamp.
          type: string
      - description: Return deliveries created before this timestamp.
        in: query
        name: created_before
        schema:
          description: Return deliveries created before this timestamp.
          type: string
      - description: Maximum number of deliveries to return.
        in: query
        name: limit
        schema:
          description: Maximum number of deliveries to return.
          type: integer
          minimum: 1
      responses:
        '200':
          content:
            application/json:
              examples:
                deliveries:
                  summary: Webhook deliveries.
                  value:
                    data:
                      items:
                      - object: webhook_delivery
                        id: whd_01jzn7e61x3a7v9h2r7t2m3q4p
                        workspace_id: workspace_01jzn7e61x3a7v9h2r7t2m3q4p
                        endpoint_id: wep_01jzn7e61x3a7v9h2r7t2m3q4p
                        endpoint_url: https://example.com/ando/webhooks
                        endpoint_status: active
                        endpoint_enabled_events:
                        - webhook.test
                        - message.created
                        - message.updated
                        - conversation.membership.created
                        - conversation.archived
                        - conversation.unarchived
                        - call.started
                        - call.ended
                        - call.updated
                        - call.transcript.updated
                        endpoint_signing_secret_prefix: example
                        event_id: whe_01jzn7e61x3a7v9h2r7t2m3q4p
                        event_type: webhook.test
                        api_version: '2026-05-27'
                        status: scheduled
                        attempt_count: 0
                        max_attempts: 8
                        next_attempt_at: '2026-05-27T08:00:00.000Z'
                        first_attempted_at: null
                        last_attempted_at: null
                        succeeded_at: null
                        failed_at: null
                        last_http_status: null
                        last_error_code: null
                        last_error_message: null
                        replayable: false
                        created_at: '2026-05-27T08:00:00.000Z'
                        updated_at: '2026-05-27T08:00:00.000Z'
                    items:
                    - object: webhook_delivery
                      id: whd_01jzn7e61x3a7v9h2r7t2m3q4p
                      workspace_id: workspace_01jzn7e61x3a7v9h2r7t2m3q4p
                      endpoint_id: wep_01jzn7e61x3a7v9h2r7t2m3q4p
                      endpoint_url: https://example.com/ando/webhooks
                      endpoint_status: active
                      endpoint_enabled_events:
                      - webhook.test
                      - message.created
                      - message.updated
                      - conversation.membership.created
                      - conversation.archived
                      - conversation.unarchived
                      - call.started
                      - call.ended
                      - call.updated
                      - call.transcript.updated
                      endpoint_signing_secret_prefix: example
                      event_id: whe_01jzn7e61x3a7v9h2r7t2m3q4p
                      event_type: webhook.test
                      api_version: '2026-05-27'
                      status: scheduled
                      attempt_count: 0
                      max_attempts: 8
                      next_attempt_at: '2026-05-27T08:00:00.000Z'
                      first_attempted_at: null
                      last_attempted_at: null
                      succeeded_at: null
                      failed_at: null
                      last_http_status: null
                      last_error_code: null
                      last_error_message: null
                      replayable: false
                      created_at: '2026-05-27T08:00:00.000Z'
                      updated_at: '2026-05-27T08:00:00.000Z'
              schema:
                $ref: '#/components/schemas/WebhookDeliveryListResponse'
          description: Webhook deliveries.
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
      security:
      - AndoApiKey: []
      - BearerApiKey: []
      summary: List webhook deliveries
      tags:
      - Webhooks
      x-ando-compatibility-mode: standard_public
      x-ando-migration-target: standard_public
      x-ando-rate-limit-policy: declared
      x-ando-route-id: api.api_v1_webhook_deliveries.get
      x-ando-required: true
      x-ando-canonical-host: api.ando.so
      x-ando-documentation-owner: api_platform
      x-ando-principal-kind: workspace_api_key
      x-ando-public-api-route-class: public_data
      x-ando-public-path: /v1/webhook-deliveries
      x-ando-runtime-owner: convex_product
      x-ando-status-probe-owner: none
      x-ando-rollback-runtime: convex_http
      x-ando-selected-runtime: convex_http
      x-ando-target-runtime: convex_http
  /webhook-deliveries/{deliveryId}/replay:
    post:
      description: Creates a fresh scheduled delivery for the same endpoint and event.
      operationId: replayWebhookDelivery
      parameters:
      - description: Webhook delivery identifier.
        in: path
        name: deliveryId
        required: true
        schema:
          description: Webhook delivery identifier.
          type: string
      responses:
        '202':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookReplayResponse'
          description: Scheduled webhook delivery replay.
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
      security:
      - AndoApiKey: []
      - BearerApiKey: []
      summary: Replay a webhook delivery
      tags:
      - Webhooks
      x-ando-compatibility-mode: standard_public
      x-ando-migration-target: standard_public
      x-ando-rate-limit-policy: declared
      x-ando-route-id: api.api_v1_webhook_deliveries_by_deliveryid_replay.post
      x-ando-required: true
      x-ando-canonical-host: api.ando.so
      x-ando-documentation-owner: api_platform
      x-ando-principal-kind: workspace_api_key
      x-ando-public-api-route-class: durable_ingress
      x-ando-public-path: /v1/webhook-deliveries/:deliveryId/replay
      x-ando-runtime-owner: convex_product
      x-ando-status-probe-owner: none
      x-ando-rollback-runtime: convex_http
      x-ando-selected-runtime: convex_http
      x-ando-target-runtime: convex_http
components:
  responses:
    Forbidden:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/LegacyErrorResponse'
      description: Forbidden.
    RateLimited:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/PublicApiErrorResponse'
      description: Rate limit or quota exceeded.
    NotFound:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/LegacyErrorResponse'
      description: Not found.
    InternalError:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/LegacyErrorResponse'
      description: Internal server error.
    Conflict:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/LegacyErrorResponse'
      description: Conflict.
    Unauthorized:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/LegacyErrorResponse'
      description: Missing or invalid API key.
    BadRequest:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/LegacyErrorResponse'
      description: Bad request.
  schemas:
    WebhookEndpointSecretResponse:
      additionalProperties: false
      description: Webhook endpoint response with one-time plaintext secret.
      properties:
        data:
          $ref: '#/components/schemas/WebhookEndpointSecret'
      required:
      - data
      type: object
    WebhookReplayResponse:
      additionalProperties: false
      description: Webhook delivery replay response.
      properties:
        data:
          additionalProperties: false
          description: Replay delivery data.
          properties:
            delivery_id:
              description: New webhook delivery identifier.
              type: string
              example: 01jzn7e61x3a7v9h2r7t2m3q4p
          required:
          - delivery_id
          type: object
      required:
      - data
      type: object
    WebhookEndpointDetailResponse:
      additionalProperties: false
      description: Webhook endpoint detail response.
      properties:
        data:
          $ref: '#/components/schemas/WebhookEndpointDetail'
      required:
      - data
      type: object
    WebhookTestEventResponse:
      additionalProperties: false
      description: Webhook test event response.
      properties:
        data:
          additionalProperties: false
          description: Webhook test event data.
          properties:
            delivery_ids:
              description: Planned webhook delivery identifiers.
              items:
                description: Webhook delivery identifier.
                type: string
                example: 01jzn7e61x3a7v9h2r7t2m3q4p
              type: array
            event_id:
              description: Webhook event identifier.
              type: string
              example: 01jzn7e61x3a7v9h2r7t2m3q4p
          required:
          - event_id
          - delivery_ids
          type: object
      required:
      - data
      type: object
    RotateWebhookEndpointSecretBody:
      additionalProperties: false
      description: Webhook endpoint secret rotation request.
      properties:
        previous_secret_ttl_seconds:
          description: Seconds to keep the previous secret active. Maximum is 86400.
          type: integer
          minimum: 0
      type: object
    WebhookEndpointDeliveryScope:
      description: Webhook endpoint runtime data recipient.
      oneOf:
      - additionalProperties: false
        description: Member-targeted endpoint delivery scope.
        properties:
          actor_workspace_membership_id:
            description: Workspace membership the endpoint acts as.
            type: string
            example: 01jzn7e61x3a7v9h2r7t2m3q4p
          direct_message_delivery_enabled:
            description: Whether direct-message events are delivered for conversations the actor belongs to.
            type: boolean
          type:
            description: Delivery scope type.
            enum:
            - workspace_member
            type: string
        required:
        - type
        - actor_workspace_membership_id
        - direct_message_delivery_enabled
        type: object
      - additionalProperties: false
        description: Unsupported workspace export placeholder.
        properties:
          status:
            description: Workspace export approval state.
            enum:
            - unsupported
            - requires_approval
            - approved
            type: string
          type:
            description: Delivery scope type.
            enum:
            - workspace_export
            type: string
        required:
        - type
        - status
        type: object
    WebhookEndpointResponse:
      additionalProperties: false
      description: Webhook endpoint response.
      properties:
        data:
          $ref: '#/components/schemas/WebhookEndpoint'
      required:
      - data
      type: object
    LegacyErrorResponse:
      additionalProperties: false
      description: Current compatibility error envelope used by legacy /api/v1 routes.
      properties:
        error:
          description: Error message.
          type: string
        error_code:
          description: Optional machine-readable error code.
          type: string
          nullable: true
        missing_scopes:
          description: Missing scopes.
          items:
            description: Scope.
            type: string
          type: array
      required:
      - error
      type: object
    UpdateWebhookEndpointBody:
      additionalProperties: false
      description: Webhook endpoint update request.
      properties:
        enabled_events:
          description: Product event types to deliver to this endpoint.
          items:
            description: Webhook event type.
            enum:
            - message.created
            - message.updated
            - conversation.membership.created
            - conversation.archived
            - conversation.unarchived
            - call.started
            - call.ended
            - call.updated
            - call.transcript.updated
            - webhook.test
            type: string
          type: array
        delivery_scope:
          $ref: '#/components/schemas/WebhookEndpointDeliveryScopeInput'
        name:
          description: Optional endpoint label.
          type: string
          nullable: true
        status:
          description: Endpoint status.
          enum:
          - active
          - disabled
          type: string
        url:
          description: HTTPS receiver URL.
          type: string
      type: object
    WebhookEndpointListResponse:
      additionalProperties: false
      description: Webhook endpoint list response.
      properties:
        data:
          additionalProperties: false
          description: Standard public response data. New clients should read data.items.
          properties:
            items:
              description: Webhook endpoints.
              items:
                $ref: '#/components/schemas/We

# --- truncated at 32 KB (50 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/ando/refs/heads/main/openapi/ando-webhooks-api-openapi.yml