Approve the plan and translate
Spends credits: the plan's measured word count at the chosen quality (standard: 1 word = 1 credit; lite: a third, rounded up) is reserved and settled at completion. Returns the initial progress with estimated_seconds_remaining — poll the translation with GET from here.
POST/v1/batches/{batch_id}/approve
Requires batches:create. This is the call that spends credits. Everything before it (creating, planning, refining) is free.
What it costs
The plan’s measured word count is reserved at the quality you choose, then settled against actual consumption when the translation completes.
| Quality | Cost | Availability |
|---|---|---|
standard | 1 credit per word | Every plan |
lite | A third of the words, rounded up | Paid plans |
Because the count is measured from the file rather than estimated, the reservation is the number you saw in the plan response. If the balance cannot cover it, the call fails with insufficient_credits and nothing is reserved.
Then poll
The response returns the initial progress, including estimated_seconds_remaining. From there, poll GET /v1/batches/{batch_id} rather than calling approve again. A second approval on a running translation fails with batch_not_awaiting_approval.
custom_instructions applies guidance to this batch only, on top of any workspace glossary. It does not change the plan, so it cannot change what gets translated, only how.
Response
Approve the plan and start translating
dataobjectrequiredrequest_idstringrequiredPossible codes: invalid_request, unknown_field, invalid_parameter, invalid_cursor
errorobjectrequiredrequest_idstringrequiredPossible codes: authentication_required, invalid_api_key, api_key_expired, api_key_revoked
errorobjectrequiredrequest_idstringrequiredPossible codes: insufficient_credits
errorobjectrequiredrequest_idstringrequiredPossible codes: insufficient_scope, feature_not_available, admin_required, file_retention_expired
errorobjectrequiredrequest_idstringrequiredPossible codes: batch_not_found, glossary_not_found, resource_not_found
errorobjectrequiredrequest_idstringrequiredPossible codes: glossary_already_exists, result_not_ready, batch_not_editable, no_plan_yet, batch_not_awaiting_approval
errorobjectrequiredrequest_idstringrequiredPossible codes: file_expired
errorobjectrequiredrequest_idstringrequiredPossible codes: request_too_large, file_too_large, result_too_large
errorobjectrequiredrequest_idstringrequiredPossible codes: language_not_supported, invalid_language_pair, glossary_term_limit_reached, glossary_limit_reached, invalid_glossary_terms, unsupported_format, file_fetch_failed, plan_invalid
errorobjectrequiredrequest_idstringrequiredPossible codes: rate_limited
errorobjectrequiredrequest_idstringrequiredPossible codes: internal_error
errorobjectrequiredrequest_idstringrequiredPossible codes: service_unavailable
errorobjectrequiredrequest_idstringrequired