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/WebhookEndpoint' type: array required: - items type: object items: description: Compatibility alias for data.items. New clients should read data.items. items: $ref: '#/components/schemas/WebhookEndpoint' type: array deprecated: true required: - data - items type: object WebhookDelivery: additionalProperties: false description: Webhook delivery state visible through the public API. properties: api_version: description: Webhook event API version. type: string attempt_count: description: Number of attempted deliveries. type: integer created_at: description: Delivery creation timestamp. type: string example: '2026-05-14T08:00:00.000Z' format: date-time endpoint_enabled_events: description: Events currently enabled on the 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 endpoint_id: description: Webhook endpoint identifier. type: string example: 01jzn7e61x3a7v9h2r7t2m3q4p endpoint_signing_secret_prefix: description: Display-safe prefix of the endpoint signing secret. type: string nullable: true endpoint_status: description: Current endpoint status. enum: - active - disabled type: string nullable: true endpoint_url: description: Current endpoint receiver URL. type: string nullable: true event_id: description: Webhook event identifier. type: string example: 01jzn7e61x3a7v9h2r7t2m3q4p event_type: 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 failed_at: description: Terminal failure timestamp. type: string format: date-time nullable: true first_attempted_at: description: First attempt timestamp. type: string format: date-time nullable: true id: description: Webhook delivery identifier. type: string example: 01jzn7e61x3a7v9h2r7t2m3q4p last_attempted_at: description: Last attempt timestamp. type: string format: date-time nullable: true last_error_code: description: Last delivery error code. type: string nullable: true last_error_message: description: Last delivery error message. type: string nullable: true last_http_status: description: Last receiver HTTP status. type: number nullable: true max_attempts: description: Maximum automatic delivery attempts. type: integer next_attempt_at: description: Next scheduled attempt timestamp. type: string format: date-time nullable: true object: description: Object type. enum: - webhook_delivery type: string replayable: description: Whether the delivery can be replayed from the public API. type: boolean status: description: Delivery status. enum: - pending - scheduled - in_flight - succeeded - retrying - failed - skipped type: string succeeded_at: description: Success timestamp. type: string format: date-time nullable: true updated_at: description: Last update timestamp. type: string example: '2026-05-14T08:00:00.000Z' format: date-time workspace_id: description: Workspace identifier. type: string example: 01jzn7e61x3a7v9h2r7t2m3q4p required: - object - id - workspace_id - endpoint_id - endpoint_url - endpoint_status - endpoint_enabled_events - endpoint_signing_secret_prefix - event_id - event_type - api_version - status - attempt_count - max_attempts - next_attempt_at - first_attempted_at - last_attempted_at - succeeded_at - failed_at - last_http_status - last_error_code - last_error_message - replayable - created_at - updated_at type: object WebhookEndpointDeliveryScopeInput: additionalProperties: false description: Webhook endpoint delivery-scope update. properties: 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 type: object WebhookEndpointDetail: additionalProperties: false description: Webhook endpoint detail. properties: created_at: description: Endpoint creation timestamp. type: string example: '2026-05-14T08:00:00.000Z' format: date-time delivery_scope: $ref: '#/components/schemas/WebhookEndpointDeliveryScope' disabled_at: description: Endpoint disabled timestamp. type: string format: date-time nullable: true enabled_events: description: Product event types delivered 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 id: description: Webhook endpoint identifier. type: string example: 01jzn7e61x3a7v9h2r7t2m3q4p name: description: Endpoint label. type: string nullable: true object: description: Object type. enum: - webhook_endpoint type: string previous_signing_secret_expires_at: description: Previous secret expiration timestamp. type: string format: date-time nullable: true signing_secret_prefix: description: Display-safe prefix of the active signing secret. type: string status: description: Endpoint status. enum: - active - disabled type: string updated_at: description: Last update timestamp. type: string example: '2026-05-14T08:00:00.000Z' format: date-time url: description: Receiver URL. type: string workspace_id: description: Workspace identifier. type: string example: 01jzn7e61x3a7v9h2r7t2m3q4p delivery_summary: $ref: '#/components/schemas/WebhookEndpointDeliverySummary' required: - object - id - workspace_id - name - url - enabled_events - delivery_scope - status - signing_secret_prefix - previous_signing_secret_expires_at - disabled_at - created_at - updated_at - delivery_summary type: object WebhookEndpointDeliverySummary: additionalProperties: false description: Delivery summary over the endpoint's most recent 100 deliveries. properties: failed_count: description: Failed delivery count within the most recent 100 deliveries. type: integer in_flight_count: description: In-flight delivery count within the most recent 100 deliveries. type: integer latest_attempted_at: description: Latest attempt timestamp. type: string format: date-time nullable: true latest_delivery_id: description: Latest delivery identifier. type: string nullable: true latest_delivery_status: description: Latest delivery status. enum: - pending - scheduled - in_flight - succeeded - retrying - failed - skipped type: string nullable: true latest_failed_at: description: Latest failure timestamp. type: string format: date-time nullable: true latest_succeeded_at: description: Latest success timestamp. type: string format: date-time nullable: true pending_count: description: Pending delivery count within the most recent 100 deliveries. type: integer recent_count: description: Number of deliveries summarized, capped at the most recent 100 deliveries. type: integer retrying_count: description: Retrying delivery count within the most recent 100 deliveries. type: integer scheduled_count: description: Scheduled delivery count within the most recent 100 deliveries. type: integer skipped_count: description: Skipped delivery count within the most recent 100 deliveries. type: integer succeeded_count: description: Succeeded delivery count within the most recent 100 deliveries. type: integer required: - recent_count - pending_count - scheduled_count - in_flight_count - retrying_count - succeeded_count - failed_count - skipped_count - latest_delivery_id - latest_delivery_status - latest_attempted_at - latest_succeeded_at - latest_failed_at type: object PublicApiErrorResponse: additionalProperties: false description: Target public API error envelope. properties: error: additionalProperties: false description: Error details. properties: code: description: Machine-readable error code. type: string message: description: Human-readable error message. type: string request_id: description: Request identifier. type: string nullable: true required: - code - message type: object required: - error type: object WebhookEndpoint: additionalProperties: false description: Webhook endpoint metadata. Signing secret plaintext is never returned here. properties: created_at: description: Endpoint creation timestamp. type: string example: '2026-05-14T08:00:00.000Z' format: date-time delivery_scope: $ref: '#/components/schemas/WebhookEndpointDeliveryScope' disabled_at: description: Endpoint disabled timestamp. type: string format: date-time nullable: true enabled_events: description: Product event types delivered 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 id: description: Webhook endpoint identifier. type: string example: 01jzn7e61x3a7v9h2r7t2m3q4p name: description: Endpoint label. type: string nullable: true object: description: Object type. enum: - webhook_endpoint type: string previous_signing_secret_expires_at: description: Previous secret expiration timestamp. type: string format: date-time nullable: true signing_secret_prefix: description: Display-safe prefix of the active signing secret. type: string status: description: Endpoint status. enum: - active - disabled type: string updated_at: description: Last update timestamp. type: string example: '2026-05-14T08:00:00.000Z' format: date-time url: description: Receiver URL. type: string workspace_id: description: Workspace identifier. type: string example: 01jzn7e61x3a7v9h2r7t2m3q4p required: - object - id - workspace_id - name - url - enabled_events - delivery_scope - status - signing_secret_prefix - previous_signing_secret_expires_at - disabled_at - created_at - updated_at type: object WebhookDeliveryListResponse: additionalProperties: false description: Webhook delivery list response. properties: data: additionalProperties: false description: Standard public response data. New clients should read data.items. properties: items: description: Webhook deliveries. items: $ref: '#/components/schemas/WebhookDelivery' type: array required: - items type: object items: description: Compatibility alias for data.items. New clients should read data.items. items: $ref: '#/components/schemas/WebhookDelivery' type: array deprecated: true required: - data - items type: object WebhookEndpointSecret: additionalProperties: false description: Webhook endpoint response with one-time plaintext secret. properties: created_at: description: Endpoint creation timestamp. type: string example: '2026-05-14T08:00:00.000Z' format: date-time delivery_scope: $ref: '#/components/schemas/WebhookEndpointDeliveryScope' disabled_at: description: Endpoint disabled timestamp. type: string format: date-time nullable: true enabled_events: description: Product event types delivered 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 id: description: Webhook endpoint identifier. type: string example: 01jzn7e61x3a7v9h2r7t2m3q4p name: description: Endpoint label. type: string nullable: true object: description: Object type. enum: - webhook_endpoint type: string previous_signing_secret_expires_at: description: Previous secret expiration timestamp. type: string format: date-time nullable: true signing_secret_prefix: description: Display-safe prefix of the active signing secret. type: string status: description: Endpoint status. enum: - active - disabled type: string updated_at: description: Last update timestamp. type: string example: '2026-05-14T08:00:00.000Z' format: date-time url: description: Receiver URL. type: string workspace_id: description: Workspace identifier. type: string example: 01jzn7e61x3a7v9h2r7t2m3q4p signing_secret: description: Plaintext webhook signing secret. Store it immediately. type: string required: - object - id - workspace_id - name - url - enabled_events - delivery_scope - status - signing_secret_prefix - previous_signing_secret_expires_at - disabled_at - created_at - updated_at - signing_secret type: object CreateWebhookEndpointBody: additionalProperties: false description: Webhook endpoint creation 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 url: description: HTTPS receiver URL. type: string required: - url - enabled_events type: object securitySchemes: AndoApiKey: description: Workspace API key. Current accepted keys use the ando_sk_ prefix. in: header name: x-api-key type: apiKey BearerApiKey: bearerFormat: ando_sk description: Compatibility transport for workspace API keys. scheme: bearer type: http