Skip to main content

Async and jobs

Some writes return HTTP 202 with a job_id instead of completing inline.

Sequence

  1. POST (or PUT / DELETE) async route → 202 + job_id (UUID).
  2. GET /jobs/{id}no Bearer required; the UUID is the capability.
  3. Optional: GET /jobs with Bearer (same OAuth app + resource owner) to list/filter.
  4. Optional: DELETE /jobs/{id} to drop completed/failed rows.

Sync vs async (common resources)

ResourceAsync exampleSync example
Draft proposalsPOST /draft_proposalsPOST /draft_proposals/sync
Publish draftPOST /draft_proposals/{id}/publishPOST …/publish/sync
BlogsPOST /blogsPOST /blogs/sync
Forms (questionnaire)async mutationsPUT …/sync
Attachmentssync only in v1 (POST /attachments)
RolesPOST /rolesPOST /roles/sync

Use sync routes when your integration needs an immediate body or error. Use async for long work or when you prefer polling.

Filter jobs: filter[command_key] (e.g. draft_proposals#create), filter[status] (pending, processing, completed, failed).

See OpenAPI Jobs tag for schemas.