localization
GET /v1/i18n/slugs
Get translated URL slugs for every locale.
Authentification
Envoyez une clé d'API en tant que jeton du porteur (bearer token). Cet endpoint n'indique pas de permission spécifique dans la spécification, attribuez donc à votre clé le minimum requis et vérifiez la réponse plutôt que de faire des suppositions.
Cet endpoint ne prend aucun identifiant d'organisation. Votre clé identifie déjà l'organisation à laquelle elle appartient, et la réponse y est limitée.
Essayer
Remplacez tout ce qui se trouve entre crochets par vos propres valeurs, et le espace réservé à la clé par une clé de votre tableau de bord.
curl -X GET https://api.zinndigital.com/v1/i18n/slugs \
-H "Authorization: Bearer zdk_live_…"Connecté ? La console d'API de votre tableau de bord saisit votre véritable ID d'organisation ainsi que votre propre clé, et exécute la requête sur l'API de production afin que vous puissiez voir la réponse réelle. Ouvrir ce point de terminaison dans la console API
Détails
Returns the calling organization's translated public URL slugs, keyed by the canonical (source-locale) identifier then by locale — what the public frontend needs to build locale-routed URLs and `hreflang` alternates (CLAUDE.md §2.19, docs/28, docs/30). Reads the `slug` surface only. **Every emitted value is a valid URL path.** The stored translation is normalised on the way out — case-folded to lower case, inner whitespace and underscores collapsed to single hyphens, NFC — and a value that is still not a usable path after that (most often a model answer that lost one of the source's `/` separators, so it names a different route) is **omitted rather than emitted broken**. The caller then falls back to the canonical URL, which is a live, indexable page; publishing the broken form would advertise a URL the router cannot resolve. This was added by W24-B on 2026-08-20 (`docs/72` D12010) after measuring that **694 of 4,043** settled page slugs were values the public site's own validator refused — `"Über uns"`, `"Относно"` — every one `up_to_date`, every one counted complete on the admin Translation Status dashboard, and not one of them reachable by any reader in any language. **A locale's slug is emitted ONLY when its status is `up_to_date`.** This is stricter than `GET /v1/i18n/bundles/{locale}`, and deliberately so: a URL is not a string on a page, it is an identity. Publishing a slug that is still `stale`/`translating` means publishing a URL that will change again within minutes — every link, share and crawl against the interim URL then 404s or bounces through a redirect, which costs real link equity and manufactures redirect churn on exactly the pages SEO cares about. A locale whose slug is not yet settled is simply absent from the response, and the caller falls back to the canonical URL until it is.
Paramètres
| Nom | Type | Obligatoire | Qu'est-ce que c'est |
|---|---|---|---|
object_ref_prefix (query) | string | Non | Only include slugs whose canonical id starts with this prefix. |
Réponse
| Nom | Type | Obligatoire | Qu'est-ce que c'est |
|---|---|---|---|
slugs | object | Oui | Canonical `object_ref` -> locale -> translated slug. A locale appears only when its slug is `up_to_date`; anything less settled is omitted and the caller falls back to the canon… |
Erreurs que cet point de terminaison peut renvoyer
401 · 403 · 422 · 429