These docs are in progress. Some pages are incomplete or may change. Report a problem
GET /schemas/:version/translations
Translation review status for each locale of a schema version, plus open reviewer flags.
Developer docs menu
Summary
Returns one entry per locale in the version's manifest.locales (including the source locale) and the flags translators and reviewers raised. Supports locale filtering and a flag-status filter.
Translation status is review metadata, not taxonomy content. It is not covered by content_hash: resolving a flag does not change the hash, and the status of a stable version can still change.
Request
GET https://api.dtpr.io/api/v2/schemas/:version/translations
| Param | In | Description |
|---|---|---|
version | path | Canonical version. |
locales | query | Comma-separated locale codes. Filters both locales and flags. Aliases resolve (tl → fil, zh-TW → zh-Hant). Omit for every locale. |
flag_status | query | open (default), resolved, wontfix, or all. Filters flags only. |
Response
HTTP/1.1 200 OK
Content-Type: application/json
DTPR-Content-Hash: sha256-…
Cache-Control: no-store
{
"ok": true,
"version": "dtpr@2026-09-01-beta",
"source_locale": "en",
"locales": [
{
"locale": "en",
"status": "source",
"updated_at": null,
"summary": "",
"flag_counts": { "open": 5, "resolved": 1, "wontfix": 0 }
},
{
"locale": "es",
"status": "machine_reviewed",
"register": "Neutral Latin American Spanish, usted",
"translated_by": "claude-opus-5-5",
"reviewed_by": "claude-opus-5-5 (independent pass, 24 corrections)",
"updated_at": "2026-10-05",
"summary": "Reviewer judged it publishable. …",
"flag_counts": { "open": 8, "resolved": 0, "wontfix": 0 }
}
],
"flags": [
{
"id": "en-duration-placeholder",
"locale": "en",
"kind": "layout",
"status": "open",
"raised_by": "translator",
"keys": ["elements/data_retained.yaml#title", "elements/data_retained.yaml#description"],
"note": "Every translation assumes {{duration}} is filled with a bare span …",
"targets": [
{ "type": "element", "id": "data_retained", "field": "title" },
{ "type": "element", "id": "data_retained", "field": "description" }
]
}
]
}
Locale entries
| Field | Description |
|---|---|
status | source for the canonical locale; otherwise unverified, machine_draft, machine_reviewed or human_reviewed. |
register, translated_by, reviewed_by | Present only when recorded. |
updated_at | Date the entry was last updated, or null when nothing is recorded for the locale. |
summary | Reviewer's one-paragraph verdict. Empty when nothing is recorded. |
flag_counts | Counts every flag for the locale by status, whatever flag_status selects. |
A locale that is in the manifest but has no recorded status is unverified. A version that records no translation status at all returns 200 with every non-source locale unverified and flags: [].
Flags
| Field | Description |
|---|---|
kind | term_choice (a defensible term with a live alternative), native_review (needs a fluent speaker), divergence (says something different from the English), source_issue (the English is the problem), layout (length or placeholder behaviour on a sign). |
status | open, resolved or wontfix. |
raised_by | translator, reviewer or human. |
targets | What the flag points at. type is element, category or datachain_type; id is that entity's id; field is the path of the localized field, e.g. title or element_context.values[1].name. |
keys | The same addresses in authoring form (<file>#<path>). Prefer targets. |
alternatives | Optional. Other renderings the translator or reviewer proposed. |
Flags raised on the source locale are included: a source_issue usually explains why several translations share a problem.
Caching
Beta versions are served with Cache-Control: no-store. Stable versions are served with Cache-Control: public, max-age=300 rather than immutable, because the status can change after a version is promoted.
Errors
| Code | HTTP | Meaning |
|---|---|---|
bad_request | 400 | Malformed :version, or flag_status is not one of the four values. |
not_found | 404 | Version is not registered. |
Example
curl -s 'https://api.dtpr.io/api/v2/schemas/dtpr@2026-09-01-beta/translations?locales=km'
GET /api/v2/schemas/dtpr@2026-09-01-beta/translations?locales=km HTTP/1.1
Host: api.dtpr.io
See also
- MCP
get_translation_status— same payload. GET /schemas/:version/manifest— the locale list this endpoint follows.- Pagination + fields + locales