Skip to main content
Recent product change: API rate limits effective June 30, 2026 LILT is committed to delivering fast, reliable translation performance to every organization on our platform. To protect that shared experience and make sure no single workload can degrade service for others, we’ve adding per-organization rate limits to our document pretranslation and file-translation APIs, beginning June 30, 2026. These endpoints aren’t changing; we’ve simply introduced fair-use limits so capacity stays balanced across all our customers. Please note: All LILT Connectors are out of scope for these rate limits. These will only apply to the API.

Overview

Starting June 30, 2026, LILT is introducing per-organization rate limits on the following endpoints:
  • POST /v2/documents/pretranslate
  • POST /v2/translate/file
  • POST /v2/documents/files (only when the upload invokes MT - see exclusion note below)
Two independent limits apply to every organization: Requests that exceed either limit receive an HTTP 429 Too Many Requests response. This guide explains how to read the 429 response headers and restructure your integration to stay comfortably within these thresholds.

File uploads without Machine Translation (MT) are excluded

POST /v2/documents/files uploads a file - it does not, by itself, run machine translation (MT). Uploads that don’t invoke MT are not counted against the character-throughput limit: LILT evaluates each request’s translation cost and a non-MT upload is measured as zero characters, so it draws down neither your throughput budget. Only calls that actually consume MT (POST /v2/documents/pretranslate and POST /v2/translate/file, plus a /v2/documents/files upload that triggers pretranslation) count toward the 2,500,000-characters-per-minute limit. You can upload source files freely; batch and pace the translation calls that follow.

Understanding the 429 Response

When a request is rate-limited, LILT returns a 429 with three headers that tell you exactly when you can safely retry: The two limits are independent. You can hit the character throughput ceiling without exhausting your request count, or vice versa. Check both headers when handling a 429.

Example 429 response

Handling a 429: Retry with Back-Off

The simplest fix for an occasional 429 is to wait for the window to reset before retrying. Do not tight-loop or immediately re-send. This wastes quota and keeps triggering 429s. On receiving a 429:
  1. Read the X-RateLimit-Reset value from the response headers.
  2. Sleep for that many seconds (plus a small jitter to avoid synchronized retries across parallel workers).
  3. Re-send the original request.

Python example

Node.js example

Batching Requests

If your integration sends many small, individual translation calls in rapid succession, batching (combining multiple documents or files into fewer API calls) is the most effective way to stay well under the rate limits.

What to batch

Character throughput tipBatching reduces your request count, but each batch’s characters still count toward the 2,500,000 character-per-minute throughput limit. If you’re working with very large documents, spread batches across multiple windows rather than sending all characters at once.

Sizing your batches

There is no fixed rule for batch size — it depends on your document sizes and submission cadence. Use these guidelines as a starting point:
  • Keep each batch well under 2,500,000 characters to leave headroom for concurrent jobs from other parts of your organization.
  • If you are consistently close to the X-RateLimit-Remaining ceiling, reduce batch frequency or split large batches into smaller ones with a brief pause between them.
  • For burst workloads (e.g., end-of-sprint file exports), schedule submissions in staggered windows rather than all at once.

Pretranslation: batching document IDs

The POST /v2/documents/pretranslate endpoint accepts an array of document IDs. Instead of issuing one request per document, collect IDs and submit them together:
If you have hundreds of documents to pretranslate, split them into chunks and submit one chunk per window:

File translation: Uploading and batching by reference

The POST /v2/documents/files accepts one file per request. Additional files in a multipart body are silently ignored.  To translate many files, upload each one individually, then batch the downstream operation by passing the resulting IDs in a single call (e.g. an array of document IDs to POST /v2/documents/pretranslate, or multiple field query params to POST /v2/translate/file.)

Proactive Throttling

Rather than reacting to 429s, you can read X-RateLimit-Remaining and X-RateLimit-Reset on every successful response and slow down before you hit the ceiling.

Pre-Launch Checklist

Before June 30, verify that your integration:
  • Sends arrays of document IDs to /v2/documents/pretranslate rather than one ID at a time and arrays of file IDs to /v2/files/translation.
  • Groups related files into a single multipart/form-data request where possible.
  • Handles HTTP 429 by sleeping for X-RateLimit-Reset seconds (plus jitter) before retrying.
  • Does not tight-loop on 429 responses.
  • Monitors X-RateLimit-Remaining and throttles proactively when quota is low.
  • Schedules large burst workloads across multiple one-minute windows.

Need More Headroom?

The default thresholds are designed to sit well above typical usage patterns. If your workload genuinely requires higher limits, reply to the rate-limits notification email and the LILT team will work with you to find a configuration that fits your needs without impacting the shared platform.
Contact supportReach out via your rate-limits notification email, or contact LILT support at support.lilt.com. Please include your organization ID and a brief description of your workload volume when you get in touch.