lingua
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
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
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
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
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 chargedYour 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:
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"}'{
"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:
npx services.dev verifylingua · 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 skippedEvery 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:
→ 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",
→ 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 packetA check-in 2.9 km away is refused, and one from the door counts:
→ 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.→ 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→ 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 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→ 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:
→ 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→ 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 windowThe sworn translator's delivery portal, and the owner console, from one run:
open http://localhost:8787/sworn-translatorsCertified Translation · you earn $60.00 of each $189 jobopen http://localhost:8787/consolelingua · 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.