Quickstart

Three calls: create a project, poll until it is done, download the file.

Use a Live key (abr_live_…) with both verify:submit and verify:read. Start with one small file — a real project is the only way to see real word counts, real deliverables and real turnaround.

1. Submit

curl -s https://api.arbitr.ai/v1/projects \
  -X POST \
  -H "X-API-Key: abr_live_…" \
  -F "file=@/path/to/document.txt" \
  -F "name=My first project" \
  -F "source_language_code=en-us" \
  -F 'target_language_codes=["ja-jp"]' \
  -F 'workflow=["AI_TRANSLATION"]'

201. Copy id — that is the project id for the next calls.

Language codes are lowercase BCP-47 (en-us, ja-jp). workflow and target_language_codes are JSON arrays sent as form strings.

2. Poll

curl -s https://api.arbitr.ai/v1/projects/PROJECT_ID \
  -H "X-API-Key: abr_live_…"

Repeat until status is completed — or published, which is also delivered. Stop just as firmly on failed, cancelled and refunded: those are ends too, and a loop that only watches for completed never exits. Watch review.status as well, because a trust-credit hold leaves status unchanged. Both holds resume — see Resume after payment. The full rule and a loop you can copy are in Project lifecycle.

3. Download

List files, then fetch one. Use the deliverable id from the list, not a number.

curl -s https://api.arbitr.ai/v1/projects/PROJECT_ID/deliverables \
  -H "X-API-Key: abr_live_…"

Send Accept: application/octet-stream to get the bytes rather than the metadata:

curl -s https://api.arbitr.ai/v1/projects/PROJECT_ID/deliverables/DELIVERABLE_ID \
  -H "X-API-Key: abr_live_…" \
  -H "Accept: application/octet-stream" \
  -OJ

All files as one zip:

curl -s "https://api.arbitr.ai/v1/projects/PROJECT_ID/deliverables?format=zip" \
  -H "X-API-Key: abr_live_…" \
  -o project.zip

To rehearse this flow without touching the pipeline, swap the header for a test key — but read Test mode first, because the counts and files it returns are canned.

Next