Skip to main content

Overview

If you are still emailing files around, you already feel the problem.

You have translation volume that no longer fits in an inbox. Files get sent back and forth, someone forgets to forward a notarization approval, and a status check means another email asking where things stand. Every manual step is a place where an order stalls and a customer waits.

The ABC Translations API moves that whole workflow into your own application. You submit files, create orders, approve notarized documents, request revisions, and pull finished translations through clean endpoints, so the work runs on your schedule instead of someone else's reply time. It covers professional document translation and certified translation with notarization, in 120+ languages, at $0.09 per word.

What you can build

  • Submit documents for certified or professional translation without leaving your app.
  • Track every order through its life cycle and receive webhook updates on each status change.
  • Approve notarized work, request revisions, and pull finished files on your own schedule.
  • Offer translation under your own brand with white-label order fields.

The API has two environments, a sandbox for testing and production for live applications. Every request runs over HTTPS; plain HTTP is refused rather than redirected. See Base URLs for both. Need higher limits, a security review, or help getting started? Talk to our team.

Quickstart

Five steps take you from nothing to a finished translation: get a token, upload a file, create an order, listen for the webhook, and download the result. Run the whole path in the sandbox before you go live.

1. Authenticate

Send your access token in the Authorization header on every request. See Authentication for how to issue and rotate tokens.

curl https://api.abctranslations.com/v1/languages \ -H "Authorization: Bearer <token>" \ -H "Accept: application/json"

2. Upload a file

Upload each document before you attach it to an order. The response carries the file id.

curl https://api.abctranslations.com/v1/files \ -H "Authorization: Bearer <token>" \ -F "type=source" \ -F "file=@school-documents.pdf"

3. Create an order

Attach the file IDs, set the language pair and services, and send an idempotency key so a retry can't double-charge.

curl https://api.abctranslations.com/v1/orders \ -H "Authorization: Bearer <token>" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: 7b3c1f9a-2d4e-4c8a-9f6b-1e2d3c4b5a6f" \ -d '{ "callback_url": "https://yourapp.com/webhooks/abc", "services": { "source_language": "es", "target_language": "en", "certification": true, "notarization": true }, "page_count": 2, "files": [2304778] }'

4. Receive the webhook

When the order changes status we POST a small JSON payload to your callback_url, so you never poll. See Webhooks for the event list and signature verification.

5. Download the translation

When the order reaches completed, request a signed download URL for each finished file. The URL expires after five minutes, so fetch it right away. See Downloading Files.

Key Concepts

Four objects model the whole workflow. Everything in the API Reference builds on them.

Object What it is
Order A unit of translation work. Holds the language pair, services, attached files, transactions, comments, and a status life cycle.
File A document tied to an order: a source to translate, a reference for context, a finished translation, or a revision. Stored encrypted and downloaded through short-lived signed URLs.
Revision A requested change to a finished translation, tracked through its own status flow.
Language A supported language with its ISO 639 code, used to set the source and target of an order.

A typical integration uploads Files, attaches them to an Order, follows the order through its life cycle by Webhook, downloads the finished files, and optionally opens a Revision.

Authentication

Every request authenticates with a bearer access token in the HTTP Authorization header. The token is scoped to your account and to a set of permissions, and all traffic must use HTTPS.

curl https://api.abctranslations.com/v1/orders \ -H "Authorization: Bearer <token>" \ -H "Accept: application/json"

Access Tokens

There are two ways to obtain a token. Both present the same Authorization: Bearer header, and both are scoped to the least privilege you grant them.

  • OAuth 2.0 client credentials (recommended for production). Exchange your client ID and secret for a short-lived access token, then refresh it before it expires. Use this for server-to-server integrations so a leaked token expires on its own.
  • Personal access tokens (quickstart and low volume). Generate a long-lived, rotatable token from your account page once our team enables tokens on your profile. Convenient to start with; rotate it on a schedule and revoke it immediately if it is exposed.

Request an OAuth access token

curl https://api.abctranslations.com/v1/oauth/token \ -H "Content-Type: application/json" \ -d '{ "grant_type": "client_credentials", "client_id": "<client_id>", "client_secret": "<client_secret>", "scope": "orders:read orders:write files:read files:write" }'
{ "access_token": "<token>", "token_type": "Bearer", "expires_in": 3600, "scope": "orders:read orders:write files:read files:write" }

Scopes

Grant a token only the permissions it needs. A request that uses a scope the token does not hold returns 403 Forbidden.

Scope Grants
orders:read List and retrieve orders
orders:write Create, cancel, and approve orders
files:read List, retrieve, and download files
files:write Upload and delete files
revisions:write Request and manage revisions
webhooks:write Manage webhook endpoints

Keep tokens safe

  • Treat a token like a password. Store it as a secret, never in client-side code, a repository, or a URL.
  • Prefer short-lived OAuth tokens in production; rotate personal access tokens on a schedule.
  • Revoke a token the moment it may have been exposed. Existing tokens keep working until they expire or you revoke them.

Base URLs

There are two environments: a sandbox for testing and production for live applications. Every endpoint uses the matching base URL.

Environment Base URL
Production https://api.abctranslations.com/v1
Sandbox https://sandbox.abctranslations.com/api/v1

Core Workflow

First you upload each file with its own POST request to the files endpoint. The API returns an ID for every file, and you pass those IDs in a POST to the orders endpoint to attach them to a new order.

Our team reviews the files and your notes, then assigns a translator, and the order status updates to in_progress. If the order needs notarization, you approve it through the approval endpoint before it is finalized.

Webhooks push real-time updates to you on every status change, so you never have to poll for progress. Files are stored on Amazon S3 with no public access, and downloads use a temporary signed URL that expires after five minutes.

Need a change after delivery? A revision endpoint handles that, and reference files for a revision upload the same way they do when you place an order.

Order Lifecycle

An order moves through a fixed sequence of statuses. Notarized orders pause at client_review and wait for your approval; orders without notarization run straight through. An order can be cancelled through the API only while it is still received.

received ─▶ in_progress ─▶ in_review ─▶ client_review* ─▶ approved ─▶ finalizing ─▶ completed └────────── (no notarization) ──────────┘ received ─▶ cancelled        (only while still in received) * notarized orders stop at client_review until you call the approval endpoint
Status Meaning
received Order placed and queued. Can still be cancelled through the API.
in_progress Assigned to a translator.
in_review Internal quality review.
client_review Waiting for your approval (notarized orders only).
approved You approved the notarized work; it resumes automatically.
finalizing Finished files are being prepared.
completed All files finalized and ready to download.
on_hold Paused; contact support for the reason.
cancelled Cancelled; translation work has stopped.

Revision Lifecycle

A revision tracks a post-delivery change through its own short flow.

requested ─▶ in_progress ─▶ in_review ─▶ completed

You can delete a revision while it is still requested. For any later status, contact support.

Conventions

Rules that hold across every endpoint: how to send requests, what comes back, the status and error codes, rate limits, pagination, idempotent retries, and how the API is versioned.

Requests

Send parameters as JSON with the Content-Type: application/json header. The one exception is a POST to the files endpoint, which expects form data with the Content-Type: multipart/form-data header.

A few fields, including order notes, comment body, and revision body, accept basic HTML tags: b, br, em, li, ol, p, s, u, and ul. Any other tag or attribute is stripped.

The API uses these HTTP verbs:

  • GET reads resources.
  • POST creates new resources.
  • PATCH modifies existing resources.
  • DELETE removes resources.

Responses

Every endpoint returns JSON with the Content-Type: application/json header. Timestamps are UTC in ISO 8601 format, and monetary amounts are integers in cents (USD).

Status Codes

Standard HTTP response codes tell you the outcome of each request, covering successful responses, client errors, and server errors.

Code Name Description
200 OK Request was successful, and the response contains data
201 Created Resource was successfully created
204 No Content Request was successful, but there is no response body
400 Bad Request The request was malformed or could not be understood
401 Unauthorized API token is missing or invalid
403 Forbidden API token is valid, but access is denied
404 Not Found The requested resource does not exist
413 Entity Too Large The request exceeds the allowed size limit
422 Unprocessable Entity Validation failed. The response includes error details
429 Too Many Requests The request rate limit has been exceeded
500 Internal Server Error The server encountered an unexpected error
503 Service Unavailable The server is temporarily unable to process the request

Error Messages

Any status code other than 204 returns a response object with more detail in the message key. When validation fails, the API returns a 422 status with an errors object, where each field name is a key and the messages come back as arrays. Nested fields use dot notation, as the example shows.

{ "message": "The given data was invalid.", "errors": { "services.source_language": [ "The source language field is required." ], "services.target_language": [ "The target language field is required." ] } }

Rate Limiting

Requests are capped at 60 per minute. Exceed the limit and you get a 429 status code. Every response includes headers with your current rate limit details. Lean on webhooks instead of polling to stay well under the limit.

Name Description
X-RateLimit-Limit Total number of requests allowed per minute.
X-RateLimit-Remaining Number of requests remaining in the current minute.
X-RateLimit-Reset Seconds until the current rate limit window resets.
Retry-After Seconds to wait before the rate limit resets after being exceeded.

Pagination

Endpoints that return multiple results are paginated, with a default of 60 items per page. You can raise per_page up to a maximum of 500 items. The response includes links and meta objects with the pagination details.

{ "data": [...], "links": { "first": "https://api.abctranslations.com/v1/orders?page=1", "last": "https://api.abctranslations.com/v1/orders?page=3", "prev": "https://api.abctranslations.com/v1/orders?page=1", "next": "https://api.abctranslations.com/v1/orders?page=3" }, "meta": { "current_page": 2, "from": 61, "last_page": 3, "path": "https://api.abctranslations.com/v1/orders", "per_page": 60, "to": 120, } }

Idempotency

Creating an order or uploading a file is not naturally safe to retry, so a dropped connection could leave you unsure whether the request went through. Send an Idempotency-Key header (any unique value, such as a UUID) on a POST and the API guarantees the operation runs at most once. Replaying the same key returns the original response instead of creating a duplicate.

POST https://api.abctranslations.com/v1/orders Idempotency-Key: 7b3c1f9a-2d4e-4c8a-9f6b-1e2d3c4b5a6f

Versioning

The API is versioned in the path; the current version is v1. Additive changes — new endpoints, new optional fields — ship without a version bump, so build clients to ignore fields they do not recognize. Any breaking change ships under a new path version.

When an endpoint or field is scheduled for removal, responses carry Deprecation and Sunset headers with the date it stops working, and the change is announced in the Changelog ahead of time.

Files & Transfer

Files are the documents that flow through an order: source files to translate, reference files for context, finished translation files, and revision files. This section covers how to get bytes in and out; the Files reference documents each endpoint in full.

Uploading Files

Upload each file with a multipart/form-data POST to the files endpoint before you attach it to an order. Every upload returns a file id you reference later. When possible, combine multi-page documents into a single file before upload. Uploads are capped at 100 MB; a larger request returns 413.

curl https://api.abctranslations.com/v1/files \ -H "Authorization: Bearer <token>" \ -F "type=source" \ -F "file=@school-documents.pdf"

Large Files

For files near the size limit or on an unreliable connection, upload in resumable chunks instead of a single request. Initialize an upload, send the file in parts, and the transfer picks up where it left off after an interruption rather than starting over. Each part is acknowledged before the next is sent, so a dropped connection costs you one chunk, not the whole file. Contact us to enable resumable uploads for your account.

Downloading Files

Files are encrypted and stored in an Amazon S3 bucket with no public access. To download one, request a temporary signed URL from the download endpoint. The URL grants secure, read-only access and expires after five minutes, so generate it right before you fetch the file rather than storing it.

GET https://api.abctranslations.com/v1/files/:file_id/download
{ "url": "https://abctranslations-files.s3.amazonaws.com/files/..." }

Webhooks

If you include a callback_url when you place an order, we send an HTTP POST to that URL on every status change, so you never have to poll. The request carries JSON in the body.

{ "id": 3290541, "order_number": "12543-5465123", "status": "completed", "updated_at": "2025-03-01T22:00:26Z" }

Events

These statuses trigger a notification:

  • in_progress: the order has been assigned to a translator.
  • client_review: the order needs your approval before it can be finalized.
  • completed: all files are finalized and ready to retrieve.
  • cancelled: the order has been cancelled and translation work has stopped.

Signature Verification

So your endpoint can trust that a callback came from us and was not tampered with, each request is signed. We send an X-ABC-Signature header containing an HMAC-SHA256 of the raw request body, keyed with your webhook signing secret. Recompute the HMAC over the body you receive and compare it to the header with a constant-time comparison; reject the request if they do not match. Always verify the signature before acting on a payload, and read the raw body before parsing it as JSON.

Delivery & Retries

When we POST to your URL, we listen for these status codes:

  • 200: the request succeeded, and we will not retry.
  • 406: the request was not accepted, and we will not retry.
  • For any other status code, we retry the POST with these delays: 15 minutes, 1 hour, 4 hours, 8 hours, and 48 hours.

Respond quickly with a 200 as soon as you have stored the event, then do the slow work afterward. Because a delivery can be retried, make your handler idempotent — key off the order id and status so a repeated delivery is harmless.

API Reference

The endpoints below are grouped by resource: Languages, Files, Orders, and Revisions. Each resource starts with its object schema, then lists every operation with its request, parameters, and example response. All paths use the production base URL https://api.abctranslations.com/v1; swap in the sandbox base while testing.

Languages

The API returns a list of supported languages with their ISO 639 codes and availability status. You use these codes when placing orders to set the source and target languages, across our 120+ languages.

Language Object

Field Type Description
code String ISO 639 language code
name String Language name
active Boolean Whether or not the language is currently active

List Languages

Retrieve the list of supported languages. The response includes the language codes you need when placing orders through the API, and returns an array of language objects.

Request

GET https://api.abctranslations.com/v1/languages

Response - 200

[ { "code": "ar", "name": "Arabic", "active": true }, { "code": "bg", "name": "Bulgarian", "active": true }, ... ] 

Files

The API lets you upload, manage, and retrieve the files tied to translation orders. Files can be source files for translation, reference materials, completed translations, or revisions. This section covers how to create, list, retrieve, download, and delete files, including file storage and access through temporary signed URLs.

File Object

Field Type Description
id Number File identifier
name String Name
type String Type of file - source, reference, translation or revision
size Number File size in bytes
download_url String Location for file download
created_at String Time and date when the file was created (UTC)

List Files

Retrieve a paginated list of files. The response includes a paginated array of file objects.

Request

GET https://api.abctranslations.com/v1/files

Request Parameters

Field Type Required Description
certified_from String N Filter by certified date, returning only those that were certified on or after the specified date
certified_to String N Filter by certified date, returning only those that were certified on or before the specified date
created_from String N Filter by created date, returning only those that were created on or after the specified date
created_to String N Filter by created date, returning only those that were created on or before the specified date
extension String N Filter by file extension; docx, pdf, xlsx, etc...
is_archived Boolean N Filter by archived status. Default is false
notarized_from String N Filter by notarized date, returning only those that were notarized on or after the specified date
notarized_to String N Filter by notarized date, returning only those that were notarized on or before the specified date
order Number N Filter by order ID
quote Number N Filter by quote ID
search String N Search by filename
sort String N Comma separated list of sort options; certified_at, created_at, extension, filename, notarized_at, size, type, and updated_at. Prepend `-` for descending order.
type String N Comma separated list of file type options; source, reference, translation, or revision.

Response - 200

{ "data": [ { "id": 2304778, "name": "School Documents.jpg", "type": "source", "size": 39099, "download_url": "https://api.abctranslations.com/v1/...", "created_at": "2025-02-17T15:51:11Z" }, ... ], "links": {...}, "meta": {...} }

Create a File

Upload a new file with a form data request using the Content-Type: multipart/form-data header. Uploads are capped at 100MB, and each file can be attached to only one resource after creation. Returns a file object.

File types

  • source: files to be translated. When possible, combine multi-page documents into a single file before upload.
  • reference: reference files that help the translator when attached to an order, or marked up files attached to a revision.

Request

POST https://api.abctranslations.com/v1/files
{ "file": {}, "type": "source" }

Request Parameters

Field Type Required Description
file Object Y File to be uploaded
type String Y Type of file - source or reference

Response - 201

{ "id": 2304778, "name": "School Documents.jpg", "type": "source", "size": 39099, "download_url": "https://api.abctranslations.com/v1/...", "created_at": "2025-02-17T15:51:11Z" }

Retrieve a File

Retrieve detailed information about a specific file. Returns a file object.

Request

GET https://api.abctranslations.com/v1/files/:file_id

Response - 200

{ "id": 2304778, "name": "School Documents.jpg", "type": "source", "size": 39099, "download_url": "https://api.abctranslations.com/v1/...", "created_at": "2025-02-17T15:51:11Z" }

Download a File

Generate a temporary download URL for a file. Files are encrypted and stored in an Amazon S3 bucket. This request returns a signed URL that gives secure access to download the file, and the URL expires after five minutes.

Request

GET https://api.abctranslations.com/v1/files/:file_id/download

Response - 200

{ "url": "https://abctranslations-files.s3.amazonaws.com/files/..." }

Response Attributes

Field Type Description
url String Temporary download URL

Delete a File

You can only delete a file that has not been attached to a quote or order. To delete other files, contact our support team.

Request

DELETE https://api.abctranslations.com/v1/files/:file_id

Response - 204

No Content

Orders

The API lets you create, manage, and track translation orders. An order holds details such as status, language pairs, services, attached files, transactions, and comments. This section covers how to list, retrieve, create, approve, and cancel orders so the flow fits your own workflow.

Order Object

Field Type Description
id Number Order identifier
order_number String Order number
order_url String Order URL for web app
reference String Customer-supplied internal reference (number, ID, etc.)
field1 String Client-supplied data for use in custom coversheets for white label services
field2 String Client-supplied data for use in custom coversheets for white label services
origin String Origin of the order - api or website
status String Current order status - received, in_progress, in_review, client_review, approved, finalizing, in_revision, completed, on_hold, or cancelled
source_language String ISO 639 source language code
target_language String ISO 639 target language code
total Number Order total in cents (USD)
received_at String Time and date when the order was placed (UTC)
review_at String Time and date when the order was available for review by the client (UTC)
approved_at String Time and date when the order was approved by the client (UTC)
completed_at String Time and date when the order was completed (UTC)
cancelled_at String Time and date when the order was cancelled (UTC)
services Array List of service objects
files Array List of file objects
transactions Array List of transaction objects
comments Array List of comment objects
revisions Array List of revision objects

Service Object

Field Type Description
name String Name
quantity Number Quantity ordered
price Number Price each in cents (USD)
discount Number Discount each in cents (USD)
total Number Total service price in cents (USD)

Transaction Object

Field Type Description
type String Type of transaction - charge or refund
amount Number Transaction amount in cents (USD)
description String Description of the transaction
payment_type String Type of payment - invoice
created_at String Time and date when the transaction was created (UTC)

Comment Object

Field Type Description
author String Name of the comment author
body String Comment body - basic HTML allowed
created_at String Time and date when the comment was created (UTC)

List Orders

Retrieve a paginated list of your orders. The response includes a paginated array of order objects.

Request

GET https://api.abctranslations.com/v1/orders

Request Parameters

Field Type Required Description
completed_from String N Filter by completed date, returning only those that were completed on or after the specified date
completed_to String N Filter by completed date, returning only those that were completed on or before the specified date
created_from String N Filter by created date, returning only those that were created on or after the specified date
created_to String N Filter by created date, returning only those that were created on or before the specified date
search String N Search by filename or customer reference
sort String N Comma separated list of sort options; completed_at, created_at, status, and updated_at. Prepend `-` for descending order.
source_language String N Filter by source language ISO 639 language code
target_language String N Filter by target language ISO 639 language code

Response - 200

{ "data": [ { "id": 3290112, "order_number": "55112-7859361", "order_url": "order/55112-7859361/mC18ihWVx...", "reference": "HN-2632", "field1": "John Anderson", "field2": "Feb 1, 2025", "origin": "api", "status": "completed", "source_language": "es", "target_language": "en", "total": 11270, "received_at": "2025-02-17T15:52:13Z", "review_at": "2025-02-17T09:15:22Z", "approved_at": "2025-02-17T11:43:35Z", "completed_at": "2025-02-17T14:04:50Z", "cancelled_at": null }, ... ], "links": {...}, "meta": {...} }

Create an Order

Create a new order. Upload your files first, since their IDs go in the files array of this request. Returns an order object.

Request

POST https://api.abctranslations.com/v1/orders
{ "reference": "HN-2632", "field1": "John Anderson", "field2": "Feb 1, 2025", "callback_url": "https://domain.com/webhooks", "notes": "<p>Please spell the last name Montanez.</p>", "services": { "source_language": "es", "target_language": "en", "certification": true, "expedited": true, "notarization": true, "currency_conversion": false, }, "page_count": 2, "files": [ 2304778 ] }

Request Parameters

Field Type Required Description
reference String N Your internal reference (number, ID, etc.)
field1 String N Data for use in custom coversheets for white label services
field2 String N Data for use in custom coversheets for white label services
callback_url String N Callback URL for webhooks
notes String N Notes for staff or translators - basic HTML allowed
services Object Y Specify the services you'd like to order
services.source_language String Y ISO 639 language code
services.target_language String Y ISO 639 language code
services.certification Boolean N If you would like certified translation service otherwise professional translation provided. - Default is false
services.expedited Boolean N If you would like expedited turnaround service. - Default is false
services.notarization Boolean N If you would like the certification notarized - only available with certified translation. - Default is false
services.currency_conversion Boolean N If you would like currency conversion - only available with certified translation. - Default is false
page_count Number Y* Number of pages in the order files (250 words per page) - required if services.certification is true
word_count Number Y* Number of words in the order files - required if services.certification is true
files Array Y List of file IDs - type must be either source or reference

Response - 201

{ "id": 3290112, "order_number": "55112-7859361", "order_url": "order/55112-7859361/mC18ihWVx...", "reference": "HN-2632", "field1": "John Anderson", "field2": "Feb 1, 2025", "origin": "api", "status": "completed", "source_language": "es", "target_language": "en", "total": 11270, "received_at": "2025-02-17T15:52:13Z", "review_at": "2025-02-17T09:15:22Z", "approved_at": "2025-02-17T11:43:35Z", "completed_at": "2025-02-17T14:04:50Z", "cancelled_at": null, "services": [ { "name": "Certified Translation", "quantity": 2, "price": 2495, "discount": 0, "total": 4990 }, { "name": "Expedited Turnaround", "quantity": 2, "price": 1495, "discount": 0, "total": 2990 }, { "name": "Notarization", "quantity": 1, "price": 1995, "discount": 0, "total": 1995 } ], "files": [ { "id": 2304778, "name": "School Documents.jpg", "type": "source", "size": 39099, "download_url": "https://api.abctranslations.com/v1/...", "created_at": "2025-02-17T15:51:11Z" }, { "id": 2304779, "name": "School-Documents-55112-7859361.pdf", "type": "translation", "size": 20748, "download_url": "https://api.abctranslations.com/v1/...", "created_at": "2025-02-17T13:04:13Z" } ], "transactions": [ { "type": "charge", "amount": 11270, "description": "Order Payment", "payment_type": "invoice", "created_at": "2025-02-17T16:01:26Z" } ], "comments": [ { "author": "Alexander M. Montanez", "body": "<p>Please spell last name Montanez.</p>", "created_at": "2025-02-17T15:52:13Z" } ], "revisions": [ { "id": 61233, "status": "completed", "body": "<p>School name is Canterbury School.</p>", "requested_at": "2025-02-17T12:22:57Z", "completed_at": "2025-02-17T13:04:13Z", "files": [] } ] }

Retrieve an Order

Retrieve detailed information about a specific order. Returns an order object.

Request

GET https://api.abctranslations.com/v1/orders/:order_id

Response - 200

{ "id": 3290112, "order_number": "55112-7859361", "order_url": "order/55112-7859361/mC18ihWVx...", "reference": "HN-2632", "field1": "John Anderson", "field2": "Feb 1, 2025", "origin": "api", "status": "completed", "source_language": "es", "target_language": "en", "total": 11270, "received_at": "2025-02-17T15:52:13Z", "review_at": "2025-02-17T09:15:22Z", "approved_at": "2025-02-17T11:43:35Z", "completed_at": "2025-02-17T14:04:50Z", "cancelled_at": null, "services": [ { "name": "Certified Translation", "quantity": 2, "price": 2495, "discount": 0, "total": 4990 }, { "name": "Expedited Turnaround", "quantity": 2, "price": 1495, "discount": 0, "total": 2990 }, { "name": "Notarization", "quantity": 1, "price": 1995, "discount": 0, "total": 1995 } ], "files": [ { "id": 2304778, "name": "School Documents.jpg", "type": "source", "size": 39099, "download_url": "https://api.abctranslations.com/v1/...", "created_at": "2025-02-17T15:51:11Z" }, { "id": 2304779, "name": "School-Documents-55112-7859361.pdf", "type": "translation", "size": 20748, "download_url": "https://api.abctranslations.com/v1/...", "created_at": "2025-02-17T13:04:13Z" } ], "transactions": [ { "type": "charge", "amount": 11270, "description": "Order Payment", "payment_type": "invoice", "created_at": "2025-02-17T16:01:26Z" } ], "comments": [ { "author": "Alexander M. Montanez", "body": "<p>Please spell last name Montanez.</p>", "created_at": "2025-02-17T15:52:13Z" } ], "revisions": [ { "id": 61233, "status": "completed", "body": "<p>School name is Canterbury School.</p>", "requested_at": "2025-02-17T12:22:57Z", "completed_at": "2025-02-17T13:04:13Z", "files": [] } ] }

Cancel an Order

Cancel an existing order. Only orders with a status of received can be canceled through the API. For orders with any other status, contact support.

Request

POST https://api.abctranslations.com/v1/orders/:order_id/cancel

Response - 204

No Content

Approve an Order

Approve an order that has a status of client_review.

Request

POST https://api.abctranslations.com/v1/orders/:order_id/approve

Response - 204

No Content

Revisions

Revisions let you request changes to a completed translation. This section covers how to create, retrieve, list, and delete revisions, including attaching reference files. Revisions follow a status flow so every change is tracked and processed.

Revision Object

Field Type Description
id Number Revision identifier
status String Current revision status - requested, in_progress, in_review, completed or on_hold
body String Revision body HTML
requested_at Number Time and date when the revision was requested (UTC)
completed_at String Time and date when the revision was completed (UTC)
files Array List of File objects

List Revisions

Retrieve a paginated list of your revisions, sorted in descending order by requested_at date. Returns a paginated list of revision objects.

Request

GET https://api.abctranslations.com/v1/orders/:order_id/revisions

Response - 200

{ "data": [ { "id": 61233, "status": "completed", "body": "<p>Please spell last name as Silvia.</p>", "requested_at": "2025-03-22T19:56:01Z", "completed_at": "2025-03-22T23:13:27Z", "files": [] }, { "id": 61234, "status": "completed", "body": "<p>School name is Canterbury School.</p>", "requested_at": "2025-02-17T12:22:57Z", "completed_at": "2025-02-17T13:04:13Z", "files": [ { "id": 23904338, "name": "ID Document.jpg", "type": "reference", "size": 80296, "download_url": "https://api.abctranslations.com/v1/...", "created_at": "2025-02-17T12:21:04Z" } ] } ], "links": {...}, "meta": {...} }

Create a Revision

Create a new revision request for an order. Upload any optional files first, since their IDs go in the files array of this request. Only files of type reference are accepted. Returns a revision object.

Request

POST https://api.abctranslations.com/v1/orders/:order_id/revisions
{ "body": "<p>School name is Canterbury School.</p>", "files": [ 23904338 ] }

Request Parameters

Field Type Required Description
body String Y Revision body - basic HTML allowed
files Array Y List of file IDs

Response - 201

{ "id": 61233, "status": "completed", "body": "<p>School name is Canterbury School.</p>", "requested_at": "2025-02-17T12:22:57Z", "completed_at": "2025-02-17T13:04:13Z", "files": [ { "id": 23904338, "name": "ID Document.jpg", "type": "reference", "size": 80296, "download_url": "https://api.abctranslations.com/v1/...", "created_at": "2025-02-17T12:21:04Z" } ] }

Retrieve a Revision

Retrieve detailed information about a specific revision request. Returns a revision object.

Request

GET https://api.abctranslations.com/v1/orders/:order_id/revisions/:revision_id

Response - 200

{ "id": 61233, "status": "completed", "body": "<p>School name is Canterbury School.</p>", "requested_at": "2025-02-17T12:22:57Z", "completed_at": "2025-02-17T13:04:13Z", "files": [ { "id": 23904338, "name": "ID Document.jpg", "type": "reference", "size": 80296, "download_url": "https://api.abctranslations.com/v1/...", "created_at": "2025-02-17T12:21:04Z" } ] }

Delete a Revision

Delete an existing revision request. Only revisions with a status of requested can be deleted through the API. For revisions with any other status, contact support.

Request

DELETE https://api.abctranslations.com/v1/orders/:order_id/revisions/:revision_id

Response - 204

No Content

SDKs & Samples

Every example in this reference is shown as a curl command you can copy and run. The same calls work from any HTTP client, and official SDKs wrap them in idiomatic methods for the most common languages.

Language Install
JavaScript / TypeScript npm install @abctranslations/api
Python pip install abctranslations
Java com.abctranslations:api
C# / .NET dotnet add package AbcTranslations.Api

The SDKs are generated from the API's OpenAPI specification, so they stay in step with this reference. Contact us for SDK access.

Resources for AI coding assistants

Point AI coding assistants at llms.txt, a concise, machine-readable map of the site and its services.

  • llms.txt — concise, machine-readable guide for coding assistants.

Samples

The same create-order call in several languages. Each sends the bearer token, a JSON body, and an idempotency key for safe retries.

cURL

curl https://api.abctranslations.com/v1/orders \ -H "Authorization: Bearer <token>" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: 7b3c1f9a-2d4e-4c8a-9f6b-1e2d3c4b5a6f" \ -d '{ "callback_url": "https://yourapp.com/webhooks/abc", "services": { "source_language": "es", "target_language": "en", "certification": true, "notarization": true }, "page_count": 2, "files": [2304778] }'

JavaScript / TypeScript

const res = await fetch("https://api.abctranslations.com/v1/orders", { method: "POST", headers: { "Authorization": `Bearer ${token}`, "Content-Type": "application/json", "Idempotency-Key": crypto.randomUUID(), }, body: JSON.stringify({ callback_url: "https://yourapp.com/webhooks/abc", services: { source_language: "es", target_language: "en", certification: true, notarization: true }, page_count: 2, files: [2304778], }), }); const order = await res.json();

Python

import uuid, requests res = requests.post( "https://api.abctranslations.com/v1/orders", headers={ "Authorization": f"Bearer {token}", "Idempotency-Key": str(uuid.uuid4()), }, json={ "callback_url": "https://yourapp.com/webhooks/abc", "services": {"source_language": "es", "target_language": "en", "certification": True, "notarization": True}, "page_count": 2, "files": [2304778], }, ) order = res.json()

Java

var body = """ {"callback_url":"https://yourapp.com/webhooks/abc", "services":{"source_language":"es","target_language":"en","certification":true,"notarization":true}, "page_count":2,"files":[2304778]} """; var request = HttpRequest.newBuilder() .uri(URI.create("https://api.abctranslations.com/v1/orders")) .header("Authorization", "Bearer " + token) .header("Content-Type", "application/json") .header("Idempotency-Key", UUID.randomUUID().toString()) .POST(HttpRequest.BodyPublishers.ofString(body)) .build(); var response = HttpClient.newHttpClient() .send(request, HttpResponse.BodyHandlers.ofString());

C#

using var client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new("Bearer", token); var payload = new { callback_url = "https://yourapp.com/webhooks/abc", services = new { source_language = "es", target_language = "en", certification = true, notarization = true }, page_count = 2, files = new[] { 2304778 }, }; using var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); content.Headers.Add("Idempotency-Key", Guid.NewGuid().ToString()); var response = await client.PostAsync("https://api.abctranslations.com/v1/orders", content); var order = await response.Content.ReadAsStringAsync();

Sandbox

Test your code in the sandbox environment first. Contact us to get your account approved, set up, and your access token generated. The sandbox mimics the normal life cycle of an order, and orders and revisions move to the next status automatically every two minutes. When an order leaves in_progress, we attach a single PDF file to it with a type of translation.

  • For orders that include notarization, the status flow is received, in_progress, client_review, approved, then completed. Once an order reaches client_review it stops there, and you must approve it with the order approval endpoint. After approval it resumes moving automatically.
  • For orders without notarization, the status flow is received, in_progress, then completed.
  • For revisions, the status flow is requested, in_progress, then completed.

Changelog

Dated, newest first. Additive changes are backward compatible; breaking changes ship under a new path version and are announced here ahead of their Sunset date.

Date Change
2026-06-01 Added OAuth 2.0 client-credentials tokens, scoped permissions, idempotency keys, webhook signatures, and resumable large-file uploads.
2025-02-01 Initial public release of the v1 API: Languages, Files, Orders, and Revisions.

Support & SLA

Document translation runs at $0.09 per word and certified pages at $24.10 per page, the same whether you order through the API or by hand. The sandbox is free to test against.

  • Get help: contact our team for onboarding, higher rate limits, SDK access, or a security review.
  • Status & uptime: production runs over HTTPS with monitored availability; ask us for the current status page and uptime targets.
  • Security & privacy: files are encrypted at rest with no public access, and downloads use short-lived signed URLs. See our security and privacy pages.

I purchased a translation on Friday and expected a 24-hour turnaround but also ordered a notary not knowing it wasn't part of the estimated time. Unsurprisingly I needed it immediately. I emailed support and within a few hours, it was completely signed and notarized! Hats off to y'all!

Luca A. Headshot
Luca Amato
English to Japanese

Amazing service! My translation was done in 2 hours. All done on time, the right way, and the price was very good! Highly recommend.

Raj N. Headshot
Raj Nair
English to Russian

I reached out to them last Friday for an emergency translation. They got back within the hour. ETA was 24 hours. Since it was a Friday, I expected Monday, but it was completed on Saturday. Accurate and on time, great job!

Amara F. Headshot
Amara Fofana
English to French

Phenomenal customer service. Fast responses and accurate translations. Very satisfied!

Eddie M. Headshot
Eddie Morales
English to Spanish

ABC Translations completed my request wonderfully. 24-hour turnaround even on a weekend. Impeccable quality. Notified me of a fee change before charging, outstanding!

Priya W. Headshot
Priya Wadhwa
English to Portuguese

Truly amazing experience. Easy process and great communication. Hard copies arrived on time. Would give a thousand stars!

Sofía C. Headshot
Sofía Castro
Spanish to Japanese

Fantastic experience starting with the price. Very easy submission process. Fast, helpful replies. Will return for future translations.

Mateo K. Headshot
Mateo Kovač
English to German

From quote to delivery, everything was professional and timely. Quality is commendable. I appreciate the space for translator notes. Very satisfied!

Yumik G. Headshot
Yumik Gonzalez
English to Simplified Chinese
Quality you can trust

Join 255,000+ happy customers

ABC Translations and its family of companies are proud to have delivered reliable, affordable, best-in-class translation and localization services to individuals, and global corporations and institutions for more than 25 years.

Submitted a 43 page doc, it was translated twice as fast as our previous vendor, and in-house loved it. Thanks ABC for amazing customer service and fast delivery of top notch translations.

Henrik J. Headshot
Henrik Jørvik
English to Romanian

I have used ABC Translations at two different occasions now and both translations has been perfect! I would truly recommend the company. Their customer service is nice and professional and the translation is accurate, well written with a very quick turnaround. Highly recommend!

Nadia R. Headshot
Nadia Rahman
English to Korean

Super happy with the experience. Smooth and efficient. I plan to use them again.

Omar D. Headshot
Omar Darwish
English to Arabic

Easy to work with. Real human communication. Accurate translations, even for technical terms. Always on time or early. Incredibly convenient.

Aisha V. Headshot
Aisha Vahid
German to Arabic

Used them many times for education/work docs. Great translation quality and speed. Appreciate the revision option even though I haven't needed it.

Rafael S. Headshot
Rafael Solano
English to French (Canadian)

Great experience. They were responsive and helpful. They guided me, didn't oversell services, and even saved me money. Timely delivery despite a holiday. Highly recommend!

Dmitri P. Headshot
Dmitri Petrenko
Ukrainian to English

Highly recommend using this service. Outstanding translation job and fast turnaround. Excellent and professional.

Mei T. Headshot
Mei Tanaka
English to Italian

Top of my list for fast, professional services. Best online interface I've used. Appreciate their speed and effectiveness. Highly recommend.

Chen H. Headshot
Chen Huang
Portuguese to Spanish
Quality you can trust

Join 255,000+ happy customers

ABC Translations and its family of companies are proud to have delivered reliable, affordable, best-in-class translation and localization services to individuals, and global corporations and institutions for more than 25 years.

Top of my list for fast, professional services. Best online interface I've used. Appreciate their speed and effectiveness. Highly recommend.

Chen Huang
Portuguese to Spanish

From quote to delivery, everything was professional and timely. Quality is commendable. I appreciate the space for translator notes. Very satisfied!

Yumik Gonzalez
English to Simplified Chinese

Used them many times for education/work docs. Great translation quality and speed. Appreciate the revision option even though I haven't needed it.

Rafael Solano
English to French (Canadian)

ABC Translations completed my request wonderfully. 24-hour turnaround even on a weekend. Impeccable quality. Notified me of a fee change before charging, outstanding!

Priya Wadhwa
English to Portuguese

Amazing service! My translation was done in 2 hours. All done on time, the right way, and the price was very good! Highly recommend.

Raj Nair
English to Russian

Great experience. They were responsive and helpful. They guided me, didn't oversell services, and even saved me money. Timely delivery despite a holiday. Highly recommend!

Dmitri Petrenko
Ukrainian to English

Submitted a 43 page doc, it was translated twice as fast as our previous vendor, and in-house loved it. Thanks ABC for amazing customer service and fast delivery of top notch translations.

Henrik Jørvik
English to Romanian

I reached out to them last Friday for an emergency translation. They got back within the hour. ETA was 24 hours. Since it was a Friday, I expected Monday, but it was completed on Saturday. Accurate and on time, great job!

Amara Fofana
English to French

I have used ABC Translations at two different occasions now and both translations has been perfect! I would truly recommend the company. Their customer service is nice and professional and the translation is accurate, well written with a very quick turnaround. Highly recommend!

Nadia Rahman
English to Korean

I purchased a translation on Friday and expected a 24-hour turnaround but also ordered a notary not knowing it wasn't part of the estimated time. Unsurprisingly I needed it immediately. I emailed support and within a few hours, it was completely signed and notarized! Hats off to y'all!

Luca Amato
English to Japanese

Easy to work with. Real human communication. Accurate translations, even for technical terms. Always on time or early. Incredibly convenient.

Aisha Vahid
German to Arabic

Fantastic experience starting with the price. Very easy submission process. Fast, helpful replies. Will return for future translations.

Mateo Kovač
English to German

Truly amazing experience. Easy process and great communication. Hard copies arrived on time. Would give a thousand stars!

Sofía Castro
Spanish to Japanese

Highly recommend using this service. Outstanding translation job and fast turnaround. Excellent and professional.

Mei Tanaka
English to Italian

Super happy with the experience. Smooth and efficient. I plan to use them again.

Omar Darwish
English to Arabic

Phenomenal customer service. Fast responses and accurate translations. Very satisfied!

Eddie Morales
English to Spanish

Frequently asked questions

Answers to common questions about authentication, placing orders, webhooks, security, the sandbox, rate limits, and revisions when you build on the ABC Translations API.

How do I get a personal access token and start calling the API?

Contact us so our team can approve and set up your account and enable tokens on your profile. Once tokens are enabled, you generate and manage your personal access token from your account page. Send it in the Authorization header with the type set to Bearer, and start in the sandbox before you point your code at production.

Your token gives full read and write access to your account, so store it like a password and keep it out of client-side code.

How do I create an order through the API once my files are uploaded?

Upload each file with a multipart POST to the files endpoint, which returns an ID for every file. Then POST to the orders endpoint with those file IDs in the files array, plus your language codes and any services such as certification or notarization. The call returns an order object you can track from there.

How do webhooks tell my app when a translation order changes status?

Include a callback URL when you create the order, and we POST a JSON payload to it on every status change, so you never have to poll. You get notified on in_progress, client_review, completed, and cancelled.

We expect a 200 or 406 back from your endpoint. For any other code we retry the POST at 15 minutes, 1 hour, 4 hours, 8 hours, and 48 hours.

How do I approve a notarized order that is waiting in client_review?

Orders that include notarization stop at the client_review status and wait for you. Call the order approval endpoint on that order to approve it, and the order resumes moving toward completed. Until you approve, the notarized work is not finalized.

How are my uploaded files secured, and how long do download links last?

Files are encrypted and stored in an Amazon S3 bucket with no public access. To download a finished translation, you request a signed URL from the download endpoint, and that URL expires after five minutes, so generate it right before you fetch the file.

Can I test the full order life cycle before going live?

Yes. The sandbox mimics a real order: statuses advance automatically every two minutes, and when an order leaves in_progress we attach a sample PDF of type translation. Notarized orders pause at client_review until you approve them, exactly as production does, so you can rehearse your whole integration first.

What are the rate limits, and how should my integration handle high volume?

Requests are capped at 60 per minute, and going over returns a 429 status. Every response carries headers with your current rate limit details so you can pace your calls. Lean on webhooks for status updates instead of polling, and use pagination with per_page up to 500 items to pull large result sets efficiently.

Document translation runs at $0.09 per word and certified pages at $24.10 per page, the same whether you order through the API or by hand. For higher limits or a larger rollout, contact us to talk through it.

Can I request a revision to a finished translation through the API?

Yes. POST to the revision endpoint for the order, describe the change in the body field, and attach any marked-up reference files by uploading them first and passing their IDs. Revisions follow the flow requested, in_progress, completed. You can delete a revision while it is still in the requested status; for any other status, contact support.