The manifest
The whole definition as JSON, every default written and money in cents. Every surface reads it, and nothing else.
manifest(), from services.dev/manifest, turns a Service into JSON. Every surface renders it: the API, the CLI, the MCP server, the SDK, the Site, the docs and the apps. GET /manifest.json serves every Service's.
{
"id": "translation",
"name": "Translation",
"description": "Translation: send a document and a language; get a document back.",
"input": {"type":"object","properties":{"document":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"name":{"type":"string"}},"required":["url","name"],"x-word":"file"},"to":{"type":"string","description":"a BCP 47 tag, such as fr-CA","x-word":"language"}},"required":["document","to"]},
"output": {"type":"object","properties":{"document":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"name":{"type":"string"}},"required":["url","name"],"x-word":"file"}},"required":["document"]},
"deliver": [{"step":"draft","by":"ai","brief":"services/translation.md"}],
"review": "adversarial",
"human": {"sentence":"AI delivers every job."},
"price": {"per":"job","cents":4900,"within":"48h","ai_cap":"20%","final_after":"7d","charged":"on delivery","sentence":"$49 per job, within 48 hours, charged on delivery."},
"surfaces": {"site":"/translation","route":"POST /jobs {\"service\":\"translation\"}","tool":"order_translation","description":"Translation: send a document and a language; get a document back. $49 per job, within 48 hours, charged on delivery. AI delivers every job.","cli":"npx services.dev translation k=v …","sdk":"connect({ origin }).translation.order(input)","docs":"/llms.txt","apps":[{"name":"customer portal","path":"/portal"},{"name":"owner console","path":"/console"}]}
}$ curl http://localhost:8787/manifest.json # checked-translation
{
"id": "checked-translation",
"name": "Checked Translation",
"description": "Checked Translation: send a document and a language; get a document and a match back.",
"input": {"type":"object","properties":{"document":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"name":{"type":"string"}},"required":["url","name"],"x-word":"file"},"to":{"type":"string","description":"such as de","x-word":"language"}},"required":["document","to"]},
"output": {"type":"object","properties":{"document":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"name":{"type":"string"}},"required":["url","name"],"x-word":"file"},"match":{"type":"number","x-word":"number"}},"required":["document","match"]},
"deliver": [{"step":"translate","by":"ai","brief":"services/checked-translation.md","guard":["match"]},{"step":"proof","by":"person","role":"proofreader","guard":["match"]}],
"review": "adversarial",
"human": {"sentence":"A proofreader does the proof step."},
"portal": "proofreaders",
"policy": {"match":{"word":"number","default":0,"min":0,"max":1,"binds":"merits","note":"the least back-translation match the client accepts"},"turnaround":{"word":"number","default":2,"min":1,"max":10,"note":"days the work may take"}},
"price": {"per":"job","cents":7900,"payout_cents":2500,"within":"48h","ai_cap":"20%","final_after":"7d","charged":"on delivery","sentence":"$79 per job, within 48 hours, charged on delivery."},
"surfaces": {"site":"/checked-translation","route":"POST /jobs {\"service\":\"checked-translation\"}","tool":"order_checked_translation","description":"Checked Translation: send a document and a language; get a document and a match back. $79 per job, within 48 hours, charged on delivery. A proofreader does the proof step.","cli":"npx services.dev checked-translation k=v …","sdk":"connect({ origin }).checkedTranslation.order(input)","docs":"/llms.txt","apps":[{"name":"customer portal","path":"/portal"},{"name":"delivery portal","path":"/proofreaders"},{"name":"owner console","path":"/console"}]}
}| Key | In the four lines | In Checked Translation |
|---|---|---|
id | yes | yes |
name | yes | yes |
description | yes | yes |
input | yes | yes |
output | yes | yes |
deliver | yes | yes |
review | yes | yes |
human | yes | yes |
price | yes | yes |
surfaces | yes | yes |
portal | yes | |
policy | yes |
input and output are JSON Schema, each field marked with its type word as x-word. An option you didn't set is left out. Money is integer cents.