Register an inbound HMAC-signed webhook
POST /v1/webhooks
Register an inbound webhook. Accepts a client-supplied idempotency key (Idempotency-Key header or client_id body field): a retry with the same key replays the original registration; the same key with a different body is a 409. New keys should grant webhook:write; mailbox:read remains accepted for older keys.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Header Parameters
Section titled “Header Parameters ”Optional client-supplied key making a CREATE exactly-once. A retry with the same key returns the ORIGINAL response (same status + body) instead of creating a duplicate; the same key with a different request body returns 409. The body field client_id is honored as an alias when this header is absent. The key is scoped per tenant (and per agent on the agent plane), so keys never collide across callers.
Request Body required
Section titled “Request Body required ”object
AgentMail-compatible alias for events.
Scope to one mailbox; omit for all.
Legacy alias for inbox.
Optional idempotency key (alias for the Idempotency-Key header). A retry with the same key replays the original webhook registration.
Responses
Section titled “ Responses ”Registered. secret is shown once.
A webhook registration. secret is present only on the create response (shown once); list/get redact it. inbox is null when the webhook covers every inbox.
object
Agent that owns the webhook.
HMAC signing secret. Create response only.
Invalid request.
The canonical error envelope. error is a stable machine code.
object
Stable error code (e.g. unauthorized, forbidden, not_found, invalid, quota_exceeded, rate_limited).
Example
forbiddenHuman-readable detail (never leaks internals).
Example
missing required scopeMissing or invalid credential.
The canonical error envelope. error is a stable machine code.
object
Stable error code (e.g. unauthorized, forbidden, not_found, invalid, quota_exceeded, rate_limited).
Example
forbiddenHuman-readable detail (never leaks internals).
Example
missing required scopeThe supplied idempotency key was already used with a different request body (error = idempotency_conflict).
The canonical error envelope. error is a stable machine code.
object
Stable error code (e.g. unauthorized, forbidden, not_found, invalid, quota_exceeded, rate_limited).
Example
forbiddenHuman-readable detail (never leaks internals).
Example
missing required scope