Text Analysis — entry 010 of 14

LibreTranslate

Verified Sep 2026

LibreTranslate is the open-source machine-translation engine's hosted API, translating text across dozens of languages without routing data through a third-party cloud vendor. The public libretranslate.com instance now requires an API key issued through its billing portal, with a free tier plus metered paid plans for higher volume.

LibreTranslate is an open-source machine-translation engine. The hosted instance at libretranslate.com needs an API key to translate text, but three support endpoints answer with no key: the language list, a health check, and the frontend settings, which show the character limit.

translationopen-sourcenlpmachine-translation
AuthenticationAPI KeySign up with the provider to obtain credentials.
HTTPSSupportedTraffic is encrypted in transit.
CORSEnabledCallable directly from browser JavaScript.
PricingFreemiumA usable free tier exists, with paid plans for more volume.
FormatsJSONResponses can be requested as JSON.

GreatAPIs Score

Score81out of 100
Authentication15/25API key required
Pricing17/20Freemium tier available
Docs20/20Machine-readable spec file bundled
Formats9/15Single response format
Freshness20/20Verified within 6 months

Embed this badge

Scored 81 on greatapis.com
<a href="https://greatapis.com/api/libretranslate/"><img src="https://greatapis.com/badge/libretranslate.svg" alt="Scored 81 on greatapis.com"></a>

Auth quickstart

  1. POST /translate and POST /detect need a key. A live POST /translate this run with no key returned HTTP 400: {"error":"Visit https://portal.libretranslate.com to get an API key"}. A live POST /detect with no key returned the same HTTP 400 and error body.
  2. GET /languages, GET /health, and GET /frontend/settings need no key. Live calls this run to all three returned HTTP 200 with no credential sent.
  3. Get a key at portal.libretranslate.com, then send it as api_key in the JSON body of a /translate or /detect call. LibreTranslate's own docs put the key in the body, not in a header.
  4. Self-hosting removes the key requirement. LibreTranslate's own docs (docs.libretranslate.com/guides/manage_api_keys) say a self-hosted instance passes api_key only for a higher rate-limit quota, and that self-hosting needs the --api-keys flag before a key does anything at all. libretranslate.com is different: its docs say plainly, "If you need an API Key for libretranslate.com, you need to purchase it from here." The key gate is a policy of the hosted instance, not a limit of the open-source engine.
Stored keyNo key stored

Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.

Endpoints

misc3
GET/frontend/settingsRetrieve Frontend Settings
Responses
StatusDescriptionSchema
200frontend settingsfrontend-settings
GET/healthHealth Check
Responses
StatusDescriptionSchema
200Service is healthyhealth-response
POST/suggestSubmit a Suggestion to Improve a Translation
Responses
StatusDescriptionSchema
200Successsuggest-response
403Not authorizederror-response
translate4
POST/detectDetect Language of Text
Responses
StatusDescriptionSchema
200Detectionsdetections
400Invalid requesterror-response
403Bannederror-response
429Slow downerror-slow-down
500Detection errorerror-response
GET/languagesGet Supported Languages
Responses
StatusDescriptionSchema
200List of supported languageslanguages
POST/translateTranslate Text
Responses
StatusDescriptionSchema
200Translationtranslate
400Invalid requesterror-response
403Bannederror-response
429Slow downerror-slow-down
500Translation errorerror-response
POST/translate_fileTranslate a File
Responses
StatusDescriptionSchema
200Translated filetranslate-file
400Invalid requesterror-response
403Bannederror-response
429Slow downerror-slow-down
500Translation errorerror-response

Try it

Developer reference

Base URLhttps://libretranslate.com
Key endpoints
  • GET/languages
  • GET/health
  • POST/translate
  • POST/detect

Gotchas & limits

  • A missing key returns 400, not 401. A live POST /translate and POST /detect this run each returned HTTP 400 {"error":"Visit https://portal.libretranslate.com to get an API key"} rather than a 401 Unauthorized. Check the status text, not just the code, when you handle the error.
  • The key goes in the JSON body as api_key, not in a header. LibreTranslate's own docs (docs.libretranslate.com) show api_key as a POST body field alongside q, source, and target.
  • The character limit for translation is 2000, confirmed live this run from GET /frontend/settings ("charLimit":2000). The same endpoint confirms "keyRequired":true for the hosted instance.
  • CORS is wide open on every endpoint tested. A live GET /languages this run returned access-control-allow-origin: *, so a browser page can call it directly with no server proxy.
  • en's own target list includes en. A live GET /languages this run showed English's targets array listing en alongside every other language code, so a same-language "translation" is a valid call, not an error case to guard against.

Changelog

  • Sep 2026gained a docs link

See every tracked change ↗ ·Subscribe with RSS ↗