lingua

The running jobjob_7Hq2 · waiting · on approval · $49.00 charged

The example brand the docs run on: four translation Services, three of them delivered by AI alone, one signed by a sworn translator.

lingua sells translation. Three of its Services are AI alone, and one adds a sworn translator's signature. It proves the default: no person, no account, a paid job on localhost from the first command. The Start, Service and Money tabs all run it.

Each file below, from four lines to seven, with what check read back from it: its price, who delivers it, its steps, and what it leaves you.

services/translation.ts

services/translation.ts · 4 lines
import { Service } from 'services.dev'

export default Service({
  name: 'Translation',
  input: { document: 'file', to: 'language: a BCP 47 tag, such as fr-CA' },
  output: { document: 'file' },
  price: 49,
})
price
$49 per job
within
48 hours
who
AI delivers every job.
margin
at least $39.20 a job (80%) · a job that stops costs you at most $9.80
apps
customer portal · owner console
no human lineAI delivers every job.

services/store-listing.ts

services/store-listing.ts · 5 lines
import { Service } from 'services.dev'

export default Service({
  name: 'Store Listing',
  description: 'Your app store listing, written for each language you sell in.',
  input: { app: 'text: what the app does, such as a budgeting app for couples', languages: 'language[]: such as fr, de, ja', tone: ['plain', 'playful'] },
  output: { listing: 'file' },
  price: 29,
})
price
$29 per job
within
48 hours
who
AI delivers every job.
margin
at least $23.20 a job (80%) · a job that stops costs you at most $5.80
apps
customer portal · owner console
no human lineAI delivers every job.

services/translated-summary.ts

services/translated-summary.ts · 6 lines
import { Service } from 'services.dev'
import translation from './translation.ts'

export default Service({
  name: 'Translated Summary',
  description: 'A long document, translated, with a one-page summary on top.',
  input: { document: 'file', to: 'language: such as fr-CA' },
  output: { document: 'file', summary: 'file' },
  deliver: { translate: translation, summarize: 'ai' },
  price: 79,
})
price
$79 per job
within
48 hours
who
AI delivers every job.
margin
at least $53.40 a job (68%) with your Translation · a job that stops costs you at most $25.60
apps
customer portal · owner console
no human lineAI delivers every job.

services/certified-translation.ts

services/certified-translation.ts · 7 lines
import { Service } from 'services.dev'
import translation from './translation.ts'

export default Service({
  name: 'Certified Translation',
  description: 'A translated document with its certificate.',
  input: { document: 'file', to: 'language: such as fr', country: 'jurisdiction: such as FR' },
  output: { document: 'file', certificate: 'file' },
  deliver: { translate: translation, certify: 'ai' },
  human: { sign: 'sworn-translator', in: 'country', before: 'certify' },
  price: { usd: 189, payout: 60, within: '3d' },
})
price
$189 per job
within
3 days
who
A sworn translator in the job's country signs before the certify step.
margin
at least $81.40 a job (43%) with your Translation · a job that stops costs you at most $107.60
apps
customer portal · delivery portal · owner console
human: { sign: 'sworn-translator' }A sworn translator in the job's country signs before the certify step.
job_9Kc4 · waiting · on signature · $189.00 heldjob_9Kc4 · delivered · birth-certificate.fr.pdf · certificate.pdf · $189.00 charged

    Your first paid job writes the first file and sells it. Your own Service adds the next. Grow takes Translation from four lines to a filing: a review, an ask, a signer and a submit step.

    The same order on four surfaces, the same job and the same body on each:

    API
    curl -X POST http://localhost:8787/jobs -H 'content-type: application/json' -d '{"service":"translation","document":{"url":"https://example.com/lease.pdf","name":"lease.pdf"},"to":"fr-CA","key":"lease-fr-CA"}'
    402 · magic values: none
    {
      "type": "OFFER",
      "object": "offer",
      "service": "translation",
      "title": "Translation",
      "price": {
        "usd": 49,
        "sentence": "$49 per job, within 48 hours, charged on delivery."
      },
      "eta": "48h",
      "terms": "Charged on delivery. Cancel at $0 until it ships. Send it back with a note and the AI redoes it, or you pay $0. Final 7 days after delivery.",
      "next": {
        "do": "order",
        "service": "translation",
        "arguments": {
          "document": {
            "url": "https://example.com/lease.pdf",
            "name": "lease.pdf"
          },
          "to": "fr-CA",
    

    lingua's own suite runs every branch its files write, each by the magic value that produces it, over HTTP and MCP:

    Run
    npx services.dev verify
    magic values: metadata.sandbox.outside = { reject: [missing_certificate] }, metadata.sandbox.outside = { reject: [a_code_no_route_names] }, metadata.sandbox.review = pass, metadata.sandbox.review = flag_once, metadata.sandbox.outside = ack, metadata.sandbox.outside = reject_once, metadata.sandbox.outside = never, metadata.sandbox.outside = alerts, metadata.sandbox.talk = open, watch.url = https://fails-once.example.test/suite, watch.url = https://down.example.test/suite, watch.url = https://hooks.example.test/suite
    lingua · 121 HTTP cases and 23 MCP cases from 42 rows: each row by its live credentials and magic values, with its auth, audience, replay and next cases · http://localhost:8787/verify/suite.json
    121 passed · 0 failed · 54 skipped

    Every ledger line is in the check above: what a job charges, what the AI costs, what a person earns, and what you keep. Money explains each.

    lingua also sells interpreting on site, from a Pool in the work register. The teaser names the window and the distance, never the address:

    captured/pool-register.txt · 200 · tsk_7Hq2 · open · magic values: client.email = signs@example.test, member = mbr_eligible
    → GET /tasks/tsk_7Hq2   # as mbr_eligible: the teaser
    {
      "id": "tsk_7Hq2",
      "object": "task",
      "livemode": false,
      "pool": "interpreters",
      "role": "interpreter",
      "register": "work",
      "status": "open",
      "fields": {
        "act": "attend",
    
    Call
    → POST /tasks/tsk_7Hq2/claim   # as mbr_eligible
    200 · tsk_7Hq2 · claimed · 3 Nov 14:00 to 15:00 is yours · reminders 24h and 1h before · the address opens on the packet · magic values: client.email = signs@example.test, member = mbr_eligible
    ← 200 · tsk_7Hq2 · claimed · 3 Nov 14:00 to 15:00 is yours · reminders 24h and 1h before · the address opens on the packet

    A check-in 2.9 km away is refused, and one from the door counts:

    captured/pool-register.txt · magic values: client.email = signs@example.test, member = mbr_eligible
    → POST /tasks/tsk_7Hq2/arrive {"fix":{"lat":48.8791,"lng":2.3554,"accuracy_m":15}}   # as mbr_eligible, 3 Nov 13:48
    ← 403 not_on_site: The check-in is 2.9 km from the site, and a check-in counts within 250 m. Check in from the site.
    Call
    → POST /tasks/tsk_7Hq2/arrive {"fix":{"lat":48.8556,"lng":2.3605,"accuracy_m":12}}   # as mbr_eligible, 3 Nov 13:56
    200 · tsk_7Hq2 · on_site · 38 m from the site · 4 min before the window · magic values: client.email = signs@example.test, member = mbr_eligible
    ← 200 · tsk_7Hq2 · on_site · 38 m from the site · 4 min before the window
    Call
    → POST /tasks/tsk_7Hq2/complete {"check_out":{"fix":{"lat":48.8557,"lng":2.3604,"accuracy_m":10}},"sign_off":"ask_7Hq4"}   # as mbr_eligible, 3 Nov 15:04
    200 · tsk_7Hq2 · done · completed · sha256:5be1c0a7d29e · magic values: client.email = signs@example.test, member = mbr_eligible
      15:04 · step.committed · attend · person · certified interpreter · FR · mbr_eligible
      15:04 · pay.accrued · mbr_eligible · complete · $90.00
      15:04 · job.charged · job_7Hq2 · $140.00 · released on the client's sign-off
    captured/pool-register.txt · 200 · completed · magic values: client.email = signs@example.test, member = mbr_eligible
    → GET /owner/jobs/job_7Hq2   # the owner: record[9].completed, the artifact the gate froze
    {
      "member": "mbr_eligible",
      "credential": "certified interpreter",
      "region": "FR",
      "rules": "2026-10",
      "site": { "address": "14 Rue de Rivoli, 75004 Paris", "within_m": 250 },
      "window": { "from": "2026-11-03T14:00:00+01:00", "to": "2026-11-03T15:00:00+01:00" },
      "evidence": [
    

    A client who never came still pays, and the interpreter is paid in full. A no-show reopens the Task:

    captured/pool-register.txt · 200 · tsk_7Hr6 · done · party_absent · sha256:91c4e2d07b3a · magic values: client.email = signs@example.test, member = mbr_eligible
    → POST /tasks/tsk_7Hr6/complete {"party_absent":true,"check_out":{"fix":{"lat":48.8662,"lng":2.3411,"accuracy_m":11}}}   # as mbr_eligible, 4 Nov 10:16: on site since 09:58, and no one came to the door
      10:16 · step.committed · attend · person · certified interpreter · FR · mbr_eligible · party_absent after site.grace 15min
      10:16 · pay.accrued · mbr_eligible · complete · party_absent · $90.00
      10:16 · job.charged · job_7Hr6 · $140.00 · released on party_absent
    Call
    → GET /tasks/tsk_7Hr5   # a visit nobody checked in to, 10 minutes after its window opened
    200 · tsk_7Hr5 · open · no-show by mbr_7Hq4 · offered again to members who can reach the site by 14:40 · the client is asked whether to wait or move the window · magic values: client.email = signs@example.test, member = mbr_eligible
    ← 200 · tsk_7Hr5 · open · no-show by mbr_7Hq4 · offered again to members who can reach the site by 14:40 · the client is asked whether to wait or move the window

    The sworn translator's delivery portal, and the owner console, from one run:

    Run
    open http://localhost:8787/sworn-translators
    magic values: member = mbr_eligible
    Certified Translation · you earn $60.00 of each $189 job
    Run
    open http://localhost:8787/console
    magic values: member = mbr_eligible
    lingua · 5 jobs · +$297.00 · AI $4.20 · people $60.00 · you $232.80
    Certified Translation: a sworn translator signed 1 of 1 job unchanged, at $60.00 in payouts.