Submit a humanization pipeline run against a variant. Returns
202 Accepted with status=pending; poll GET /v1/humanizations/{id}
until status=completed or failed.
Idempotency. Send a unique Idempotency-Key per submission —
replays return the cached 202 without enqueuing a second job or
re-spending credits. A replay with a different body returns
409 idempotency_mismatch.
Credits. Humanization costs 1 credit per submission, debited
against the caller’s organization balance. Insufficient credits at
submit time surface as 402 insufficient_credits with
credit_cost / credit_balance in the problem+json body.
Prefer: wait. Pass Prefer: wait=<seconds> (max 120) to run
the pipeline synchronously and receive a 200 response with
status=completed (or status=failed) instead of polling. The
server adds a Preference-Applied: wait=<N> header on success.
Omitting the header or sending Prefer: respond-async preserves
the standard 202 async flow.
Cost: write — burns rate + quota, and debits credits.
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body for POST /v1/humanizations.
UUID of the variant to humanize. Must belong to the caller's org. Strategy selection is not yet settable via the API — the pipeline runs all configured strategies on every submit.
"11112222-3333-4444-5555-666677778888"
Successful Response
Humanization job envelope — pipeline status + typed results.
Field layout matches the shared spec in docs/strategy/api-plan.md
so the next 5 resource-per-job-type endpoints can ship identical
envelopes and the Python SDK can define one Job base class.
Opaque humanization identifier (UUID).
"dddd1111-eeee-2222-ffff-333344445555"
Lifecycle state. pending → running → completed | failed. canceled is terminal and only reachable via POST /v1/humanizations/{id}/cancel on a still-pending job.
pending, running, completed, failed, canceled "pending"
ISO-8601 timestamp (UTC) when the job was submitted.
"2026-04-22T14:15:00+00:00"
Credits debited at submission for this job type.
1
Echo of the caller's submit body — useful for clients that don't cache.
Polymorphic discriminator. Always humanization on this endpoint.
"humanization"ISO-8601 timestamp when execution started. null while pending.
ISO-8601 timestamp when the job completed successfully. null otherwise.
ISO-8601 timestamp when the job failed. null unless status=failed. Synthesized from the underlying job's terminal timestamp — the DB does not carry a separate failed_at column.
ISO-8601 timestamp when the job was canceled via POST /v1/humanizations/{id}/cancel. null unless status=canceled.
Populated only when status=failed. Same shape as problem+json.
Per-strategy humanization outputs. null until status=completed; empty list is valid if the pipeline produced no viable strategies.