Pipelines
POST /v1/pipeline takes one file set and a list of steps. CloudRaker parses each file once. Each step then runs over the parsed set. This JSON, inline-config API replaces the multipart /process API.
Steps run in parallel over the same files. Steps are not chained. A step never consumes the output of a different step. You cannot redact the output of a fill step. Each step reads the original file set.
How it works
- You send files (URLs or file ids) and steps.
- Each step is one of
{"extract": {…}},{"redact": {…}},{"fill": {…}}, or{"sign": {…}}. Each takes the same inline config as the matching verb. A step can also be{"action": "<id or slug>", "params": {…}}for a saved config. There is noparsestep. Parsing is automatic. - The response is
202. It contains the pipeline id (plr_…) and one typed id per step, in the order you sent them. GET /v1/runs/plr_…returnssteps[]. Each step has its ownid,capability,status, and result.
Quickstart
Example response
The create call returns the handle and the step ids:
Poll GET /v1/runs/plr_…. The response returns the same step ids with attached results:
Key fields
Some sub-routes address the sign step: /envelope, /void, /audit, and /signers/:id/resend. A pipeline without a sign step answers 404 not_found.
Configuration
The API validates step configs the same way as the standalone verbs. An extract step without schema or action fails with 400 invalid_request. A schema that breaks the schema dialect fails with 400 invalid_schema. The codes and messages match POST /v1/extract. Defaults also match. An extract step is ungrounded unless it carries "citations": true. Without that flag, output.citations is absent.
Sync vs async
Pipelines are always asynchronous. POST /v1/pipeline returns 202 and takes no ?wait=. Poll GET /v1/runs/plr_…?wait=<seconds> (0–120) to long-poll for a terminal state. Or subscribe a webhook and wait for processing.completed.
Send an idempotency-key to make retries safe. A replay returns the original pipeline: its id, its current status, and its original step ids. The response carries an idempotent-replay: true header. The API does not start a second run.
Save as an action
Each step accepts a saved config instead of inline config. You can combine the two. Inline fields win:
{"extract": {"action": …}} keeps the step typed, so its id is exr_…. It also lets you override fields inline. A bare {"action": …} step runs the saved config with no changes. Its step id is null. See Saved configs.