Skip to main content
This guide shows how to send foreign-language documents for translation, approve the price, and download the translated files. Webhooks tell your system when each stage finishes.

Before you begin

You need:
  • An Internal app API key (sk-...) with the files:write, quotes:write, quotes:approve, orders:read, documents:read, and webhooks:manage scopes. See Authentication.
  • Net-terms invoicing on your account to approve quotes through the API. Contact support to turn it on.
  • A webhook endpoint subscribed to quote.*, order.*, and file.*. See Webhooks to set one up.
Need an evaluation of foreign-language credentials? You don’t need a separate translation order. Create an evaluation quote with translation_preference: "translation_service" and we translate the documents as part of the evaluation.
1

Send the documents

Upload each file you want translated:
If the documents live on your own storage, ingest them by URL instead. We download them in the background and send file.ready (or file.failed) for each one:
Wait until every file is ready before you create the quote. You can also skip this step and pass the URLs in document_urls.
2

Create a translation quote

Set quote_type to translation and name the language of the source documents:
The quote is created in status requested:
Translation fields:You can give a language as its English name (Spanish), or as an ISO 639-1 (es) or ISO 639-2 (spa) code. The quote returns it in a normalized form, such as spanish. If we don’t recognize a value, we keep it as you sent it and our team confirms it when pricing the quote.If your documents are in more than one language, create one quote per source language.
3

Review the price

Our team reviews each document and prices the quote. When it’s priced, the quote moves to awaiting_payment and you receive quote.ready. The documents on the quote carry what we found, including page_count, word_count, and the detected source_language:
4

Approve the quote

Approval creates the order (ord_...) and bills it to your open invoice. You receive quote.approved and order.created.
5

Collect the translations

You receive order.in_progress when a translator starts and order.completed when the translations are delivered. Fetch the order and pick the documents whose document_role is translation:
Then request a download URL for each translation. The URL is valid for one hour:

Handle the events

This handler follows a translation from upload to delivery. It records progress on your case, then downloads each translation when the order completes. It uses verifyFortisSignature from the webhooks guide.
Deliveries can arrive out of order or more than once. Deduplicate on the X-Fortis-Delivery header, and fetch the order when you need its current state.

How a webhook reaches you

Every event is signed. If your endpoint is down, we retry with backoff until it answers:
See Webhooks for the signature scheme, retry schedule, and endpoint requirements.