# Certified Translation: Order a job, or get the offer: the price and the exact next call.

URL: https://services.dev/docs/examples/lingua/api/order_certified_translation

## Certified Translation: Order a job, or get the offer: the price and the exact next call.

`POST /jobs` · `order_certified_translation`

Status: live

A translated document with its certificate. $189 per job, within 3 days, charged on delivery. A sworn translator in the job's country signs before the certify step.

### Parameters

- `service` string · required: The Service to order: "certified-translation".
- `document` object · file · required
  - `document.url` string · uri · required
  - `document.name` string · required
- `to` string · language · required: such as fr
- `country` string · jurisdiction · required: such as FR
- `max_usd` number: The most you will pay, in dollars. Missing or below the price, you get an offer instead of a job.
- `key` string: Any string you choose. Retrying with the same key returns the same job.
- `metadata` object: Your own keys, echoed on the job and its events.
- `test_clock` string: A test clock the job runs on: tc_….

### Returns

- 200 job: The same job, for a key already used.
- 202 job: The job, working.
- 400 error: BLOCKED: body_invalid, version_unknown. (not captured yet)
- 401 error: BLOCKED: key_missing, key_invalid. (not captured yet)
- 402 OFFER: OFFER: the price and the exact next call.
- 403 error: BLOCKED: not_live, act_refused, region_not_ratified, brand_unverified. (not captured yet)
- 404 error: EMPTY: not_found. (not captured yet)
- 409 error: BLOCKED: key_reused.
- 422 error: BLOCKED: input_invalid, policy_invalid.
- 500 error: BLOCKED: api_error. (not captured yet)

### CLI

```
$ npx services.dev certified-translation document=document.pdf to=fr country=FR service=certified-translation
OFFER · $189 per job, within 3 days, charged on delivery.
  next    npx services.dev certified-translation document=document.pdf to=fr country=FR --max 189

$ npx services.dev certified-translation document=document.pdf to=fr country=FR --max 189
job_7Hq3 · working · $189.00 held
```

### API

```
curl http://localhost:8787/jobs \
  -H 'content-type: application/json' \
  -d '{"service":"certified-translation","document":{"url":"https://example.com/document.pdf","name":"document.pdf"},"to":"fr","country":"FR","max_usd":189,"key":"any-string-you-choose"}'
```

### MCP

```
→ tools/call order_certified_translation {"document":{"url":"https://example.com/document.pdf","name":"document.pdf"},"to":"fr","country":"FR","max_usd":189,"key":"certified-translation-1"}
← job_7Hq3 · working · $189.00 held
```

### SDK

```
import { connect } from 'services.dev/agent'

const lingua = connect('http://localhost:8787', { budget: 189 })
const job = await lingua.order('certified-translation', {"document":{"url":"https://example.com/document.pdf","name":"document.pdf"},"to":"fr","country":"FR"}, { key: 'certified-translation-1' })
```

### 202 job

```json
{
  "id": "job_7Hq3",
  "object": "job",
  "created": "2026-10-25T14:00:24.000Z",
  "livemode": false,
  "simulated": true,
  "service": "certified-translation",
  "input": {
    "document": {
      "url": "https://example.com/document.pdf",
      "name": "document.pdf"
    },
    "to": "fr",
    "country": "FR"
  },
  "metadata": {},
  "price": {
    "usd": 189,
    "approved": false,
    "max_usd": 189
  },
  "payment": {
    "status": "held",
    "amount_usd": 189
  },
  "human": "A sworn translator in the job's country signs before the certify step.",
  "stage": null,
  "steps": [
    {
      "id": "stp_1",
      "object": "step",
      "step": "translate",
      "by": "service",
      "status": "working"
    },
    {
      "id": "stp_2",
      "object": "step",
      "step": "review",
      "by": "ai",
      "review": "adversarial",
      "status": "pending"
    },
    {
      "id": "stp_4",
      "object": "step",
      "step": "certify",
      "by": "ai",
      "status": "pending"
    }
  ],
  "next": [
    {
      "do": "get",
      "arguments": {
        "id": "job_7Hq3"
      },
      "tool": "get_job",
      "http": "GET http://localhost:8787/jobs/job_7Hq3?wait=50"
    },
    {
      "do": "cancel",
      "arguments": {
        "id": "job_7Hq3"
      },
      "tool": "cancel_job",
      "http": "POST http://localhost:8787/jobs/job_7Hq3/cancel"
    }
  ],
  "status": "working"
}
```

### 200 job

```json
{
  "id": "job_7Hq3",
  "object": "job",
  "created": "2026-10-25T14:00:24.000Z",
  "livemode": false,
  "simulated": true,
  "service": "certified-translation",
  "input": {
    "document": {
      "url": "https://example.com/document.pdf",
      "name": "document.pdf"
    },
    "to": "fr",
    "country": "FR"
  },
  "metadata": {},
  "price": {
    "usd": 189,
    "approved": false,
    "max_usd": 189
  },
  "payment": {
    "status": "held",
    "amount_usd": 189
  },
  "human": "A sworn translator in the job's country signs before the certify step.",
  "stage": "review",
  "steps": [
    {
      "id": "stp_1",
      "object": "step",
      "step": "translate",
      "by": "service",
      "status": "committed",
      "hash": "sha256:1824ac54ff7ca122e4e7c1b09ee3a402e1bcad9f0490a44265164701b9636916"
    },
    {
      "id": "stp_2",
      "object": "step",
      "step": "review",
      "by": "ai",
      "review": "adversarial",
      "verdict": "pass",
      "status": "committed",
      "hash": "sha256:7872030adc5ce4f6451657cad35f9270ecd255bb13c720b66287e8aa6f990c5f"
    },
    {
      "id": "stp_3",
      "object": "step",
      "step": "sign",
      "by": "sworn translator",
      "status": "waiting"
    },
    {
      "id": "stp_4",
      "object": "step",
      "step": "certify",
      "by": "ai",
      "status": "pending"
    }
  ],
  "next": [
    {
      "do": "get",
      "arguments": {
        "id": "job_7Hq3"
      },
      "after": "2026-10-28T14:00:57.000Z",
      "tool": "get_job",
      "http": "GET http://localhost:8787/jobs/job_7Hq3?wait=50"
    },
    {
      "do": "cancel",
      "arguments": {
        "id": "job_7Hq3"
      },
      "tool": "cancel_job",
      "http": "POST http://localhost:8787/jobs/job_7Hq3/cancel"
    }
  ],
  "status": "waiting",
  "on": "signature",
  "waiting": {
    "on": "signature",
    "since_at": "2026-10-25T14:00:57.000Z"
  }
}
```

### 402 OFFER

```json
{
  "type": "OFFER",
  "object": "offer",
  "service": "certified-translation",
  "title": "Certified Translation",
  "price": {
    "usd": 189,
    "sentence": "$189 per job, within 3 days, charged on delivery."
  },
  "eta": "3d",
  "terms": "Charged on delivery. Cancel at $0 until it ships, except the work a person attested once the signature before certify is done. Send it back with a note and the AI redoes it, or you pay $0. Final 7 days after delivery.",
  "next": {
    "do": "order",
    "service": "certified-translation",
    "arguments": {
      "document": {
        "url": "https://example.com/document.pdf",
        "name": "document.pdf"
      },
      "to": "fr",
      "country": "FR",
      "max_usd": 189,
      "key": "certified-translation-1",
      "service": "certified-translation"
    },
    "tool": "order_job",
    "http": "POST http://localhost:8787/jobs {\"service\":\"certified-translation\"}"
  },
  "simulated": true
}
```

### 422 input_invalid

```json
{
  "type": "BLOCKED",
  "category": "invalid_request",
  "code": "input_invalid",
  "reason": "Missing country.",
  "param": "country",
  "next": {
    "do": "order",
    "service": "certified-translation",
    "arguments": {
      "document": {
        "url": "https://example.com/document.pdf",
        "name": "document.pdf"
      },
      "to": "fr",
      "max_usd": 189,
      "key": "certified-translation-1-short",
      "country": null,
      "service": "certified-translation"
    },
    "fill": [
      "country"
    ],
    "tool": "order_job",
    "http": "POST http://localhost:8787/jobs {\"service\":\"certified-translation\"}"
  },
  "doc_url": "http://localhost:8787/docs/errors/input_invalid",
  "request_id": "req_hGrx6U",
  "simulated": true
}
```

### 409 key_reused

```json
{
  "type": "BLOCKED",
  "category": "conflict",
  "code": "key_reused",
  "reason": "That key was already sent with a different body.",
  "param": "key",
  "next": {
    "do": "order",
    "service": "certified-translation",
    "arguments": {
      "document": {
        "url": "https://example.com/document.pdf",
        "name": "document.pdf"
      },
      "to": "de",
      "country": "FR",
      "max_usd": 189,
      "key": "order-fdecee43",
      "service": "certified-translation"
    },
    "tool": "order_job",
    "http": "POST http://localhost:8787/jobs {\"service\":\"certified-translation\"}"
  },
  "doc_url": "http://localhost:8787/docs/errors/key_reused",
  "request_id": "req_EXg56F",
  "simulated": true
}
```
