parse-3f6c2a9e-… or extract-9b1d4e7a-…. Every job has three routes, and so do pipelines and batches:
Sync or async
By default, aPOST waits for its job to end. It returns 200 with the job’s id when the job completes, or an error status when the job fails. Send "async": true to get 202 with the id at once. Pipelines and batches always run async.
Use async for long documents, and wherever a client, proxy or load balancer might time out before the job ends. Either way, you read the result from the job’s /result route.
This is an async parse, followed until it ends:
Instead of polling, you can have a webhook tell your server when the job ends.
Statuses
This diagram shows how a job moves between statuses:
Wait for a job
This helper polls a job until it ends. Pass it the status call for the job’s endpoint, such asclient.extract.get. client is the one from SDKs.
Read the result
GET /{endpoint}/{id}/result returns the result only for a completed job. For any other status, it returns:
Anyone in your organization can read a job’s status and result.
Cancel a job
DELETE /{endpoint}/{id} cancels a job that’s queued or processing. It returns the job’s status, now canceled, and you aren’t billed for the job. A job that has already ended returns 409.
Only the user who started a job or pipeline can cancel it. For anyone else, it isn’t found (404). Anyone in your organization can cancel a batch.
DELETE never deletes a finished job’s result, and no route does. A result is deleted only when it expires, as described next.
Retention
By default, Pulse keeps every result and it has noexpires_at. These cases make results expire:
The clock starts when Pulse accepts the request, except for Extract, whose clock starts when the job ends. A batch’s jobs and a pipeline’s steps count from when the batch or pipeline ends. A completed job’s
expires_at gives the exact time.
An expiry of 1 hour or 24 hours replaces both 24-hour rules. No setting keeps a parse sent with save: false for more than 24 hours. Your organization’s retention is set by Pulse; to change it, contact support.
A step sent an expired parse’s parse_id is refused.
Where results are deleted on first read
If your organization deletes each result the first time it’s read, the firstGET …/result returns the result and deletes it. A second read returns 410. A step that reads the parse after that fails or is refused, even one you started earlier.
This is the safe order for a parse you also run Extract on: