Translate
Package translate is text in, the same text out in the language you asked for.
Package translate is text in, the same text out in the language you asked for.
| Base URL | https://api.hanzo.ai |
| Operations | 3 |
| Auth | Authorization: Bearer $HANZO_API_KEY |
translate
GET /v1/translate/memory
List returns the org's own translation-memory entries, newest first, optionally narrowed to one target language and/or one position on the review ladder. It is the review lane's read: what a human reviewer works through.
The org is ALWAYS the validated principal's org, never a request field, so one tenant can never read another's memory — the entries hold customer source text.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
target | query | string | — | Target narrows to one target language tag (BCP-47, e.g. |
state | query | string | — | State narrows to one position on the review ladder: machine, suggested, approved or published. |
limit | query | integer | — | Limit caps the rows returned. |
PUT /v1/translate/memory
Review records a human decision on one translation-memory entry, and returns the entry as stored. A human write always wins over the stored value, and once it lands at approved or published no machine write can move it again — which is what makes a locale rebuild safe to run against reviewed work.
The org is ALWAYS the validated principal's org, never a request field, so a review can only ever land in the caller's own memory.
Request body — application/json (required)
| Field | Type | Required | Description |
|---|---|---|---|
glossary | object | — | Glossary is the terminology the entry was translated under. |
source | string | — | Source is the ORIGINAL string this entry translates. |
state | string | — | State is the entry's new position on the review ladder: suggested, approved or published. |
target | string | — | Target is the target language tag (BCP-47, e.g. |
text | string | — | Text is the reviewed translation to store. |
tier | string | — | Tier is the engine tier the entry belongs to, quality (the default) or bulk. |
POST /v1/translate
Translate a string or a batch into one target language
Returns one translation per input string, in input order, each carrying where it sits on the review ladder and whether it came from your memory rather than an engine — plus a usage block of REAL counts (strings, cached, translated, and the source characters that actually reached an engine). Send text for one string or batch for many, never both. When you name no source, the detected one is reported back.
THE TRANSLATION MEMORY IS CONSULTED FIRST AND IT IS NORMATIVE, NOT A CACHE. Every string keys on (source text, target, glossary version, tier); a hit is returned VERBATIM and never re-translated, which is what makes a locale rebuild idempotent under a non-deterministic model and the bill proportional to what actually changed. Misses go to the engine and are written back at state machine. Editing a glossary term changes the key, so a stale rendering can never be served.
IT CANNOT TRAMPLE REVIEWED WORK. A write from this route may create an entry or refresh one still at machine, and nothing else — a string a human moved to approved or published through the memory review lane survives every rebuild, and comes back here unchanged. The memory is the caller's OWN org's, a separate store per org: the source text you send is customer content and lands nowhere else. Read it back or review it at /v1/translate/memory.
tier picks the engine and defaults to quality — the model plane, which carries context, terminology and tone, and which bills its own tokens, so nothing is charged twice here. bulk is the high-volume engine and is metered HERE, on the source characters that reached it: a fully-cached rebuild reports zero characters and costs zero. BULK NEVER FALLS BACK TO QUALITY — on a deployment that does not serve it the answer is 503 for that tier, so a caller is never quietly served, or charged, at a tier it did not ask for. A bulk request beyond its balance is refused with the nested {"error":{"code","message"}} body at 402/503.
target IS CHECKED FOR SHAPE, NOT FOR SUPPORT: anything BCP-47-shaped is accepted (es, pt-BR), anything else is 400. There is no unsupported-language error — a well-formed tag no engine can actually render is passed straight through, and whatever comes back is what gets stored and returned. format (text, html, markdown) tells the engine what markup to preserve; glossary fixes terms verbatim.
Requires a validated principal — 401 without one, and the org is always that principal's. At most 512 strings per call and 32768 characters per string; an engine that fails or answers a reply that does not cover every input is 502, and nothing is stored.
How is this guide?
Traffic
Package ai is Hanzo AI — the model API on /v1 (/v1/chat/completions, /v1/messages, /v1/models and the rest of hanzoai/ai's surface) — mounted into a cloud binary with the money, ingest and telemetry…
Upload
Package exec is the code interpreter: run a snippet in a sandbox and move files in and out.