openapi: 3.1.0 info: title: API Reference agent pods > webhooks API version: 1.0.0 servers: - url: https://api.agentmail.to description: prod - url: https://x402.api.agentmail.to description: prod-x402 - url: https://mpp.api.agentmail.to description: prod-mpp - url: https://api.agentmail.eu description: eu-prod tags: - name: pods > webhooks paths: /v0/pods/{pod_id}/webhooks: get: operationId: list summary: List Webhooks description: '**CLI:** ```bash agentmail pods:webhooks list --pod-id ```' tags: - pods > webhooks parameters: - name: pod_id in: path required: true schema: $ref: '#/components/schemas/type_pods:PodId' - name: limit in: query required: false schema: $ref: '#/components/schemas/type_:Limit' - name: page_token in: query required: false schema: $ref: '#/components/schemas/type_:PageToken' - name: ascending in: query required: false schema: $ref: '#/components/schemas/type_:Ascending' - name: Authorization in: header description: Bearer authentication required: true schema: type: string responses: '200': description: Response with status 200 content: application/json: schema: $ref: '#/components/schemas/type_webhooks:ListWebhooksResponse' post: operationId: create summary: Create Webhook description: 'Create a webhook scoped to this pod. **CLI:** ```bash agentmail pods:webhooks create --pod-id --url https://example.com/webhook --event-type message.received ```' tags: - pods > webhooks parameters: - name: pod_id in: path required: true schema: $ref: '#/components/schemas/type_pods:PodId' - name: Authorization in: header description: Bearer authentication required: true schema: type: string responses: '200': description: Response with status 200 content: application/json: schema: $ref: '#/components/schemas/type_webhooks:Webhook' '400': description: Error response with status 400 content: application/json: schema: $ref: '#/components/schemas/type_:ValidationErrorResponse' requestBody: content: application/json: schema: $ref: '#/components/schemas/type_webhooks:CreatePodWebhookRequest' /v0/pods/{pod_id}/webhooks/{webhook_id}: get: operationId: get summary: Get Webhook description: '**CLI:** ```bash agentmail pods:webhooks get --pod-id --webhook-id ```' tags: - pods > webhooks parameters: - name: pod_id in: path required: true schema: $ref: '#/components/schemas/type_pods:PodId' - name: webhook_id in: path required: true schema: $ref: '#/components/schemas/type_webhooks:WebhookId' - name: Authorization in: header description: Bearer authentication required: true schema: type: string responses: '200': description: Response with status 200 content: application/json: schema: $ref: '#/components/schemas/type_webhooks:Webhook' '404': description: Error response with status 404 content: application/json: schema: $ref: '#/components/schemas/type_:ErrorResponse' patch: operationId: update summary: Update Webhook description: '**CLI:** ```bash agentmail pods:webhooks update --pod-id --webhook-id --add-inbox-id ```' tags: - pods > webhooks parameters: - name: pod_id in: path required: true schema: $ref: '#/components/schemas/type_pods:PodId' - name: webhook_id in: path required: true schema: $ref: '#/components/schemas/type_webhooks:WebhookId' - name: Authorization in: header description: Bearer authentication required: true schema: type: string responses: '200': description: Response with status 200 content: application/json: schema: $ref: '#/components/schemas/type_webhooks:Webhook' '400': description: Error response with status 400 content: application/json: schema: $ref: '#/components/schemas/type_:ValidationErrorResponse' '404': description: Error response with status 404 content: application/json: schema: $ref: '#/components/schemas/type_:ErrorResponse' requestBody: content: application/json: schema: $ref: '#/components/schemas/type_webhooks:UpdatePodWebhookRequest' delete: operationId: delete summary: Delete Webhook description: '**CLI:** ```bash agentmail pods:webhooks delete --pod-id --webhook-id ```' tags: - pods > webhooks parameters: - name: pod_id in: path required: true schema: $ref: '#/components/schemas/type_pods:PodId' - name: webhook_id in: path required: true schema: $ref: '#/components/schemas/type_webhooks:WebhookId' - name: Authorization in: header description: Bearer authentication required: true schema: type: string responses: '200': description: Successful response '404': description: Error response with status 404 content: application/json: schema: $ref: '#/components/schemas/type_:ErrorResponse' components: schemas: type_webhooks:ListWebhooksResponse: type: object properties: count: $ref: '#/components/schemas/type_:Count' limit: $ref: '#/components/schemas/type_:Limit' next_page_token: $ref: '#/components/schemas/type_:PageToken' webhooks: type: array items: $ref: '#/components/schemas/type_webhooks:Webhook' description: Ordered by `created_at` descending. required: - count - webhooks title: ListWebhooksResponse type_pods:PodId: type: string description: ID of pod. title: PodId type_webhooks:UpdatePodWebhookRequest: type: object properties: event_types: $ref: '#/components/schemas/type_webhooks:UpdateWebhookEventTypes' add_inbox_ids: $ref: '#/components/schemas/type_events:InboxIds' description: Inbox IDs to subscribe to the webhook. remove_inbox_ids: $ref: '#/components/schemas/type_events:InboxIds' description: Inbox IDs to unsubscribe from the webhook. description: 'Update a pod-scoped webhook. You can adjust which inboxes within the pod it listens to and replace its `event_types`, but not the pod scope itself.' title: UpdatePodWebhookRequest type_:Count: type: integer description: Number of items returned. title: Count type_webhooks:CreateWebhookEventTypes: $ref: '#/components/schemas/type_events:EventTypes' description: 'Full list of event types this webhook should receive. At least one type is required. Send every type you want in this array (not incremental). See [Webhooks overview](https://docs.agentmail.to/webhooks-overview) for spam, blocked, and unauthenticated events and required permissions.' title: CreateWebhookEventTypes type_webhooks:UpdateWebhookEventTypes: $ref: '#/components/schemas/type_events:EventTypes' description: 'When you send a non-empty list, it replaces the webhook''s subscribed event types in full (the same "set the list" behavior as create). It is not a merge or diff: include every event type you want after the update. Sending a one-element array means the webhook will only receive that one type afterward. Omit this field or send an empty array to leave event types unchanged. Clearing all types with an empty list is not supported. Subscribing to `message.received.spam`, `message.received.blocked`, or `message.received.unauthenticated` requires the matching label permission on the API key.' title: UpdateWebhookEventTypes type_:ErrorCode: type: string description: Stable, machine-readable error code in snake_case (for example, not_found or missing_permission). Branch on this rather than the message text. title: ErrorCode type_events:EventType: type: string enum: - message.received - message.received.spam - message.received.blocked - message.received.unauthenticated - message.sent - message.delivered - message.bounced - message.complained - message.rejected - domain.verified title: EventType type_webhooks:Url: type: string description: URL of webhook endpoint. title: Url type_events:InboxIds: type: array items: type: string description: Inboxes for which to send events. Maximum 10 per webhook. title: InboxIds type_:ValidationErrorResponse: type: object properties: name: $ref: '#/components/schemas/type_:ErrorName' code: $ref: '#/components/schemas/type_:ErrorCode' message: $ref: '#/components/schemas/type_:ErrorMessage' errors: description: Validation errors. Each entry has a path and a message identifying the invalid field. fix: $ref: '#/components/schemas/type_:ErrorFix' docs: $ref: '#/components/schemas/type_:ErrorDocs' required: - name - errors title: ValidationErrorResponse type_events:PodIds: type: array items: type: string description: Pods for which to send events. Maximum 10 per webhook. title: PodIds type_:ErrorFix: type: string description: The concrete next action that resolves the error. title: ErrorFix type_:ErrorMessage: type: string description: Error message. title: ErrorMessage type_webhooks:CreatePodWebhookRequest: type: object properties: url: $ref: '#/components/schemas/type_webhooks:Url' event_types: $ref: '#/components/schemas/type_webhooks:CreateWebhookEventTypes' client_id: $ref: '#/components/schemas/type_webhooks:ClientId' inbox_ids: $ref: '#/components/schemas/type_events:InboxIds' required: - url - event_types description: 'Create a webhook scoped to a pod. The pod comes from the path, so `pod_ids` is not accepted. Optionally pass `inbox_ids` to narrow the webhook to specific inboxes within the pod; omit to receive events for the whole pod.' title: CreatePodWebhookRequest type_:Limit: type: integer description: Limit of number of items returned. title: Limit type_events:EventTypes: type: array items: $ref: '#/components/schemas/type_events:EventType' description: Event types for which to send events. title: EventTypes type_:PageToken: type: string description: Page token for pagination. title: PageToken type_:ErrorName: type: string description: Name of error. title: ErrorName type_:ErrorDocs: type: string description: Link to the error reference entry for this code. title: ErrorDocs type_:ErrorResponse: type: object properties: name: $ref: '#/components/schemas/type_:ErrorName' code: $ref: '#/components/schemas/type_:ErrorCode' message: $ref: '#/components/schemas/type_:ErrorMessage' fix: $ref: '#/components/schemas/type_:ErrorFix' docs: $ref: '#/components/schemas/type_:ErrorDocs' required: - name - message title: ErrorResponse type_webhooks:WebhookId: type: string description: ID of webhook. title: WebhookId type_webhooks:Webhook: type: object properties: webhook_id: $ref: '#/components/schemas/type_webhooks:WebhookId' url: $ref: '#/components/schemas/type_webhooks:Url' event_types: $ref: '#/components/schemas/type_events:EventTypes' pod_ids: $ref: '#/components/schemas/type_events:PodIds' inbox_ids: $ref: '#/components/schemas/type_events:InboxIds' secret: type: string description: Secret for webhook signature verification. enabled: type: boolean description: Webhook is enabled. updated_at: type: string format: date-time description: Time at which webhook was last updated. created_at: type: string format: date-time description: Time at which webhook was created. client_id: $ref: '#/components/schemas/type_webhooks:ClientId' required: - webhook_id - url - secret - enabled - updated_at - created_at title: Webhook type_:Ascending: type: boolean description: Sort in ascending temporal order. title: Ascending type_webhooks:ClientId: type: string description: Client ID of webhook. title: ClientId securitySchemes: Bearer: type: http scheme: bearer