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 2026-08-20

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 2026-08-20, 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

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