master-zapier-plan-draft/research/zapier/raw/openapi/trigger-inbox.yaml
George Lambert b4150c8250 Milestone 0: import zappier billing, Verae middleware, and Zapier research
Compose-ready workspace: packages/zappier (rate card, portal, Stripe),
packages/verae-zapier-middleware (timestamp + NATS), packages/verae-zapier
(CLI app), vendor/zapier-platform, and research/zapier vendor corpus.

Gate 0 structure checks pass. Product code and research are not yet wired.
2026-09-09 02:37:36 -04:00

1928 lines
65 KiB
YAML

openapi: 3.1.0
info:
title: Trigger Inbox API
description: Manage trigger inboxes and their messages — create, pause, resume,
and delete inboxes; list, lease, and acknowledge messages.
version: 1.0.0
contact:
url: https://docs.zapier.com
servers:
- url: https://api.zapier.com
description: Production
tags:
- name: Inbox Messages
description: Lease, acknowledge, and release inbox messages
- name: Inboxes
description: Create and manage trigger inboxes
security:
- OAuth: []
paths:
/trigger-inbox/v1/inboxes:
get:
operationId: listTriggerInboxes
description: List all inboxes for the authenticated user.
summary: List all inboxes
parameters:
- in: query
name: key
schema:
type: string
- name: limit
required: false
in: query
description: Number of results to return per page.
schema:
type: integer
- in: query
name: name
schema:
type: string
deprecated: true
- name: offset
required: false
in: query
description: The initial index from which to return the results.
schema:
type: integer
- in: query
name: status
schema:
type: string
enum:
- active
- deleting
- initialization_failure
- initializing
- paused
description: '* `initializing` - initializing
* `active` - active
* `paused` - paused
* `deleting` - deleting
* `initialization_failure` - initialization_failure'
tags:
- Inboxes
security:
- OAuth:
- external
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedInboxList'
description: 'An inbox: a durable, user-scoped queue for a trigger subscription,
identified by its natural `key`.'
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
description: 'Validation Error: Return fields with errors.'
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'429':
headers:
Retry-After:
$ref: '#/components/headers/Retry-After'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
description: Too many requests.
x-zapier-collection-response-exempt: true
post:
operationId: createTriggerInbox
description: Create a new inbox. If a key is provided and an inbox with that
key already exists for this user, returns 409 Conflict. name remains accepted
as a deprecated alias for key. Use PUT for idempotent get-or-create semantics.
summary: Create an inbox
parameters:
- in: header
name: Zapier-Causation-Id
schema:
type: string
description: Optional UUID identifying the event or action that caused this
request.
- in: header
name: Zapier-Correlation-Id
schema:
type: string
description: Optional UUID to trace this request through downstream systems.
tags:
- Inboxes
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Inbox'
examples:
WithKey:
value:
key: example_inbox
subscription:
app_key: SlackCLIAPI@1.0.0
action_key: example_action
connection_id: 029a64f8-ced3-889b-aa1a-9d37bcd59ddb
inputs:
channel: C1234567890
summary: with_key
WithNameDeprecated:
value:
name: example_inbox
subscription:
app_key: SlackCLIAPI@1.0.0
action_key: example_action
connection_id: 029a64f8-ced3-889b-aa1a-9d37bcd59ddb
inputs:
channel: C1234567890
summary: with_name_deprecated
description: Uses the deprecated name alias for key.
WithoutKey:
value:
subscription:
app_key: SlackCLIAPI@1.0.0
action_key: example_action
connection_id: 5678
inputs:
channel: C1234567890
summary: without_key
WithSlugAppKey:
value:
key: example_inbox
subscription:
app_key: slack
action_key: example_action
connection_id: 029a64f8-ced3-889b-aa1a-9d37bcd59ddb
inputs:
channel: C1234567890
summary: Resolve app_key from a slug
description: A versionless slug is resolved to the latest version;
the response's subscription.app_key is the fully-versioned form.
required: true
security:
- OAuth:
- external
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/Inbox'
description: 'An inbox: a durable, user-scoped queue for a trigger subscription,
identified by its natural `key`.'
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
description: Validation error, e.g. the app_key could not be resolved to
a single app (unknown or ambiguous), or a claim input was invalid.
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'409':
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
description: Conflict error when an inbox with the same key already exists
for the user.
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'429':
headers:
Retry-After:
$ref: '#/components/headers/Retry-After'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
description: Too many requests.
put:
operationId: ensureTriggerInbox
description: Idempotently ensure an inbox exists for the provided key. Returns
the existing inbox if one with the same key and matching configuration already
exists, or creates a new one. name remains accepted as a deprecated alias
for key. Returns 409 if an inbox with the same key but different configuration
exists.
summary: Ensure an inbox exists
parameters:
- in: header
name: Zapier-Causation-Id
schema:
type: string
description: Optional UUID identifying the event or action that caused this
request.
- in: header
name: Zapier-Correlation-Id
schema:
type: string
description: Optional UUID to trace this request through downstream systems.
tags:
- Inboxes
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/InboxEnsure'
examples:
EnsureInbox:
value:
key: example_inbox
subscription:
app_key: SlackCLIAPI@1.0.0
action_key: example_action
connection_id: 029a64f8-ced3-889b-aa1a-9d37bcd59ddb
inputs:
channel: C1234567890
summary: ensure_inbox
required: true
security:
- OAuth:
- external
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/Inbox'
description: 'An inbox: a durable, user-scoped queue for a trigger subscription,
identified by its natural `key`.'
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Inbox'
description: 'An inbox: a durable, user-scoped queue for a trigger subscription,
identified by its natural `key`.'
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
description: Validation error, e.g. missing required key field (name is
accepted as a deprecated alias for key), or the app_key could not be resolved
to a single app (unknown or ambiguous).
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'409':
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
description: Conflict error when an inbox with the same key and a different
subscription already exists for the user.
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'429':
headers:
Retry-After:
$ref: '#/components/headers/Retry-After'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
description: Too many requests.
/trigger-inbox/v1/inboxes/{id}:
get:
operationId: getTriggerInbox
description: Return the details of an inbox by unique ID.
summary: Get inbox details
parameters:
- in: path
name: id
schema:
type: string
format: uuid
required: true
tags:
- Inboxes
security:
- OAuth:
- external
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Inbox'
description: 'An inbox: a durable, user-scoped queue for a trigger subscription,
identified by its natural `key`.'
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
description: 'Validation Error: Return fields with errors.'
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'429':
headers:
Retry-After:
$ref: '#/components/headers/Retry-After'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
description: Too many requests.
patch:
operationId: patchTriggerInbox
description: Partially update an inbox. Currently only notification_url can
be updated.
summary: Update inbox settings
parameters:
- in: path
name: id
schema:
type: string
format: uuid
required: true
tags:
- Inboxes
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PatchedInboxPatch'
examples:
SetNotificationUrl:
value:
notification_url: https://example.com/webhook
summary: set_notification_url
security:
- OAuth:
- external
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Inbox'
description: 'An inbox: a durable, user-scoped queue for a trigger subscription,
identified by its natural `key`.'
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
description: 'Validation Error: Return fields with errors.'
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'429':
headers:
Retry-After:
$ref: '#/components/headers/Retry-After'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
description: Too many requests.
delete:
operationId: deleteTriggerInbox
description: Mark an inbox for deletion for the authenticated user.
summary: Mark an inbox for deletion
parameters:
- in: path
name: id
schema:
type: string
format: uuid
required: true
tags:
- Inboxes
security:
- OAuth:
- external
responses:
'202':
content:
application/json:
schema:
$ref: '#/components/schemas/Inbox'
description: 'An inbox: a durable, user-scoped queue for a trigger subscription,
identified by its natural `key`.'
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'409':
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
description: Conflict error when an inbox cannot be marked for deletion.
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
description: 'Validation Error: Return fields with errors.'
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'429':
headers:
Retry-After:
$ref: '#/components/headers/Retry-After'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
description: Too many requests.
/trigger-inbox/v1/inboxes/{id}/pause:
post:
operationId: pauseTriggerInbox
description: Pause an inbox for the authenticated user resulting in messages
collection being temporarily halted.
summary: Pause an inbox
parameters:
- in: path
name: id
schema:
type: string
format: uuid
required: true
tags:
- Inboxes
security:
- OAuth:
- external
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Inbox'
description: 'An inbox: a durable, user-scoped queue for a trigger subscription,
identified by its natural `key`.'
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'409':
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
description: Conflict error when an inbox cannot be paused.
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
description: 'Validation Error: Return fields with errors.'
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'429':
headers:
Retry-After:
$ref: '#/components/headers/Retry-After'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
description: Too many requests.
/trigger-inbox/v1/inboxes/{id}/resume:
post:
operationId: resumeTriggerInbox
description: Resume an inbox for the authenticated user resulting in messages
collection being resumed.
summary: Resume an inbox
parameters:
- in: path
name: id
schema:
type: string
format: uuid
required: true
tags:
- Inboxes
security:
- OAuth:
- external
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Inbox'
description: 'An inbox: a durable, user-scoped queue for a trigger subscription,
identified by its natural `key`.'
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'202':
content:
application/json:
schema:
$ref: '#/components/schemas/Inbox'
description: 'An inbox: a durable, user-scoped queue for a trigger subscription,
identified by its natural `key`.'
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'409':
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
description: Conflict error when an inbox cannot be resumed.
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
description: 'Validation Error: Return fields with errors.'
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'429':
headers:
Retry-After:
$ref: '#/components/headers/Retry-After'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
description: Too many requests.
/trigger-inbox/v1/inboxes/{inbox_id}/events:
get:
operationId: getTriggerInboxEvents
tags:
- Inboxes
summary: Subscribe to inbox notifications over SSE
description: 'Opens a Server-Sent Events stream that emits one frame per batch
of newly-available messages on the inbox. The connection stays open until
the JWT expires, at which point the server closes it.
Two kinds of frames are emitted:
- **Data frames** (`data: {...}\n\n`) signal availability only, they do not
include message content. Consumers should call the lease endpoint to retrieve
messages. The JSON payload is described by the response schema below.
- **Heartbeat frames** (`: keep-alive\n\n`) are SSE comment lines sent when
no notification has arrived within the heartbeat interval. They are ignored
by EventSource clients and exist only to keep intermediaries from closing
the connection as idle.'
security:
- OAuth:
- external
parameters:
- name: inbox_id
in: path
required: true
schema:
type: string
format: uuid
description: The unique identifier of the inbox to subscribe to.
responses:
'200':
description: SSE stream opened. The response body is an open-ended sequence
of `text/event-stream` frames.
content:
text/event-stream:
schema:
type: object
description: JSON payload carried by each `data:` frame. Heartbeat
frames carry no payload.
properties:
inbox_id:
type: string
format: uuid
description: The unique identifier of the inbox that has new messages.
count:
type: integer
minimum: 1
description: The number of notifications coalesced into this frame.
required:
- inbox_id
- count
'401':
description: Missing or invalid JWT in the Authorization header.
'404':
description: No inbox with the given id is visible to the authenticated
user.
'503':
description: The notification backend was not reachable in time. Clients
should retry.
/trigger-inbox/v1/inboxes/{inbox_id}/messages:
get:
operationId: listTriggerInboxMessages
description: List messages from an inbox for the authenticated user.
summary: List messages from an inbox
parameters:
- name: cursor
required: false
in: query
description: The pagination cursor value.
schema:
type: string
- in: path
name: inbox_id
schema:
type: string
format: uuid
required: true
tags:
- Inbox Messages
security:
- OAuth:
- external
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedMessageList'
description: ''
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
description: 'Validation Error: Return fields with errors.'
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'429':
headers:
Retry-After:
$ref: '#/components/headers/Retry-After'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
description: Too many requests.
x-zapier-collection-response-exempt: true
/trigger-inbox/v1/inboxes/{inbox_id}/messages/lease:
post:
operationId: leaseTriggerInboxMessages
description: Lease messages from an inbox for the authenticated user.
summary: Lease messages from an inbox
parameters:
- in: path
name: inbox_id
schema:
type: string
format: uuid
required: true
tags:
- Inbox Messages
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/LeaseRequest'
examples:
LeaseMessage:
value:
lease_limit: 1
summary: lease_message
description: Lease a single message for 60 seconds.
LeaseMessages:
value:
lease_limit: 10
lease_seconds: 60
summary: lease_messages
description: Lease up to 10 messages for 60 seconds.
security:
- OAuth:
- external
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/LeaseResponse'
examples:
LeaseEmpty:
value:
lease_id: null
leased_until: null
results: []
inbox_attributes:
status: active
paused_reason: null
summary: lease_empty
description: An empty lease when no messages are available.
description: Response for a message lease request to an inbox.
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/LeaseResponse'
examples:
LeaseMessages:
value:
lease_id: 019ce2fe-5ed1-7318-8a60-33dffd911f6a
leased_until: '2026-03-12T17:00:47.185Z'
results:
- id: 019ce2fe-5ed1-7318-8a60-33dffd911f6b
created_at: '2026-03-12T16:59:47.185Z'
status: leased
payload:
key: value
message_attributes:
lease_count: 1
error_message: null
possible_duplicate_data: false
inbox_attributes:
status: active
paused_reason: null
summary: lease_messages
description: Lease a single message for 60 seconds.
LeaseMessagesWithError:
value:
lease_id: 019ce2fe-5ed1-7318-8a60-33dffd911f6a
leased_until: '2026-03-12T17:00:47.185Z'
results:
- id: 019ce2fe-5ed1-7318-8a60-33dffd911f6b
created_at: '2026-03-12T16:59:47.185Z'
status: leased
payload:
key: value
message_attributes:
lease_count: 1
error_message: 'Error while hydrating data from Slack (1.24.0):
Your Slack account on Zapier is expired/invalid. Please
reconnect it to fix this.'
possible_duplicate_data: false
inbox_attributes:
status: active
paused_reason: null
summary: lease_messages_with_error
description: Lease a message from a batch that had a hydration error.
LeaseMessagesWithPossibleDuplicates:
value:
lease_id: 019ce2fe-5ed1-7318-8a60-33dffd911f6a
leased_until: '2026-03-12T17:00:47.185Z'
results:
- id: 019ce2fe-5ed1-7318-8a60-33dffd911f6b
created_at: '2026-03-12T16:59:47.185Z'
status: leased
payload:
key: value
message_attributes:
lease_count: 1
error_message: null
possible_duplicate_data: true
inbox_attributes:
status: active
paused_reason: null
summary: lease_messages_with_possible_duplicates
description: Lease a message that may contain duplicate data due
to a dedupe key change.
description: Response for a message lease request to an inbox.
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'409':
content:
application/json:
schema:
$ref: '#/components/schemas/LeaseConflictResponse'
examples:
LeaseConflict:
value:
detail: Inbox is paused and fully drained.
inbox_attributes:
status: paused
paused_reason: authentication
paused_at: '2026-03-12T16:59:47.185Z'
summary: lease_conflict
description: Inbox is paused and fully drained — no more messages.
description: Response when leasing from a paused and fully drained inbox.
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
description: 'Validation Error: Return fields with errors.'
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'429':
headers:
Retry-After:
$ref: '#/components/headers/Retry-After'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
description: Too many requests.
/trigger-inbox/v1/inboxes/{inbox_id}/messages/ack:
post:
operationId: acknowledgeTriggerInboxMessages
description: Acknowledge messages from an inbox for the authenticated user.
summary: Acknowledge messages from an inbox
parameters:
- in: path
name: inbox_id
schema:
type: string
format: uuid
required: true
tags:
- Inbox Messages
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AckRequest'
examples:
Ack:
value:
lease_id: 019ce2fe-5ed1-7318-8a60-33dffd911f6a
summary: ack
description: Acknowledge an entire lease.
AckMessageIds:
value:
lease_id: 019ce2fe-5ed1-7318-8a60-33dffd911f6a
message_ids:
- 019ce303-cf30-7efb-aa91-89488a407dc2
summary: ack_message_ids
description: Acknowledge specific messages within a lease.
required: true
security:
- OAuth:
- external
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/AckResponse'
examples:
AckEmpty:
value:
acked_id: null
results: []
summary: ack_empty
description: An empty acknowledgment when no messages are acknowledged.
description: Response for a message acknowledge request to an inbox.
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/AckResponse'
examples:
AckMessages:
value:
acked_id: 019ce305-35be-764b-bcae-70ba567b7357
results:
- id: 019ce2fe-5ed1-7318-8a60-33dffd911f6b
created_at: '2026-03-12T16:59:47.185Z'
status: acked
message_attributes:
lease_count: 1
error_message: null
possible_duplicate_data: false
summary: ack_messages
description: Acknowledgement of leased messages.
description: Response for a message acknowledge request to an inbox.
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
description: 'Validation Error: Return fields with errors.'
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'429':
headers:
Retry-After:
$ref: '#/components/headers/Retry-After'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
description: Too many requests.
/trigger-inbox/v1/inboxes/{inbox_id}/messages/release:
post:
operationId: releaseTriggerInboxMessages
description: Release the lease on one or more leased messages without acknowledging
them. The messages become immediately available for leasing again. The original
lease still counts against the per-message lease limit; releasing does not
refund the attempt.
summary: Release leased messages without acknowledging
parameters:
- in: path
name: inbox_id
schema:
type: string
format: uuid
required: true
tags:
- Inbox Messages
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ReleaseRequest'
examples:
Release:
value:
lease_id: 019ce2fe-5ed1-7318-8a60-33dffd911f6a
summary: release
description: Release every message held under a lease.
ReleaseMessageIds:
value:
lease_id: 019ce2fe-5ed1-7318-8a60-33dffd911f6a
message_ids:
- 019ce303-cf30-7efb-aa91-89488a407dc2
summary: release_message_ids
description: Release specific messages within a lease.
required: true
security:
- OAuth:
- external
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ReleaseResponse'
examples:
ReleaseEmpty:
value:
released_id: null
results: []
summary: release_empty
description: An empty release when no messages match the lease.
description: Response for a message release request to an inbox.
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/ReleaseResponse'
examples:
ReleaseMessages:
value:
released_id: 019ce305-35be-764b-bcae-70ba567b7357
results:
- id: 019ce2fe-5ed1-7318-8a60-33dffd911f6b
created_at: '2026-03-12T16:59:47.185Z'
status: available
message_attributes:
lease_count: 1
error_message: null
possible_duplicate_data: false
summary: release_messages
description: Release of leased messages.
description: Response for a message release request to an inbox.
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
description: 'Validation Error: Return fields with errors.'
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
'429':
headers:
Retry-After:
$ref: '#/components/headers/Retry-After'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
description: Too many requests.
components:
headers:
Retry-After:
schema:
type: number
description: The number of seconds to wait before making a new request.
required: true
X-RateLimit-Limit:
schema:
type: string
description: The rate limit ceiling for that given request.
required: true
X-RateLimit-Remaining:
schema:
type: string
description: The number of requests left for the window.
required: true
X-RateLimit-Reset:
schema:
type: string
description: The time at which the current rate limit window resets in seconds.
required: true
schemas:
AckRequest:
type: object
description: Request to acknowledge a leased message from an inbox.
properties:
lease_id:
type: string
format: uuid
description: The unique identifier for the lease.
message_ids:
type: array
items:
type: string
format: uuid
description: The list of message IDs to acknowledge. If not specified all
messages matching the lease_id will be acknowledged.
maxItems: 100
minItems: 1
required:
- lease_id
AckResponse:
type: object
description: Response for a message acknowledge request to an inbox.
properties:
acked_id:
type:
- string
- 'null'
format: uuid
description: The unique identifier for the acknowledged messages.
results:
type: array
items:
$ref: '#/components/schemas/Message'
description: The list of messages acknowledged.
required:
- acked_id
- results
BlankEnum:
enum:
- ''
ErrorDetail:
type: object
description: 'Per the schema defined in the engineering index.
https://engineering.zapier.com/guides/api-design-guidelines/error-handling/'
properties:
code:
type: string
description: A unique identifier for this particular occurrence of the problem.
detail:
type: string
description: A human-readable explanation specific to this occurrence of
the problem.
status:
type: integer
description: HTTP status code for that error.
title:
type: string
description: A short summary of the problem.
source:
type: object
additionalProperties: {}
description: An object containing references to the primary source of the
error.
required:
- code
- detail
Errors:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ErrorDetail'
description: An array of error objects.
required:
- errors
Inbox:
type: object
description: 'An inbox: a durable, user-scoped queue for a trigger subscription,
identified by its natural `key`.'
properties:
id:
type: string
format: uuid
readOnly: true
description: The unique identifier for the inbox.
created_at:
type: string
format: date-time
readOnly: true
description: Creation timestamp in ISO 8601 format.
key:
type: string
description: The inbox's natural key. Set at creation, immutable, unique
per user.
maxLength: 100
name:
type: string
maxLength: 100
deprecated: true
description: Deprecated alias for `key`. Use `key` instead.
status:
type: string
readOnly: true
description: The status of the inbox.
paused_reason:
description: 'The reason the inbox was paused, if applicable.
* `user` - user
* `authentication` - authentication
* `authentication_access_revoked` - authentication_access_revoked
* `partner_revoked` - partner_revoked
* `subscribe_failed` - subscribe_failed
* `migrate_failed` - migrate_failed
* `abandoned` - abandoned
* `unknown` - unknown
* `upstream_failures` - upstream_failures'
oneOf:
- $ref: '#/components/schemas/PausedReasonEnum'
- $ref: '#/components/schemas/BlankEnum'
- $ref: '#/components/schemas/NullEnum'
notification_url:
type:
- string
- 'null'
format: uri
description: URL to POST notifications to when messages become available.
maxLength: 2048
subscription:
$ref: '#/components/schemas/TriggerSubscription'
required:
- created_at
- id
- status
- subscription
InboxAttributes:
type: object
description: Inbox state surfaced alongside lease responses.
properties:
status:
type: string
readOnly: true
description: The current status of the inbox.
paused_reason:
readOnly: true
description: 'The reason the inbox was paused, if applicable.
* `user` - user
* `authentication` - authentication
* `authentication_access_revoked` - authentication_access_revoked
* `partner_revoked` - partner_revoked
* `subscribe_failed` - subscribe_failed
* `migrate_failed` - migrate_failed
* `abandoned` - abandoned
* `unknown` - unknown
* `upstream_failures` - upstream_failures'
oneOf:
- $ref: '#/components/schemas/PausedReasonEnum'
- $ref: '#/components/schemas/NullEnum'
required:
- paused_reason
- status
InboxEnsure:
type: object
description: 'Request to idempotently ensure an inbox exists. A `key` is required
(`name` is accepted as a deprecated alias).'
properties:
id:
type: string
format: uuid
readOnly: true
description: The unique identifier for the inbox.
created_at:
type: string
format: date-time
readOnly: true
description: Creation timestamp in ISO 8601 format.
key:
type: string
description: The inbox's natural key. Set at creation, immutable, unique
per user.
maxLength: 100
name:
type: string
maxLength: 100
deprecated: true
description: Deprecated alias for `key`. Use `key` instead.
status:
type: string
readOnly: true
description: The status of the inbox.
paused_reason:
description: 'The reason the inbox was paused, if applicable.
* `user` - user
* `authentication` - authentication
* `authentication_access_revoked` - authentication_access_revoked
* `partner_revoked` - partner_revoked
* `subscribe_failed` - subscribe_failed
* `migrate_failed` - migrate_failed
* `abandoned` - abandoned
* `unknown` - unknown
* `upstream_failures` - upstream_failures'
oneOf:
- $ref: '#/components/schemas/PausedReasonEnum'
- $ref: '#/components/schemas/BlankEnum'
- $ref: '#/components/schemas/NullEnum'
notification_url:
type:
- string
- 'null'
format: uri
description: URL to POST notifications to when messages become available.
maxLength: 2048
subscription:
$ref: '#/components/schemas/TriggerSubscription'
required:
- created_at
- id
- status
- subscription
LeaseConflictAttributes:
type: object
description: Inbox attributes included in a 409 conflict response, with paused_at.
properties:
status:
type: string
readOnly: true
description: The current status of the inbox.
paused_reason:
readOnly: true
description: 'The reason the inbox was paused, if applicable.
* `user` - user
* `authentication` - authentication
* `authentication_access_revoked` - authentication_access_revoked
* `partner_revoked` - partner_revoked
* `subscribe_failed` - subscribe_failed
* `migrate_failed` - migrate_failed
* `abandoned` - abandoned
* `unknown` - unknown
* `upstream_failures` - upstream_failures'
oneOf:
- $ref: '#/components/schemas/PausedReasonEnum'
- $ref: '#/components/schemas/NullEnum'
paused_at:
type:
- string
- 'null'
format: date-time
readOnly: true
description: When the inbox was paused, in ISO 8601 format.
required:
- paused_at
- paused_reason
- status
LeaseConflictResponse:
type: object
description: Response when leasing from a paused and fully drained inbox.
properties:
detail:
type: string
readOnly: true
description: A human-readable explanation of why the lease was rejected.
inbox_attributes:
allOf:
- $ref: '#/components/schemas/LeaseConflictAttributes'
readOnly: true
description: Current inbox state including pause details.
required:
- detail
- inbox_attributes
LeaseRequest:
type: object
description: Request to lease message from an inbox.
properties:
lease_seconds:
type: integer
maximum: 3600
minimum: 1
default: 300
description: The number of seconds to lease the message for.
lease_limit:
type: integer
maximum: 100
minimum: 1
default: 10
description: The number of messages to lease.
LeaseResponse:
type: object
description: Response for a message lease request to an inbox.
properties:
lease_id:
type:
- string
- 'null'
format: uuid
description: The unique identifier for the lease.
leased_until:
type:
- string
- 'null'
format: date-time
description: The timestamp until which the messages are leased in ISO 8601
format.
results:
type: array
items:
$ref: '#/components/schemas/LeasedMessage'
description: The list of messages leased.
inbox_attributes:
allOf:
- $ref: '#/components/schemas/InboxAttributes'
readOnly: true
description: Current inbox state surfaced alongside the lease.
required:
- inbox_attributes
- lease_id
- leased_until
- results
LeasedMessage:
type: object
properties:
id:
type: string
format: uuid
readOnly: true
description: The unique identifier for the message.
created_at:
type: string
format: date-time
readOnly: true
description: Creation timestamp in ISO 8601 format.
status:
allOf:
- $ref: '#/components/schemas/StatusEnum'
description: The status of the message.
readOnly: true
message_attributes:
allOf:
- $ref: '#/components/schemas/MessageAttributes'
readOnly: true
description: Attributes associated with the message, such as lease count
and error information.
payload:
type: object
additionalProperties: {}
description: The payload of the message.
readOnly: true
required:
- created_at
- id
- message_attributes
- payload
- status
Message:
type: object
properties:
id:
type: string
format: uuid
readOnly: true
description: The unique identifier for the message.
created_at:
type: string
format: date-time
readOnly: true
description: Creation timestamp in ISO 8601 format.
status:
allOf:
- $ref: '#/components/schemas/StatusEnum'
description: The status of the message.
readOnly: true
message_attributes:
allOf:
- $ref: '#/components/schemas/MessageAttributes'
readOnly: true
description: Attributes associated with the message, such as lease count
and error information.
required:
- created_at
- id
- message_attributes
- status
MessageAttributes:
type: object
properties:
lease_count:
type: integer
readOnly: true
description: Number of times this message has been leased.
error_message:
type:
- string
- 'null'
readOnly: true
description: Error message from the batch that produced this message, if
any.
possible_duplicate_data:
type: boolean
readOnly: true
description: True when the message may contain duplicate data due to a change
in the deduplication key. Consumers should treat this data with caution
and may want to apply their own deduplication logic.
required:
- error_message
- lease_count
- possible_duplicate_data
NullEnum:
type: 'null'
PaginatedInboxList:
type: object
required:
- count
- results
properties:
count:
type: integer
description: Total number of results across all pages.
example: 123
next:
type: string
description: Link to next page of results if any.
nullable: true
format: uri
example: https://api.example.org/accounts/?offset=400&limit=100
previous:
type: string
description: Link to previous page of results if any.
nullable: true
format: uri
example: https://api.example.org/accounts/?offset=200&limit=100
results:
description: Array of results for the current page.
type: array
items:
$ref: '#/components/schemas/Inbox'
PaginatedMessageList:
type: object
required:
- next
- previous
- results
properties:
next:
type: string
description: Link to next page of results if any.
nullable: true
format: uri
example: https://api.example.org/accounts/?cursor=cD00ODY%3D
previous:
type: string
description: Link to previous page of results if any.
nullable: true
format: uri
example: https://api.example.org/accounts/?cursor=cj0xJnA9NDg3
results:
description: Array of results for the current page.
type: array
items:
$ref: '#/components/schemas/Message'
PatchedInboxPatch:
type: object
properties:
notification_url:
type:
- string
- 'null'
format: uri
description: URL to POST notifications to when messages become available.
maxLength: 2048
PausedReasonEnum:
enum:
- user
- authentication
- authentication_access_revoked
- partner_revoked
- subscribe_failed
- migrate_failed
- abandoned
- unknown
- upstream_failures
type: string
description: '* `user` - user
* `authentication` - authentication
* `authentication_access_revoked` - authentication_access_revoked
* `partner_revoked` - partner_revoked
* `subscribe_failed` - subscribe_failed
* `migrate_failed` - migrate_failed
* `abandoned` - abandoned
* `unknown` - unknown
* `upstream_failures` - upstream_failures'
ReleaseRequest:
type: object
description: Request to release a leased message back to the inbox without acknowledging
it.
properties:
lease_id:
type: string
format: uuid
description: The unique identifier for the lease.
message_ids:
type: array
items:
type: string
format: uuid
description: The list of message IDs to release. If not specified all messages
matching the lease_id will be released.
maxItems: 100
minItems: 1
required:
- lease_id
ReleaseResponse:
type: object
description: Response for a message release request to an inbox.
properties:
released_id:
type:
- string
- 'null'
format: uuid
description: The unique identifier for the released messages.
results:
type: array
items:
$ref: '#/components/schemas/Message'
description: The list of messages whose leases were released.
required:
- released_id
- results
StatusEnum:
enum:
- available
- leased
- acked
- quarantined
type: string
TriggerSubscription:
type: object
description: Trigger subscription configuration for an inbox.
properties:
connection_id:
oneOf:
- type: string
format: uuid
- type: integer
format: integer
- type: 'null'
description: The ID of the connection associated with this inbox.
app_key:
type: string
description: App identifier. Accepts a fully-versioned selected_api (`SlackCLIAPI@1.0.0`,
used as-is), a versionless selected_api (`SlackCLIAPI`), the `@latest`
sentinel (`SlackCLIAPI@latest`), or a service slug (`slack`). Versionless,
`@latest`, and slug forms are resolved to the latest published version
at creation time; the inbox always stores and returns the fully-versioned
form. Returns 400 if the identifier matches no app or is ambiguous (matches
more than one).
action_key:
type: string
description: The key of the app action associated with this inbox.
inputs:
type: object
additionalProperties: {}
description: The inputs provided to the app action associated with this
inbox.
required:
- action_key
- app_key
- inputs
securitySchemes:
OAuth:
type: oauth2
description: OAuth 2.0 authentication.
flows:
authorizationCode:
authorizationUrl: https://zapier.com/oauth/authorize
tokenUrl: https://zapier.com/oauth/token
scopes:
external: Scope that gives access to all Public APIs
clientCredentials:
tokenUrl: https://zapier.com/oauth/token
scopes:
external: Scope that gives access to all Public APIs