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; otherwisenullreview— 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.