Skip to content
Menu
All API groups

Translation

Catalog translation, review queue, glossary.

12 endpoints.

POST/v1/translate/backfill

Translate the catalog (or estimate cost with dry_run)

Needs a key or a dashboard session

Parameters

NameInTypeRequiredDescription
Idempotency-Keyheaderstring | nullnoUnique per logical write (8-255 chars). Retries with the same key are safe. · pattern ^[A-Za-z0-9_\-:.]{8,255}$

Request body application/json BackfillRequest

NameTypeRequiredDescription
target_localestringnodefault "ar" · pattern ^[a-z]{2}$
fields"name" | "description" | "category" | "attribute_name" | "attribute_value"[]no
scope"all" | "missing" | "stale"nodefault "missing"
product_idsstring[] | nullno
review_top_nintegernoAlso send the top N products to the review queue.default 0 · min 0 · max 5000
dry_runbooleannoOnly estimate count and cost.default false

Responses

GET/v1/translate/status

Translate Status

Needs a key or a dashboard session

Parameters

NameInTypeRequiredDescription
target_localequerystringnoA tenant locale, e.g. ar. · default "ar" · pattern ^[a-z]{2}$

Responses

GET/v1/translate/review

Review queue (with source, translation and quality checks)

Needs a key or a dashboard session

Parameters

NameInTypeRequiredDescription
statusquery"pending" | "machine" | "review" | "approved" | "rejected" | "human_edited" | "stale"nodefault "review"
cursorquerystring | nullnomax length 200
limitqueryintegernodefault 50 · min 1 · max 200

Responses

POST/v1/translate/review/bulk

Translate Review Bulk

Needs a key or a dashboard session

Request body application/json BulkReview

NameTypeRequiredDescription
idsstring[]yes
action"approve" | "reject"yes

Responses

POST/v1/translate/review/{translation_id}

Approve, reject or edit one translation (edit = human_edited, never overwritten)

Needs a key or a dashboard session

Parameters

NameInTypeRequiredDescription
translation_idpathstringyes

Request body application/json ReviewDecision

NameTypeRequiredDescription
action"approve" | "reject" | "edit"yes
textstring | nullnoRequired for edit; marks it human_edited.max length 20000

Responses

GET/v1/translate/export

Export approved translations as CSV or SQL (for stores without write-back)

Needs a key or a dashboard session

Parameters

NameInTypeRequiredDescription
formatquery"csv" | "sql_opencart" | "json"nodefault "csv"
target_localequerystringnoA tenant locale, e.g. ar. · default "ar" · pattern ^[a-z]{2}$

Responses

  • 200Successful Responsestring
GET/v1/translate/approved

Approved translations to write into the store (store modules poll this)

Needs a key or a dashboard session

For modules without a pull API (OpenCart, WooCommerce, Magento). Secret key. Returns rows approved or human-edited since the cursor, oldest first. After writing them, call POST /v1/translate/ack.

Parameters

NameInTypeRequiredDescription
localequerystringyesA tenant locale, e.g. ar. · pattern ^[a-z]{2}$
sincequerystring | nullnonext_cursor from the last call · max length 200
limitqueryintegernodefault 200 · min 1 · max 500

Responses

POST/v1/translate/ack

Mark translations as written into the store (sets written_back_at)

Needs a key or a dashboard session

Request body application/json TranslationAck

NameTypeRequiredDescription
idsstring[]yes

Responses

GET/v1/translate/glossary

Glossary List

Needs a key or a dashboard session

Parameters

NameInTypeRequiredDescription
cursorquerystring | nullnomax length 200
limitqueryintegernodefault 200 · min 1 · max 200

Responses

POST/v1/translate/glossary

Glossary Create

Needs a key or a dashboard session

Request body application/json GlossaryTermIn

NameTypeRequiredDescription
source_localestringyespattern ^[a-z]{2}$
target_localestringyespattern ^[a-z]{2}$
source_termstringyesmax length 300
target_termstring | nullnomax length 300
do_not_translatebooleannodefault false
case_sensitivebooleannodefault false
notestring | nullnomax length 1000

Responses

PUT/v1/translate/glossary/{term_id}

Glossary Update

Needs a key or a dashboard session

Parameters

NameInTypeRequiredDescription
term_idpathstringyes

Request body application/json GlossaryTermIn

NameTypeRequiredDescription
source_localestringyespattern ^[a-z]{2}$
target_localestringyespattern ^[a-z]{2}$
source_termstringyesmax length 300
target_termstring | nullnomax length 300
do_not_translatebooleannodefault false
case_sensitivebooleannodefault false
notestring | nullnomax length 1000

Responses

DELETE/v1/translate/glossary/{term_id}

Glossary Delete

Needs a key or a dashboard session

Parameters

NameInTypeRequiredDescription
term_idpathstringyes

Responses

Data shapes on this page

BackfillRequest

NameTypeRequiredDescription
target_localestringnodefault "ar" · pattern ^[a-z]{2}$
fields"name" | "description" | "category" | "attribute_name" | "attribute_value"[]no
scope"all" | "missing" | "stale"nodefault "missing"
product_idsstring[] | nullno
review_top_nintegernoAlso send the top N products to the review queue.default 0 · min 0 · max 5000
dry_runbooleannoOnly estimate count and cost.default false

BackfillEstimate

NameTypeRequiredDescription
productsintegeryes
fieldsintegeryes
estimated_cost_usdstringyes
jobJob | nullno

Job

A row of the shared `jobs` table. Poll GET /v1/jobs/{id} until status is terminal.

NameTypeRequiredDescription
idstringyes
kind"reindex" | "import" | "sync" | "translate_backfill" | "translate_writeback" | "export" | "data_export" | "data_delete" | "embed" | "synonym_mining"yes
status"queued" | "running" | "succeeded" | "failed" | "canceled"yes
progressnumbernodefault 0 · min 0 · max 1
created_atstring (date-time)yes
started_atstring (date-time) | nullno
finished_atstring (date-time) | nullno
resultobject | nullno
errorstring | nullno

TranslationStatusOut

NameTypeRequiredDescription
target_localestringyes
total_fieldsintegeryes
by_statusmap<string, integer>yes
human_editedintegeryes
cost_month_usdstringyes
watch_enabledbooleanyes
running_jobJob | nullno

Page_TranslationItem_

NameTypeRequiredDescription
dataTranslationItem[]yes
next_cursorstring | nullno
totalinteger | nullnoPresent when cheap to count.

TranslationItem

NameTypeRequiredDescription
idstringyes
product_idstringyes
field"name" | "description" | "category" | "attribute_name" | "attribute_value"yes
field_keystringno
source_localestringyes
target_localestringyes
source_textstringyes
translated_textstring | nullyes
ai_translatedbooleanyes
status"pending" | "machine" | "review" | "approved" | "rejected" | "human_edited" | "stale"yes
quality_scorenumber | nullno
quality_notesobjectnoe.g. brand/model/spec kept checks
updated_atstring (date-time)yes

BulkReview

NameTypeRequiredDescription
idsstring[]yes
action"approve" | "reject"yes

BulkReviewResult

NameTypeRequiredDescription
updatedintegeryes
skippedintegeryes

ReviewDecision

NameTypeRequiredDescription
action"approve" | "reject" | "edit"yes
textstring | nullnoRequired for edit; marks it human_edited.max length 20000

TranslationWritePage

NameTypeRequiredDescription
dataTranslationWriteItem[]yes
next_cursorstring | nullnoPass back as ?since= next time (store it).

TranslationWriteItem

An approved translation for a store module to write into the store (ADR 0012, write-back).

NameTypeRequiredDescription
idstringyesSend it back in POST /v1/translate/ack after writing.
product_idstringyes
field"name" | "description" | "category"yes
field_keystringnoCategory id for field=category.
localestringyes
textstringyes
source_hashstringyes
status"approved" | "human_edited"yes
updated_atstring (date-time)yes

TranslationAck

NameTypeRequiredDescription
idsstring[]yes

TranslationAckResult

NameTypeRequiredDescription
updatedintegeryes

Page_GlossaryTermOut_

NameTypeRequiredDescription
dataGlossaryTermOut[]yes
next_cursorstring | nullno
totalinteger | nullnoPresent when cheap to count.

GlossaryTermOut

NameTypeRequiredDescription
source_localestringyespattern ^[a-z]{2}$
target_localestringyespattern ^[a-z]{2}$
source_termstringyesmax length 300
target_termstring | nullnomax length 300
do_not_translatebooleannodefault false
case_sensitivebooleannodefault false
notestring | nullnomax length 1000
idstringyes
created_atstring (date-time)yes

GlossaryTermIn

NameTypeRequiredDescription
source_localestringyespattern ^[a-z]{2}$
target_localestringyespattern ^[a-z]{2}$
source_termstringyesmax length 300
target_termstring | nullnomax length 300
do_not_translatebooleannodefault false
case_sensitivebooleannodefault false
notestring | nullnomax length 1000

Deleted

NameTypeRequiredDescription
deletedbooleannodefault true
idstringyes