Taxonomy
REST API (v2)

GET /schemas/:version/translations

Translation review status for each locale of a schema version, plus open reviewer flags.
Use this to tell readers how far a locale has been reviewed, and to list the questions a fluent speaker could help settle.

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
ParamInDescription
versionpathCanonical version.
localesqueryComma-separated locale codes. Filters both locales and flags. Aliases resolve (tl → fil, zh-TW → zh-Hant). Omit for every locale.
flag_statusqueryopen (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

FieldDescription
statussource for the canonical locale; otherwise unverified, machine_draft, machine_reviewed or human_reviewed.
register, translated_by, reviewed_byPresent only when recorded.
updated_atDate the entry was last updated, or null when nothing is recorded for the locale.
summaryReviewer's one-paragraph verdict. Empty when nothing is recorded.
flag_countsCounts 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

FieldDescription
kindterm_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).
statusopen, resolved or wontfix.
raised_bytranslator, reviewer or human.
targetsWhat 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.
keysThe same addresses in authoring form (<file>#<path>). Prefer targets.
alternativesOptional. 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

CodeHTTPMeaning
bad_request400Malformed :version, or flag_status is not one of the four values.
not_found404Version is not registered.

Example

curl -s 'https://api.dtpr.io/api/v2/schemas/dtpr@2026-09-01-beta/translations?locales=km'

See also