BYTETOOLS

LibreTranslate API

Free open-source translation API: self-hostable machine translation across 30+ languages with no data sent to commercial providers. Tested curl example.

No API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 20 Aug 2026

What is the LibreTranslate API?

LibreTranslate is a free, open-source machine translation API supporting more than 30 languages. The public instance offers limited free access, and because it is fully self-hostable, you can run translation entirely on your own infrastructure.

LibreTranslate is the only serious open-source translation API, built on the Argos Translate engine. The public instance is rate-limited and increasingly requires a key, but the software itself is AGPL and runs anywhere.

Self-hosting is the real value proposition. If you are translating anything sensitive — internal documents, customer messages, medical or legal text — running LibreTranslate locally means the content never leaves your infrastructure, which no commercial translation API can offer.

Quick facts

Base URL
https://libretranslate.com
Authentication
The /languages endpoint is open. Translation on the public instance is rate-limited and may require a free key; self-hosted instances have no such limits.
Rate limit
Tight on the public instance — roughly 20 requests per minute. Unlimited when self-hosted.
Pricing
Free and open source (AGPL). The hosted instance sells API keys for higher limits.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the LibreTranslate API

Every request below was executed against the live API on 20 Aug 2026, and the response shown is the real body it returned — not an illustration.

1. List supported languages

GET https://libretranslate.com/languages

curl
curl 'https://libretranslate.com/languages'
JavaScript (fetch)
const res = await fetch("https://libretranslate.com/languages");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://libretranslate.com/languages", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
[
  {
    "code": "en",
    "name": "English",
    "targets": [
      "ar",
      "az",
      "bg",
      "bn",
      "ca",
      "cs",
      "da",
      "de",
      "el",
      "en",
      "eo",
      "es",
      "et",
      "eu",
      "fa",
      "fi",
      "fr",
      "ga",
      "gl",
      "he",
      "hi",
      "hu",
      "id",
      "it",
      "ja",
      "ko",
      "ky",
      "lt",
      "lv",
      "ms",
      "nb",
      "nl",
      "pt-BR",
      "pl",
      "pt",
      "ro",
      "ru",
      "sk",
      "sl",
      "sq",
      "sr",
      "sv",
      "sw",
      "th",
      "tl",
      "tr",
      "uk",
      "ur",
      "vi",
      "zh-Hans",
      "zh-Hant"
    ]
  },
  {
    "code": "sq",
    "name": "Albanian",
    "targets": [
      "ar",
      "az",
      "bg",
      "bn",
      "ca",
      "cs",
      "da",
      "de",
      "el",
      "en",
      "eo",
      "es",
      "et",
      "eu",
      "fa",
      "fi",
      "fr",
      "ga",
      "gl",
      "he",
      "hi",
      "hu",
      "id",
      "it",
      "ja",
      "ko",
      "ky",
      "lt",
      "lv",
      "ms",
      "nb",
      "nl",
      "pt-BR",
      "pl",
      "pt",
      "ro",
      "ru",
      "sk",
      "sl",
      "sq",
      "sr",
      "sv",
      "sw",
      "th",
      "tl",
      "tr",
      "uk",
      "ur",
      "vi",
      "zh-Hans",
      "zh-Hant"
    ]
  },
  {
    "code": "ar",
    "name": "Arabic",
    "targets": [
      "ar",
      "az",
      "bg",
      "bn",
      "ca",
      "cs",
      "da",
      "de",
      "el",
      "en",
      "eo",
      "es"

Parameters

ParameterTypeRequiredDescription
languagespathOptionalAll supported languages and their targets. languages
translatepathOptionalPOST endpoint for translation. translate
qstringOptionalText to translate, in the POST body. Hello world
source / targetstringOptionalLanguage codes, or `auto` for source detection. en
formatstringOptionaltext or html — html preserves markup. text

Response fields

[].codestring
Language code such as en or es.
[].namestring
Language name in English.
[].targetsarray
Which languages this one can translate into.
(translate) translatedTextstring
The translated output.
(translate) detectedLanguageobject
Detected source when using auto.

What you can build with the LibreTranslate API

  • Translate sensitive content without sending it to a third party
  • Add multilingual support to a self-hosted application
  • Build privacy-conscious translation features
  • Avoid per-character billing by self-hosting

Common errors and how to fix them

429 or 403 on the public instance

Public translation is tightly limited and may need a key.

Fix: Self-host — it is the intended deployment model and removes all limits.

Lower quality than commercial engines

Argos Translate is smaller than Google or DeepL models.

Fix: Acceptable for many uses, but evaluate on your own content before committing.

HTML markup mangled

The default format is plain text.

Fix: Pass format=html to preserve tags during translation.

LibreTranslate API — frequently asked questions

Is LibreTranslate free?

The software is free and open source under the AGPL. The public hosted instance is rate-limited and increasingly requires a key, but self-hosting is unlimited and free.

Why self-host a translation API?

Privacy. Translated text never leaves your infrastructure, which matters for internal documents, customer messages or regulated content — something no commercial translation API can offer.

How does translation quality compare with Google Translate?

Lower. It uses the smaller open Argos Translate models. Quality is acceptable for many purposes but you should evaluate it on your own content first.

Can it translate HTML without breaking the markup?

Yes, pass format=html and it preserves tags while translating the text content.

Tools that pair with this API

Alternatives to LibreTranslate API

If LibreTranslate does not fit, these text analysis apis cover similar ground. Every one was called before publishing, and each links to its own reference page with a working curl command and the response it returned.

APIWhat it doesAuthCORSLast verified
LanguageToolFree grammar and spell checking API with no key: detect spelling, grammar and style errors in 25+ languages with suggested corrections. Tested GET and POST.No keyYes19 Aug 2026
MyMemory TranslationFree translation API with no key: machine translation plus a human translation memory across 100+ language pairs. 5,000 words/day anonymously. Tested.No keyYes19 Aug 2026
PurgoMalumFree profanity filter API with no key: remove or mask offensive words from text, with custom word lists and configurable replacement characters. Tested.No keyYes19 Aug 2026
EmojiHubFree emoji API with no key: random or filtered emoji with names, categories, groups, HTML entity codes and Unicode code points. Tested curl example.No keyNo20 Aug 2026
RhymeBrainFree rhyming dictionary API with no key: rhymes scored and ranked, with syllable counts and frequency, plus portmanteau and word-info functions. Tested example included.No keyYes21 Aug 2026
text-processing.com SentimentFree sentiment analysis API with no key: POST a block of text, get back a positive, negative or neutral label with probabilities for each class. Tested example included.No keyNo21 Aug 2026
All Text Analysis APIs

LibreTranslate is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 20 Aug 2026; always check the official documentation before relying on this API in production, as terms and limits can change.