master-zapier-plan-draft/research/zapier/raw/openapi/actions.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

2131 lines
76 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

openapi: 3.1.0
info:
title: Actions API
description: Public access to Zapier Stored Actions and the runs that execute them
— create, list, retrieve, update, and delete stored actions; trigger runs and
fetch run results.
version: v1
contact:
url: https://docs.zapier.com
servers:
- url: https://api.zapier.com
description: Production
tags:
- name: Stored Actions
description: Operations related to a Stored Action
security:
- OAuth: []
paths:
/actions/v1/stored-actions:
get:
operationId: listStoredActions
description: 'Stored Actions endpoints handle the creation, execution, updates,
and deletions
of single created actions.'
summary: List stored actions
tags:
- Stored Actions
security:
- OAuth:
- external
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/StoredActionRecordListResponse'
examples:
Success:
value:
results:
- type: stored_action
id: 01932123-02ea-01fc-3fbd-4d66d944064d
connection_id: 019320ab-0000-7000-8000-abcdef012345
selected_api: SplitwiseCLIAPI@1.0.0
action_key: new_contact
action_type: read
inputs:
first_name: John
last_name: Doe
meta:
limit: 1
offset: 0
count: 1
links:
next: null
description: 'Success: Includes all the Stored Actions for the caller. This
could be an empty list.'
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
200. Maximum via limit_override: 1000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
BadRequest:
value:
errors:
- status: 400
code: bad_request
title: Bad Request
detail: Improperly formatted or incompleted request
source: null
meta: {}
summary: Bad Request
description: Indicates an error executing the request to list Stored Actions.
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
200. Maximum via limit_override: 1000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
'403':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
PermissionDenied:
value:
errors:
- status: 403
code: permission_denied
detail: User does not have enough permissions to perform action
summary: Permission Denied
description: Permission denied. Unauthorized request.
'429':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
TooManyRequests:
value:
errors:
- status: 429
code: too_many_requests
detail: Rate limit exceeded. Too many requests.
summary: Too Many Requests
description: Too many requests.
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
200. Maximum via limit_override: 1000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
Retry-After:
schema:
type: integer
description: Seconds to wait before retrying.
required: true
'500':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
UnhandledOrExternalServiceError:
value:
errors:
- status: 500
code: external_service_error
detail: An error occurred with an external service.
summary: Unhandled or External Service Error
description: Internal Server Error
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
200. Maximum via limit_override: 1000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
'503':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
ServiceUnavailableError:
value:
errors:
- status: 503
code: service_unavaiable
detail: Service is temporarily unavailable
summary: Service Unavailable Error
description: Service Unavailable
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
200. Maximum via limit_override: 1000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
Retry-After:
schema:
type: integer
description: Seconds to wait before retrying.
required: true
post:
operationId: createStoredAction
description: 'Create Stored Action
Creates a new stored action entry that can then be executed from a simpler
call to
/stored-actions with just the stored action `id`.
This will not execute a StoredAction.
This is an async process and will only respond with the id of the stored action
and other meta data,
and it is the callers responsibility to poll
GET /stored-actions/{stored_action_id}/runs/{run_id} with the run id returned
from
POST /stored-actions/{stored_action_id}/run to fetch the results after executing
a stored action.
The triple (selected_api, action_type, action_key) is required to create a
stored action.
Only core actions are supported; external and custom (App Extension) actions
cannot be
created as stored actions via this endpoint.
**Note on `connection_id`:** Other Zapier APIs may expose the same
identifier under the field name `authentication_id`. The value is the
same UUID — pass it here under the `connection_id` key.'
summary: Create a stored action
tags:
- Stored Actions
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/StoredActionsCreateRequest'
examples:
ExamplePOSTRequest:
value:
data:
connection_id: 019320ab-0000-7000-8000-abcdef012345
selected_api: SplitwiseCLIAPI@1.0.0
action_key: new_contact
action_type: read
inputs:
first_name: John
last_name: Doe
summary: Example POST Request
required: true
security:
- OAuth:
- external
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/StoredActionsCreateResponse'
examples:
Success:
value:
type: stored_action
id: 123e4567-e89b-12d3-a456-426614174000
description: A StoredAction record was successfully created.
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
200. Maximum via limit_override: 1000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
BadRequest:
value:
errors:
- status: 400
code: bad_request
title: Bad Request
detail: Improperly formatted or incompleted request
source: null
meta: {}
summary: Bad Request
description: Indicates an error creating a StoredAction record.
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
200. Maximum via limit_override: 1000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
'403':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
PermissionDenied:
value:
errors:
- status: 403
code: permission_denied
detail: User does not have enough permissions to perform action
summary: Permission Denied
description: Permission denied. Unauthorized request.
'429':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
TooManyRequests:
value:
errors:
- status: 429
code: too_many_requests
detail: Rate limit exceeded. Too many requests.
summary: Too Many Requests
description: Too many requests.
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
200. Maximum via limit_override: 1000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
Retry-After:
schema:
type: integer
description: Seconds to wait before retrying.
required: true
'500':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
UnhandledOrExternalServiceError:
value:
errors:
- status: 500
code: external_service_error
detail: An error occurred with an external service.
summary: Unhandled or External Service Error
description: Internal Server Error
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
200. Maximum via limit_override: 1000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
'503':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
ServiceUnavailableError:
value:
errors:
- status: 503
code: service_unavaiable
detail: Service is temporarily unavailable
summary: Service Unavailable Error
description: Service Unavailable
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
200. Maximum via limit_override: 1000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
Retry-After:
schema:
type: integer
description: Seconds to wait before retrying.
required: true
/actions/v1/stored-actions/{stored_action_id}:
get:
operationId: getStoredAction
description: 'Stored Actions endpoints handle the creation, execution, updates,
and deletions
of single created actions.'
summary: Get a stored action
parameters:
- in: path
name: stored_action_id
schema:
type: string
format: uuid
required: true
tags:
- Stored Actions
security:
- OAuth:
- external
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/StoredActionRecord'
examples:
Success:
value:
type: stored_action
id: 01932123-02ea-01fc-3fbd-4d66d944064d
connection_id: 019320ab-0000-7000-8000-abcdef012345
selected_api: SplitwiseCLIAPI@1.0.0
action_key: new_contact
action_type: read
inputs:
first_name: John
last_name: Doe
description: 'Success: Includes data for the requested Stored Action.'
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
200. Maximum via limit_override: 1000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
BadRequest:
value:
errors:
- status: 400
code: bad_request
title: Bad Request
detail: Improperly formatted or incompleted request
source: null
meta: {}
summary: Bad Request
description: Imporoperly formatted or incomplete request.
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
200. Maximum via limit_override: 1000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
'404':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
Error:
value:
errors:
- status: 404
code: not_found
title: Resource not found.
detail: Here's a more readable explanation of what happened.
source:
pointer: /path/to/field
meta: {}
description: No results found for this Stored Action id.
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
200. Maximum via limit_override: 1000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
'403':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
PermissionDenied:
value:
errors:
- status: 403
code: permission_denied
detail: User does not have enough permissions to perform action
summary: Permission Denied
description: Permission denied. Unauthorized request.
'429':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
TooManyRequests:
value:
errors:
- status: 429
code: too_many_requests
detail: Rate limit exceeded. Too many requests.
summary: Too Many Requests
description: Too many requests.
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
200. Maximum via limit_override: 1000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
Retry-After:
schema:
type: integer
description: Seconds to wait before retrying.
required: true
'500':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
UnhandledOrExternalServiceError:
value:
errors:
- status: 500
code: external_service_error
detail: An error occurred with an external service.
summary: Unhandled or External Service Error
description: Internal Server Error
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
200. Maximum via limit_override: 1000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
'503':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
ServiceUnavailableError:
value:
errors:
- status: 503
code: service_unavaiable
detail: Service is temporarily unavailable
summary: Service Unavailable Error
description: Service Unavailable
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
200. Maximum via limit_override: 1000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
Retry-After:
schema:
type: integer
description: Seconds to wait before retrying.
required: true
patch:
operationId: updateStoredAction
description: 'Stored Actions endpoints handle the creation, execution, updates,
and deletions
of single created actions.'
summary: Update a stored action
parameters:
- in: path
name: stored_action_id
schema:
type: string
format: uuid
required: true
tags:
- Stored Actions
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PatchedStoredActionsUpdateRequest'
examples:
ExamplePATCHRequest:
value:
data:
connection_id: 019320ab-0000-7000-8000-abcdef012345
selected_api: SplitwiseCLIAPI@1.0.0
action_key: new_contact
action_type: read
inputs:
first_name: John
last_name: Doe
summary: Example PATCH Request
security:
- OAuth:
- external
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/StoredActionRecord'
examples:
Success:
value:
type: stored_action
id: 01932123-02ea-01fc-3fbd-4d66d944064d
connection_id: 019320ab-0000-7000-8000-abcdef012345
selected_api: SplitwiseCLIAPI@1.0.0
action_key: new_contact
action_type: read
inputs:
first_name: John
last_name: Doe
description: A StoredAction record was successfully updated.
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
200. Maximum via limit_override: 1000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
BadRequest:
value:
errors:
- status: 400
code: bad_request
title: Bad Request
detail: Improperly formatted or incompleted request
source: null
meta: {}
summary: Bad Request
description: Indicates an error updating a StoredAction record.
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
200. Maximum via limit_override: 1000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
'403':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
PermissionDenied:
value:
errors:
- status: 403
code: permission_denied
detail: User does not have enough permissions to perform action
summary: Permission Denied
description: Permission denied. Unauthorized request.
'429':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
TooManyRequests:
value:
errors:
- status: 429
code: too_many_requests
detail: Rate limit exceeded. Too many requests.
summary: Too Many Requests
description: Too many requests.
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
200. Maximum via limit_override: 1000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
Retry-After:
schema:
type: integer
description: Seconds to wait before retrying.
required: true
'500':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
UnhandledOrExternalServiceError:
value:
errors:
- status: 500
code: external_service_error
detail: An error occurred with an external service.
summary: Unhandled or External Service Error
description: Internal Server Error
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
200. Maximum via limit_override: 1000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
'503':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
ServiceUnavailableError:
value:
errors:
- status: 503
code: service_unavaiable
detail: Service is temporarily unavailable
summary: Service Unavailable Error
description: Service Unavailable
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
200. Maximum via limit_override: 1000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
Retry-After:
schema:
type: integer
description: Seconds to wait before retrying.
required: true
delete:
operationId: deleteStoredAction
description: 'Stored Actions endpoints handle the creation, execution, updates,
and deletions
of single created actions.'
summary: Delete a stored action
parameters:
- in: path
name: stored_action_id
schema:
type: string
format: uuid
required: true
tags:
- Stored Actions
security:
- OAuth:
- external
responses:
'204':
description: A StoredAction record was successfully deleted.
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
200. Maximum via limit_override: 1000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
BadRequest:
value:
errors:
- status: 400
code: bad_request
title: Bad Request
detail: Improperly formatted or incompleted request
source: null
meta: {}
summary: Bad Request
description: Indicates an error deleting a StoredAction record.
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
200. Maximum via limit_override: 1000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
'403':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
PermissionDenied:
value:
errors:
- status: 403
code: permission_denied
detail: User does not have enough permissions to perform action
summary: Permission Denied
description: Permission denied. Unauthorized request.
'429':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
TooManyRequests:
value:
errors:
- status: 429
code: too_many_requests
detail: Rate limit exceeded. Too many requests.
summary: Too Many Requests
description: Too many requests.
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
200. Maximum via limit_override: 1000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
Retry-After:
schema:
type: integer
description: Seconds to wait before retrying.
required: true
'500':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
UnhandledOrExternalServiceError:
value:
errors:
- status: 500
code: external_service_error
detail: An error occurred with an external service.
summary: Unhandled or External Service Error
description: Internal Server Error
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
200. Maximum via limit_override: 1000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
'503':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
ServiceUnavailableError:
value:
errors:
- status: 503
code: service_unavaiable
detail: Service is temporarily unavailable
summary: Service Unavailable Error
description: Service Unavailable
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
200. Maximum via limit_override: 1000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
Retry-After:
schema:
type: integer
description: Seconds to wait before retrying.
required: true
/actions/v1/stored-actions/{stored_action_id}/run:
post:
operationId: createStoredActionRun
description: "Execute Stored Action\n\nExecutes an action on behalf of a user,\
\ this is an async process.\n\nRequires the id from a stored action\n\nResponds\
\ with the unique id for this run of the stored action. In order to fetch\
\ results\nyou will need to poll the GET /stored-actions/{stored_action_id}/runs/{run_id}\
\ endpoint\nwith that run id.\n\n**Billing**\n\nThe Actions API offers support\
\ for directly billing users for Stored Action\nRuns, and this functionality\
\ is currently _opt-in_. To do this, you\nmust provide a `billing` claim on\
\ the JWT used to authenticate. This\nclaim must be a JSON string, and any\
\ values provided will override the\ndefault configuration shown below. The\
\ simplest approach is therefore\nto set `is_billable` to true, and successful\
\ Stored Action Runs will be\ncharged to a user at a rate of one task.\n\n\
```json\nbilling: {\n \"is_billable\": false,\n \"origin\": \"actions_api\"\
,\n \"usage_type\": \"action_run\",\n \"description\": \"an action was\
\ run via Actions API\",\n \"exemption_reason\": null,\n \"exemption_details\"\
: null\n}\n```\n\n**Rate Limits**\n\nRate limiting is applied when Gargoyle\
\ flag `edge_actions_api_rate_limiting_global`\nis active. Requests are rate\
\ limited by default unless the JWT explicitly sets\n`rate_limit.exempt` to\
\ true.\n\n```json\nrate_limit: {\n \"exempt\": true\n}\n```\n\nNon-exempted\
\ requests are limited to 200 per 5 minutes by default. To set a custom\n\
limit, include `limit_override` (11000 requests per 5 minutes):\n\n```json\n\
rate_limit: {\n \"exempt\": false,\n \"limit_override\": 500\n}\n```"
summary: Run a stored action
parameters:
- in: path
name: stored_action_id
schema:
type: string
format: uuid
required: true
tags:
- Stored Actions
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/StoredActionsRunRequest'
examples:
ExamplePOSTRequest:
value:
data:
inputs:
message: Hello World!
page: '0'
summary: Example POST Request
required: true
security:
- OAuth:
- external
responses:
'202':
content:
application/json:
schema:
$ref: '#/components/schemas/StoredActionsRunResponse'
examples:
Accepted:
value:
data:
type: run
id: 123e4567-e89b-12d3-a456-426614174000
description: Acknowledges the request to execute a StoredAction
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
200. Maximum via limit_override: 1000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
BadRequest:
value:
errors:
- status: 400
code: bad_request
title: Bad Request
detail: Improperly formatted or incompleted request
source: null
meta: {}
summary: Bad Request
description: Indicates an error executing the request to run a StoredAction.
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
200. Maximum via limit_override: 1000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
'403':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
PermissionDenied:
value:
errors:
- status: 403
code: permission_denied
detail: User does not have enough permissions to perform action
summary: Permission Denied
description: Permission denied. Unauthorized request.
'429':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
TooManyRequests:
value:
errors:
- status: 429
code: too_many_requests
detail: Rate limit exceeded. Too many requests.
summary: Too Many Requests
description: Too many requests.
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
200. Maximum via limit_override: 1000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
Retry-After:
schema:
type: integer
description: Seconds to wait before retrying.
required: true
'500':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
UnhandledOrExternalServiceError:
value:
errors:
- status: 500
code: external_service_error
detail: An error occurred with an external service.
summary: Unhandled or External Service Error
description: Internal Server Error
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
200. Maximum via limit_override: 1000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
'503':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
ServiceUnavailableError:
value:
errors:
- status: 503
code: service_unavaiable
detail: Service is temporarily unavailable
summary: Service Unavailable Error
description: Service Unavailable
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
200. Maximum via limit_override: 1000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
Retry-After:
schema:
type: integer
description: Seconds to wait before retrying.
required: true
'402':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
PaymentRequired:
value:
errors:
- status: 402
code: payment_required
title: Payment Required
detail: Insufficient tasks on account
summary: Payment Required
description: Payment Required - insufficient tasks on account
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
200. Maximum via limit_override: 1000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
'424':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
PartnerAPITemporarilyUnavailable:
value:
errors:
- status: 424
code: partner_api_unhealthy
title: Partner API Temporarily Unavailable
detail: The app's API is currently unhealthy. Retry the request
later.
summary: Partner API Temporarily Unavailable
description: Failed Dependency - the partner API is temporarily unhealthy
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
200. Maximum via limit_override: 1000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
/actions/v1/stored-actions/{stored_action_id}/runs/{run_id}:
get:
operationId: getStoredActionRun
description: 'Fetch Stored Action Run
Requires the id returned from a call to /stored-actions/{stored_action_id}/run
to execute the stored action.
The status code returned by this call does NOT denote the status of the action
in an external system, but the status of the action processing from Zapier.
Results are stored for seven days after the action was initially executed.'
summary: Get stored action run results
parameters:
- in: path
name: run_id
schema:
type: string
format: uuid
required: true
- in: path
name: stored_action_id
schema:
type: string
format: uuid
required: true
tags:
- Stored Actions
security:
- OAuth:
- external
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/StoredActionResult'
examples:
Success:
value:
type: run
status: success
results:
- key: value
next_page: '0'
errors: []
description: 'Success: Includes the results of the task run.'
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
600. Maximum via limit_override: 3000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
'202':
description: The request is still processing, try fetching results again
later.
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
600. Maximum via limit_override: 3000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
BadRequest:
value:
errors:
- status: 400
code: bad_request
title: Bad Request
detail: Improperly formatted or incompleted request
source: null
meta: {}
summary: Bad Request
description: Imporoperly formatted or incomplete request.
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
600. Maximum via limit_override: 3000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
'404':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
Error:
value:
errors:
- status: 404
code: not_found
title: Resource not found.
detail: Here's a more readable explanation of what happened.
source:
pointer: /path/to/field
meta: {}
description: No results found for this run.
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
600. Maximum via limit_override: 3000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
'403':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
PermissionDenied:
value:
errors:
- status: 403
code: permission_denied
detail: User does not have enough permissions to perform action
summary: Permission Denied
description: Permission denied. Unauthorized request.
'429':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
TooManyRequests:
value:
errors:
- status: 429
code: too_many_requests
detail: Rate limit exceeded. Too many requests.
summary: Too Many Requests
description: Too many requests.
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
600. Maximum via limit_override: 3000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
Retry-After:
schema:
type: integer
description: Seconds to wait before retrying.
required: true
'500':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
UnhandledOrExternalServiceError:
value:
errors:
- status: 500
code: external_service_error
detail: An error occurred with an external service.
summary: Unhandled or External Service Error
description: Internal Server Error
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
600. Maximum via limit_override: 3000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
'503':
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsErrorResponse'
examples:
ServiceUnavailableError:
value:
errors:
- status: 503
code: service_unavaiable
detail: Service is temporarily unavailable
summary: Service Unavailable Error
description: Service Unavailable
headers:
X-RateLimit-Limit:
schema:
type: integer
description: 'Effective request cap per 300-second window. Default:
600. Maximum via limit_override: 3000.'
X-RateLimit-Remaining:
schema:
type: integer
description: Requests remaining in the current window.
X-RateLimit-Reset:
schema:
type: string
format: date-time
description: Unix timestamp when the current 300-second window resets.
Retry-After:
schema:
type: integer
description: Seconds to wait before retrying.
required: true
components:
schemas:
ActionTypeEnum:
enum:
- read
- read_bulk
- write
- run
- search
- search_or_write
- search_and_write
- filter
- tool
type: string
description: '* `read` - Read
* `read_bulk` - Read Bulk
* `write` - Write
* `run` - Run
* `search` - Search
* `search_or_write` - Search Or Write
* `search_and_write` - Search And Write
* `filter` - Filter
* `tool` - Tool'
ActionsError:
type: object
description: Base Error definition
properties:
status:
type: integer
description: The HTTP status code applicable to this problem.
code:
type: string
description: A unique identifier for this particular occurrence of the problem.
title:
type: string
description: A short summary of the problem.
detail:
type: string
description: A human-readable explanation specific to this occurrence of
the problem.
source:
oneOf:
- $ref: '#/components/schemas/ActionsErrorSource'
- type: 'null'
description: An object containing references to the primary source of the
error.
meta:
type:
- object
- 'null'
additionalProperties: {}
description: Any additional metadata about the error.
ActionsErrorResponse:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ActionsError'
description: An array of error objects.
required:
- errors
ActionsErrorSource:
type: object
description: Populates the `source` object inside our error responses.
properties:
pointer:
type: string
description: Pointer to the value in the request document that caused the
error e.g. `/actions`.
parameter:
type: string
description: A string indicating which URI query parameter caused the error.
header:
type: string
description: A string indicating the name of a single request header which
caused the error.
ActionsFetchError:
type: object
description: The error information returned from a third party when running
an action.
properties:
code:
allOf:
- $ref: '#/components/schemas/CodeEnum'
description: 'Error type of the result object.
* `user` - user
* `authentication` - authentication
* `partner` - partner
* `system` - system
* `throttled` - throttled
* `system_throttled` - system_throttled
* `hydration` - hydration
* `authentication_access` - authentication_access'
title:
type: string
description: A short summary of the problem.
detail:
type: string
description: A human-readable explanation specific to this occurrence of
the problem.
delay:
type: integer
description: When a partner throttled the execution call (error_type = throttled),
this value will hold the number of seconds to wait before retrying.
meta:
type:
- object
- 'null'
additionalProperties: {}
description: Any additional error information returned from the partner.
CodeEnum:
enum:
- user
- authentication
- partner
- system
- throttled
- system_throttled
- hydration
- authentication_access
type: string
description: '* `user` - user
* `authentication` - authentication
* `partner` - partner
* `system` - system
* `throttled` - throttled
* `system_throttled` - system_throttled
* `hydration` - hydration
* `authentication_access` - authentication_access'
PatchedStoredActionsUpdateRequest:
type: object
properties:
data:
$ref: '#/components/schemas/StoredActionUpdateRequestParams'
StatusA45Enum:
enum:
- error
- success
- waiting
type: string
description: '* `error` - error
* `success` - success
* `waiting` - waiting'
StoredActionRecord:
type: object
description: The shape of a payload representing a stored action record.
properties:
connection_id:
type: string
format: uuid
description: UUID identifying the connection to use when executing a Stored
Action.
selected_api:
type: string
description: Something like `SlackAPI` (for Python apps) or `SplitwiseCLIAPI@1.0.0`
(for CLI apps). Non-public apps are fine as long as the authed user can
access them. If a version is included we attempt to use that version of
the integration. If no version is provided we attempt to use the latest
version of the integration
action_key:
type: string
description: Name of the action in the integration. Such as `new_contact`.
action_type:
allOf:
- $ref: '#/components/schemas/ActionTypeEnum'
description: 'Specifies the type of action in the integration since some
integrations could have similarly named actions with different actions
types
* `read` - Read
* `read_bulk` - Read Bulk
* `write` - Write
* `run` - Run
* `search` - Search
* `search_or_write` - Search Or Write
* `search_and_write` - Search And Write
* `filter` - Filter
* `tool` - Tool'
inputs:
default: {}
description: 'Key/value pairs that the action needs to execute. In the example
of SlackAPI this could be something like `{"channel": "ABC", "text": "my
message"}`'
id:
type: string
format: uuid
description: The UUID id that identifies this stored action and can be used
to execute the stored procedure by calling the POST /stored-actions/{stored_action_id}/run
endpoint.
type:
type: string
default: stored_action
description: Specifies the resource type, as required by the JSON:API specification.
required:
- id
StoredActionRecordListLinks:
type: object
description: Pagination navigation links for a Stored Action list response.
properties:
next:
type:
- string
- 'null'
format: uri
description: Link to the next page of results; null when on the last page.
required:
- next
StoredActionRecordListMeta:
type: object
description: Limit-offset pagination metadata for a Stored Action list response.
properties:
limit:
type: integer
description: Number of results returned in this response.
offset:
type: integer
description: Starting index for this page of results.
count:
type: integer
description: Total number of results across all pages.
required:
- count
- limit
- offset
StoredActionRecordListResponse:
type: object
properties:
results:
type: array
items:
$ref: '#/components/schemas/StoredActionRecord'
description: Stored actions belonging to the caller.
meta:
$ref: '#/components/schemas/StoredActionRecordListMeta'
links:
$ref: '#/components/schemas/StoredActionRecordListLinks'
required:
- links
- meta
- results
StoredActionResult:
type: object
description: The flat response payload for fetching a stored action run.
properties:
type:
type: string
default: run
description: Specifies the resource type, as required by the JSON:API specification.
id:
type: string
format: uuid
description: The id returned by the initial call to run an action.
status:
allOf:
- $ref: '#/components/schemas/StatusA45Enum'
description: 'The result of the action call itself from the partner. You
could have a success=True (Zapier succeeded) and status=error (the partner
raise an error).
* `error` - error
* `success` - success
* `waiting` - waiting'
results:
type: array
items:
type: object
additionalProperties: {}
description: Could be empty, even if the action was successfully run.
next_page:
type: string
description: When using bulk read action types, this denotes the state of
the paging utilities. Pass it back as `page` on the next POST /stored-actions/{stored_action_id}/run
call.
errors:
type: array
items:
$ref: '#/components/schemas/ActionsFetchError'
description: Any errors returned by the partner when running this action.
required:
- errors
StoredActionUpdateRequestParams:
type: object
description: 'The shape of the payload representing the fields available to
update
a StoredAction.
You should delete your existing StoredAction and create a new record
if you need to change either the connection_id or the selected_api.'
properties:
action_key:
type: string
description: Name of the action in the integration. Such as `new_contact`.
action_type:
allOf:
- $ref: '#/components/schemas/ActionTypeEnum'
description: 'Specifies the type of action in the integration since some
integrations could have similarly named actions with different actions
types
* `read` - Read
* `read_bulk` - Read Bulk
* `write` - Write
* `run` - Run
* `search` - Search
* `search_or_write` - Search Or Write
* `search_and_write` - Search And Write
* `filter` - Filter
* `tool` - Tool'
inputs:
default: {}
description: Object that matches the input the action would normally get.
Has all the same keys/types as the `input` of the action. (Formerly known
as "needs" in some documentation)
StoredActionsCreateRequest:
type: object
properties:
data:
$ref: '#/components/schemas/StoredActionsCreateRequestParams'
required:
- data
StoredActionsCreateRequestParams:
type: object
description: 'The shape of the payload that must be sent to create a Stored
Action.
Only the triple (selected_api, action_type, action_key) is accepted —
`action_id` is intentionally not exposed on this endpoint.'
properties:
connection_id:
type: string
format: uuid
description: UUID of the connection to use when executing the Stored Action.
Can be any connection visible to the user (including shared).
selected_api:
type: string
description: Something like `SlackAPI` (for Python apps) or `SplitwiseCLIAPI@1.0.0`
(for CLI apps). Non-public apps are fine as long as the authed user can
access them. If a version is included we attempt to use that version of
the integration. If no version is provided we attempt to use the latest
version of the integration
action_key:
type: string
description: Name of the action in the integration. Such as `new_contact`.
action_type:
allOf:
- $ref: '#/components/schemas/ActionTypeEnum'
description: 'Specifies the type of action in the integration since some
integrations could have similarly named actions with different actions
types
* `read` - Read
* `read_bulk` - Read Bulk
* `write` - Write
* `run` - Run
* `search` - Search
* `search_or_write` - Search Or Write
* `search_and_write` - Search And Write
* `filter` - Filter
* `tool` - Tool'
inputs:
default: {}
description: Object that matches the input the action would normally get.
Has all the same keys/types as the `input` of the action. (Formerly known
as "needs" in some documentation)
required:
- action_key
- action_type
- selected_api
StoredActionsCreateResponse:
type: object
description: The response returned from creating a Stored Action record.
properties:
type:
type: string
default: stored_action
description: Specifies the resource type, as required by the JSON:API specification.
id:
type: string
format: uuid
description: The UUID id that identifies this stored action and can be used
to execute the stored procedure by calling the POST /stored-actions/{stored_action_id}/run
endpoint.
required:
- id
StoredActionsRunRequest:
type: object
properties:
data:
$ref: '#/components/schemas/StoredActionsRunRequestInput'
required:
- data
StoredActionsRunRequestInput:
type: object
description: The shape of a request payload accepted when running a stored action.
properties:
callback_url:
type: string
format: uri
description: An optional URL that Zapier will POST the results to when the
action completes. The POST body will match the same format as the GET
/stored-actions/{stored_action_id}/runs/{run_id} response.
maxLength: 2048
idempotency_id:
type: string
format: uuid
description: A client-provided UUID that identifies this specific request.
If the same idempotency_id is used within 72 hours, the second request
will be ignored and the original response returned.
inputs:
default: {}
description: Object that matches the input the action would normally get.
Has all the same keys/types as the `input` of the action. (Formerly known
as "needs" in some documentation) Specifically includes more "dynamic"
information to execute such as a specific message when triggering an action
that sends a Slack DM, for example.
page:
type: string
description: 'When using bulk read action types, this denotes the state
of the paging utilities. Pass it back into the stored-actions endpoint. '
StoredActionsRunResponse:
type: object
properties:
data:
$ref: '#/components/schemas/StoredActionsRunResponseParams'
required:
- data
StoredActionsRunResponseParams:
type: object
description: The data returned after running a stored action
properties:
type:
type: string
default: run
description: Specifies the resource type, as required by the JSON:API specification.
id:
type: string
format: uuid
description: The UUID id that identifies this run of the execution and can
be used to retrieve the results by polling the GET /stored-actions/{stored_action_id}/runs/{run_id}
endpoint.
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