AgentMail webhooks API
The webhooks API from AgentMail — 2 operation(s) for webhooks.
The webhooks API from AgentMail — 2 operation(s) for webhooks.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/agentmail-webhooks-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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: 3.2.0
info:
title: Reference 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: Webhooks
paths:
/v0/webhooks:
get:
operationId: list
summary: List Webhooks
description: '**CLI:**
```bash
agentmail webhooks list
```'
tags:
- Webhooks
parameters:
- 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: '**CLI:**
```bash
agentmail webhooks create --url https://example.com/webhook --event-type message.received
```'
tags:
- Webhooks
parameters:
- 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_CreateWebhookRequest'
/v0/webhooks/{webhook_id}:
get:
operationId: get
summary: Get Webhook
description: '**CLI:**
```bash
agentmail webhooks get --webhook-id
```'
tags:
- Webhooks
parameters:
- 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: 'Update inbox or pod subscriptions, or replace the webhook''s `event_types` in full when you pass a
non-empty `event_types` array (see request field docs). Inbox and pod changes use add/remove lists.
**CLI:**
```bash
agentmail webhooks update --webhook-id --add-inbox-id
```'
tags:
- Webhooks
parameters:
- 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_UpdateWebhookRequest'
delete:
operationId: delete
summary: Delete Webhook
description: '**CLI:**
```bash
agentmail webhooks delete --webhook-id
```'
tags:
- Webhooks
parameters:
- 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_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_events_EventTypes:
type: array
items:
$ref: '#/components/schemas/type_events_EventType'
description: Event types for which to send events.
title: EventTypes
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_ClientId:
type: string
description: Client ID of webhook.
title: ClientId
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_webhooks_Url:
type: string
description: URL of webhook endpoint.
title: Url
type_webhooks_WebhookId:
type: string
description: ID of webhook.
title: WebhookId
type__ErrorMessage:
type: string
description: Error message.
title: ErrorMessage
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__Ascending:
type: boolean
description: Sort in ascending temporal order.
title: Ascending
type_events_InboxIds:
type: array
items:
type: string
description: Inboxes for which to send events. Maximum 10 per webhook.
title: InboxIds
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_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_UpdateWebhookRequest:
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.
add_pod_ids:
$ref: '#/components/schemas/type_events_PodIds'
description: Pod IDs to subscribe to the webhook.
remove_pod_ids:
$ref: '#/components/schemas/type_events_PodIds'
description: Pod IDs to unsubscribe from the webhook.
title: UpdateWebhookRequest
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__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__PageToken:
type: string
description: Page token for pagination.
title: PageToken
type__Limit:
type: integer
description: Limit of number of items returned.
title: Limit
type_webhooks_CreateWebhookRequest:
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'
pod_ids:
$ref: '#/components/schemas/type_events_PodIds'
required:
- url
- event_types
title: CreateWebhookRequest
type__ErrorFix:
type: string
description: The concrete next action that resolves the error.
title: ErrorFix
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
securitySchemes:
Bearer:
type: http
scheme: bearer