Batch get order status translations
Fetch order status translations in batch.
An order status translation is the name of one of the store's own (custom) statuses in another store language, addressed by the id that List order statuses returns. Customers see it on the order confirmation, order status and account pages in that language, and staff who use Tringify in that language see it in the order list and order details; without one, everyone sees the status's own name. System statuses (Pending payment, Processing, Completed, Cancelled) are worded by Tringify in every language and refuse translations with ORDER_STATUS_TRANSLATION_SYSTEM. Only name is translatable; it follows the rules of a status name (not blank, at most the order statuses limit's name_max_length characters, no control characters). A translation written against an earlier name is reported outdated. Store Admin, the Tringify mobile app, standard AI Translator jobs, translation CSV (resource order_status) and MCP translate the same names. Each change sends order_statuses/translations/update, or order_statuses/translations/delete when a translation is cleared. Returns a resources entry keyed by order_status:{id} for each requested status (at most 100 per call); a status without a translation has an empty object. Fields without a translation in this locale are omitted from the response. An omitted field is not empty: shoppers see the store's base-language value, which the resource's own GET endpoint returns.
Path parameters
| Name | Type | Description |
|---|---|---|
locale
required
|
string |
Enabled non-default store locale. |
Query parameters
| Name | Type | Description |
|---|---|---|
ids
required
|
string |
Comma-separated order status IDs. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400TRANSLATION_LOCALE_NOT_ENABLEDLocale is not enabled for this store.
-
400TRANSLATION_DEFAULT_LOCALE_FORBIDDENTranslations cannot target the store's default locale, the language of the statuses' own names.
-
400TRANSLATION_RESOURCE_ID_REQUIREDAt least one status ID is required.
-
400TRANSLATION_INVALID_RESOURCE_IDA status ID is not a UUID.
-
400TRANSLATION_RESOURCE_ID_NOT_IN_STOREA status does not exist in this store.
-
400ORDER_STATUS_TRANSLATION_SYSTEMA status is a system status: Tringify words it in every language.
-
400TRANSLATION_TOO_MANY_RESOURCESThe request exceeds the translation batch resource limit.
Batch set order status translations
Set order status translations for any languages in one call.
An order status translation is the name of one of the store's own (custom) statuses in another store language, addressed by the id that List order statuses returns. Customers see it on the order confirmation, order status and account pages in that language, and staff who use Tringify in that language see it in the order list and order details; without one, everyone sees the status's own name. System statuses (Pending payment, Processing, Completed, Cancelled) are worded by Tringify in every language and refuse translations with ORDER_STATUS_TRANSLATION_SYSTEM. Only name is translatable; it follows the rules of a status name (not blank, at most the order statuses limit's name_max_length characters, no control characters). A translation written against an earlier name is reported outdated. Store Admin, the Tringify mobile app, standard AI Translator jobs, translation CSV (resource order_status) and MCP translate the same names. Each change sends order_statuses/translations/update, or order_statuses/translations/delete when a translation is cleared. Each row is one order status in one language: id, locale (any enabled non-default store locale) and fields. Rows for several languages can be mixed in one call; send at most 100 rows (one row = one order status in one locale) and at most one row per order status and locale. Each row is saved on its own: a failing row never stops the others. Empty values clear the matching field translation; omitted fields keep their translation. Every row is validated exactly like the single translation endpoint. The response has totals (rows, saved, failed) and one results entry per row in request order: {id, locale, status} with status saved or failed. A failed row carries the full error (code, message, details); its codes are the single endpoint's codes plus TRANSLATION_ROW_DUPLICATE. A saved rich-text row whose unsafe markup was removed lists warnings. A top-level code and message give the outcome: TRANSLATIONS_SAVED (200, every row saved), TRANSLATIONS_PARTIALLY_SAVED (200, success: true; the message counts saved and failed rows and names the failure reasons, e.g. "2 saved, 1 failed. No source text found for the requested fields (description).") TRANSLATIONS_NOT_SAVED_RETRY (503 with a Retry-After header, success: false; no row saved because every row failed only with TRANSLATION_WRITE_BUSY, so the same call can be sent again after error.details.retry_after_seconds) or TRANSLATIONS_NOT_SAVED (422, success: false; no row saved and at least one row failed for another reason). Both carry the same totals and results in error.details. With an Idempotency-Key, repeating the same request re-applies nothing that already saved and retries the failed rows. A write waits at most 2 seconds for other translation writes of the same item or of a clashing name or slug (for example a translation CSV import writing the same language); writes of other items, types and languages never wait. A row or call that fails with TRANSLATION_WRITE_BUSY (HTTP 503) saved nothing: send it again after error.details.retry_after_seconds (the call's Retry-After header says the same). Every row or call either saved or reports an error; none is left in an unknown state.
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Idempotency-Key
|
string |
Optional key for this translation write. Reuse it only with the same payload when repeating the request. |
Body parameters
| Name | Type | Description |
|---|---|---|
translations
required
|
array<object> |
Up to 100 rows shaped as {id, locale, fields}. The only allowed field key is |
Errors
-
401UNAUTHORIZEDAuthorization header missing, malformed, or token invalid/expired.
-
402SUBSCRIPTION_REQUIREDThe store does not have an active or trialing subscription.
-
403STORE_API_SCOPE_REQUIREDToken is valid but lacks the required scope for this call.
-
429RATE_LIMITEDThe token's request allowance is exhausted. Retry after the Retry-After header.
-
400STORE_API_INVALID_REQUEST_BODYThe body is not valid JSON or a row has an unknown key or a wrongly typed value.
-
400TRANSLATION_NO_WRITES_PROVIDEDtranslations is empty.
-
400TRANSLATION_TOO_MANY_ROWSMore than 100 rows; nothing is written.
-
503TRANSLATIONS_NOT_SAVED_RETRYNo row saved and every row failed only with
TRANSLATION_WRITE_BUSY: send the same request again aftererror.details.retry_after_seconds(also theRetry-Afterheader).error.detailsalso hastotalsand oneresultsentry per row with its error. -
422TRANSLATIONS_NOT_SAVEDNo row saved and at least one row failed with an error that sending again will not fix;
error.detailshastotalsand oneresultsentry per row with its error. -
400STORE_API_BODY_PROPERTY_UNKNOWNThe body has a property this request does not accept. The message and
error.details.propertieslist the allowed and required properties (nestedfor each object or list of objects). -
400STORE_API_BODY_PROPERTY_INVALIDA body property has the wrong type (
error.details.expected_type). The message anderror.details.propertieslist the allowed and required properties.
Get an order status translation
Fetch one order status name in another store language.
An order status translation is the name of one of the store's own (custom) statuses in another store language, addressed by the id that List order statuses returns. Customers see it on the order confirmation, order status and account pages in that language, and staff who use Tringify in that language see it in the order list and order details; without one, everyone sees the status's own name. System statuses (Pending payment, Processing, Completed, Cancelled) are worded by Tringify in every language and refuse translations with ORDER_STATUS_TRANSLATION_SYSTEM. Only name is translatable; it follows the rules of a status name (not blank, at most the order statuses limit's name_max_length characters, no control characters). A translation written against an earlier name is reported outdated. Store Admin, the Tringify mobile app, standard AI Translator jobs, translation CSV (resource order_status) and MCP translate the same names. Each change sends order_statuses/translations/update, or order_statuses/translations/delete when a translation is cleared. Returns the stored name translation in the selected locale with is_outdated; a status without a translation in this locale returns an empty fields object. Fields without a translation in this locale are omitted from the response. An omitted field is not empty: shoppers see the store's base-language value, which the resource's own GET endpoint returns.
Path parameters
| Name | Type | Description |
|---|---|---|
id
required
|
uuid |
Order status ID. |
locale
required
|
string |
Enabled non-default store locale. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400TRANSLATION_LOCALE_NOT_ENABLEDLocale is not enabled for this store.
-
400TRANSLATION_DEFAULT_LOCALE_FORBIDDENTranslations cannot target the store's default locale, the language of the statuses' own names.
-
400TRANSLATION_INVALID_RESOURCE_IDThe status ID is not a UUID.
-
400TRANSLATION_RESOURCE_ID_NOT_IN_STOREThe status does not exist in this store.
-
400ORDER_STATUS_TRANSLATION_SYSTEMThe status is a system status: Tringify words it in every language.
Set an order status translation
Set or clear one order status name in another store language.
An order status translation is the name of one of the store's own (custom) statuses in another store language, addressed by the id that List order statuses returns. Customers see it on the order confirmation, order status and account pages in that language, and staff who use Tringify in that language see it in the order list and order details; without one, everyone sees the status's own name. System statuses (Pending payment, Processing, Completed, Cancelled) are worded by Tringify in every language and refuse translations with ORDER_STATUS_TRANSLATION_SYSTEM. Only name is translatable; it follows the rules of a status name (not blank, at most the order statuses limit's name_max_length characters, no control characters). A translation written against an earlier name is reported outdated. Store Admin, the Tringify mobile app, standard AI Translator jobs, translation CSV (resource order_status) and MCP translate the same names. Each change sends order_statuses/translations/update, or order_statuses/translations/delete when a translation is cleared. Send an empty string to clear the translation; readers in that language then see the status's own name. A write waits at most 2 seconds for other translation writes of the same item or of a clashing name or slug (for example a translation CSV import writing the same language); writes of other items, types and languages never wait. A row or call that fails with TRANSLATION_WRITE_BUSY (HTTP 503) saved nothing: send it again after error.details.retry_after_seconds (the call's Retry-After header says the same). Every row or call either saved or reports an error; none is left in an unknown state.
Path parameters
| Name | Type | Description |
|---|---|---|
id
required
|
uuid |
Order status ID. |
locale
required
|
string |
Enabled non-default store locale. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Idempotency-Key
|
string |
Optional key for this translation write. Reuse it only with the same payload when repeating the request. |
Body parameters
| Name | Type | Description |
|---|---|---|
translations
required
|
object |
Field-keyed translation values. The only allowed field is |
Errors
-
400TRANSLATION_LOCALE_NOT_ENABLEDLocale is not enabled for this store.
-
400TRANSLATION_DEFAULT_LOCALE_FORBIDDENTranslations cannot target the store's default locale, the language of the statuses' own names.
-
400TRANSLATION_INVALID_RESOURCE_IDThe status ID is not a UUID.
-
400TRANSLATION_RESOURCE_ID_NOT_IN_STOREThe status does not exist in this store.
-
400ORDER_STATUS_TRANSLATION_SYSTEMThe status is a system status: Tringify words it in every language.
-
400STORE_API_INVALID_REQUEST_BODYRequest body must be a JSON object containing only documented fields; error.details.field identifies an unknown field.
-
400TRANSLATION_FIELDS_REQUIREDtranslationsmust containname. -
400TRANSLATION_FIELD_NOT_TRANSLATABLEA field other than
namewas sent. -
400INVALID_INPUTThe translation breaks a status name rule (blank after trimming, longer than
name_max_length, or control characters); the message says which. -
400ORDER_STATUS_NAME_NO_ALNUMThe translation has no letter or digit.
-
503TRANSLATION_WRITE_BUSYAnother write of the same status translation was saving; nothing was saved. Send it again after
error.details.retry_after_seconds. -
503TRANSLATION_WRITE_BUSYOther translation writes held the item or a clashing name or slug for more than 2 seconds; nothing was saved. Send the request again after
error.details.retry_after_seconds(also theRetry-Afterheader). -
400STORE_API_BODY_PROPERTY_UNKNOWNThe body has a property this request does not accept. The message and
error.details.propertieslist the allowed and required properties (nestedfor each object or list of objects). -
400STORE_API_BODY_PROPERTY_INVALIDA body property has the wrong type (
error.details.expected_type). The message anderror.details.propertieslist the allowed and required properties.