localization
POST /v1/i18n/sources
Register translatable source fields (batch).
Doğrulama
API açarını bearer token kimi göndərin. Bu səhifə spresifikasiyada xüsusi icazə tələb etmir, buna görə də açarınıza ehtiyac duyduğu minimum səviyyədə icazə verin və güman etmək əvəzinə cavabı yoxlayın.
Bu endpoint heç bir təşkilat ID-si tələb etmir. Sizin açarınız artıq aid olduğu təşkilatı müəyyən edir və cavab həmin təşkilat üçün məhdudlaşdırılır.
Sınaqdan keçir
Bucaqlı mötərizələrdə olan hór şeyi öz qiymətlərinizlə, açar yertutucusunu isə idarə panelinizdən bir açarla əvəz edin.
curl -X POST https://api.zinndigital.com/v1/i18n/sources \
-H "Authorization: Bearer zdk_live_…" \
-H "Content-Type: application/json" \
-d '{ }'Sistemə daxil olmusunuz? İdarə panelinizdəki API konsolu real təşkilatınızın identifikatorunu və öz açarınızı avtomatik doldurur, sorğunu canlı API-yə qarşı icra edir ki, siz faktiki cavabı görə biləsiniz. Bu son nöqtəni API konsolunda açın
Təfərrüatlar
Registers (or updates) source fields for auto-translation into every enabled locale (CLAUDE.md §2.19, docs/28). Each item is keyed by (surface, object_ref, field) within the calling organization; the org is taken from the credential and can never be set from the body. Batched by design. One CMS page save touches on the order of 150 translatable fields (body blocks, meta title/description, OpenGraph, JSON-LD text, alt text, breadcrumb labels, the slug). A per-field request would turn a single editorial save into 150 round-trips, so the endpoint takes up to 200 items per call; more than that is a 422 asking the caller to split the batch. Intrinsically idempotent — an Idempotency-Key is accepted but not needed. Registration is keyed on a SHA-256 of the source text: when the content hash is unchanged the call is a complete no-op (nothing is marked stale, no re-translation event is emitted, changed comes back false). Replaying the same batch therefore costs nothing and changes nothing, so unlike every other unsafe endpoint here this one needs no replay protection to be safe. The header is still accepted so that clients and generated SDKs can send it uniformly across all writes. Translation runs asynchronously afterwards — a successful response means the source is recorded and (if it changed) queued, never that any locale is translated yet. Poll GET /v1/i18n/bundles/{locale} or watch the translation.completed events.
Parametrlər
| Ad | Tip | Tələb olunur | Nədir |
|---|---|---|---|
Idempotency-Key (header) | string | Xeyr | Client-generated key that makes an unsafe request replay-safe: the server stores the first response and returns it verbatim for repeats. |
Sorğu gövdəsi
| Ad | Tip | Tələb olunur | Nədir |
|---|---|---|---|
items | TranslationSourceItem[] | Xeyr | The source fields to register. Capped at 200 per request — a larger batch is a 422 telling the caller to split it. Optional so that a RETIREMENT-ONLY request is expressible: the… |
prune | TranslationPruneScope | Xeyr | Retire every registered source inside this scope that is NOT named in items — the de-registration path (#735). Without it, a key deleted from the caller's catalogue leaves its… |
prune_namespace | TranslationNamespacePrune | Xeyr | Retire every registered DOCUMENT under ref_prefix that is not named in expected_refs. TranslationPruneScope retires fields inside one document; this retires documents that… |
Cavab
| Ad | Tip | Tələb olunur | Nədir |
|---|---|---|---|
results | TranslationSourceResult[] | Bəli | One result per submitted item, in the order submitted. |
retired | TranslationField[] | Xeyr | Field names deleted by prune, sorted. Empty when prune was absent or nothing was stale. Reported rather than assumed: a destructive operation that returns no number is… |
retired_refs | ObjectRef[] | Xeyr | object_refs deleted by prune_namespace, sorted. Empty when prune_namespace was absent or nothing was dead. Kept separate from retired on purpose: a count of retired FIELDS… |
Bu son nöqtənin qaytara biləcəyi xətalar
401 · 403 · 422 · 429