hosting

GET /v1/sites/{site_id}/translation

Whether this site is translated, and how far along it is.

All hosting endpoints

Authentication

Send an API key as a bearer token. The key must carry the sites.view permission; a key without it is refused with 403, not 404.

This endpoint takes no organisation id. Your key already identifies the organisation it belongs to, and the response is scoped to it.

Try it

Replace anything in angle brackets with your own values, and the key placeholder with a key from your dashboard.

curl -X GET https://api.zinndigital.com/v1/sites/{site_id}/translation \
  -H "Authorization: Bearer zdk_live_…"

Signed in? The API console in your dashboard fills in your real organisation id and your own key, and runs the request against the live API so you can see the actual response. Open this endpoint in the API console

Details

The state of Site Translation for one site: whether it is bought, which tier, how many words and documents we measured, when we last read the site, and per-locale progress. **A site with no subscription is a `200`, not a `404`.** The screen needs to render the offer, and "not bought" is an answer about a site that exists — returning `404` would make a site the customer owns look missing. `locales[]` reports every language with its own counts, and `served` says whether the customer has switched that language on for visitors. ⛔ `translated` and `served` are separate numbers on purpose: every tier translates every language, so a locale can be 100% translated and reach nobody because its owner has not enabled it. Merging them would report either a coverage figure nobody is served by, or a delivery figure that understates what is ready — the two mistakes `docs/28` was rewritten to stop making. Readable whether or not the account is in good standing: a customer behind on an invoice may still see what they have already paid for. Requires `sites.view`.

Parameters

NameTypeRequiredWhat it is
site_id (path)UuidYes

Response

NameTypeRequiredWhat it is
site_idUuidYesUUIDv7 identifier — sortable by creation time (docs/02 §8).
statestring<disabled, active, paused_standing, over_allowance>Yes⛔ `paused_standing` is its own state, not a flavour of `disabled` — the remedies differ and only one of them is the customer's to act on.
tierSiteTranslationTierYes
available_tiersSiteTranslationTier[]YesThe ladder, so the screen never hardcodes a price.
word_countintegerYesTranslatable words measured at the last read.
document_countintegerYes
last_extracted_atstringNoWhen we last successfully read the site. ⛔ Distinct from the attempt cursor the sweep keeps: a failed pass advances that and must not move this, or the screen would report a sit…
last_errorstringNoWhy the last pass did nothing, in words the customer can act on.
localesSiteTranslationLocale[]Yes

Errors this endpoint can return

401 · 403 · 404