Workflows & credits

workflow on POST /v1/projects is a JSON array of stages. arbitr runs them in order. You do not assign vendors or sequence the later stages yourself.

Stages

Stage What it does Requires
AI_TRANSLATION Machine translation and automatic verification Always first
TRANSLATION Human translation after AI AI_TRANSLATION
EDIT Human edit after translation TRANSLATION

AI only:

workflow=["AI_TRANSLATION"]

AI then human translation and edit:

workflow=["AI_TRANSLATION","TRANSLATION","EDIT"]

due_date (YYYY-MM-DD) is optional and informational. It never blocks or parks the project. GET /v1/projects/{id} echoes it on assessment and sets due_date_feasible null if you sent no date).

Two wallets

Wallet Used for
Intelligence AI stage
Trust Human stages (TRANSLATION, EDIT)

Check the org balance (any valid key, no extra scope):

curl -s https://api-arbitr.straker.ai/v1/credits/balance \
  -H "X-API-Key: abr_live_…"

intelligence_credits / trust_credits are remaining. Values are numbers (trust can be fractional). abr_test_… keys do not consume credits.

While a project runs

Poll GET /v1/projects/{id} (verify:read). assessment is only on this detail call, not on create or list.

  • assessment.credits.intelligence — always present (required, available, sufficient)
  • assessment.credits.trust — present when the workflow has a human stage; otherwise null
  • review — human-stage lifecycle; fields stay empty until a review is requested

If credits run out mid-flight, status becomes awaiting_payment. Top up in the arbitr UI, then resume (verify:submit):

Hold Call
AI / intelligence POST /v1/projects/{id}/resumptions
Human / trust POST /v1/projects/{id}/review/resumptions

Still short → 402. Not waiting for payment → 409.

POST …/resumptions returns a flat {detail, required, available, shortfall} on the credit gate — no error object. …/review/resumptions uses the normal envelope with payment_required. See Errors.