Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the Translate API page →
Utilities & AI

Translate API & Scraper

The Translate API returns machine translation as clean JSON.

7 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 creditsMCP-ready
Get a free keyOpen in playground

🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.

The primary translate endpoint returns translated text with the detected source language and confidence, and you can translate to multiple targets, detect a language, look up a dictionary, list languages and get speech. It is built for localization, chat apps and content pipelines that need translation from one endpoint. One ReefAPI key, one shared credit pool, the standard envelope.

Reference

The language codes that are not the ones you would guess

Most codes here are the ISO 639-1 code you expect. A handful are not, because this vocabulary keeps several legacy codes, and an unrecognized code is rejected outright rather than silently ignored. Every row below was measured: the working code returned a translation, the plausible-looking one returned INVALID_PARAM.

Use thisLanguageThis is rejected
iwHebrew — measured: 'good morning' → בוקר טובhe
zh-CNChinese (Simplified)zh
zh-TWChinese (Traditional)zh-Hant
tlFilipinofil
jwJavanesejv
ckbKurdish (Sorani) — ku on its own is Kurmanji—
mni-MteiMeiteilon (Manipuri)mni
nsoSepedi—
gomKonkanikok

Our own parameter documentation says friendly aliases such as 'zh' and 'he' are accepted. Measured, they are not — both returned INVALID_PARAM. We are correcting the doc; in the meantime, treat this table as the truth and call the languages action to get the full authoritative list rather than trusting an ISO cheat sheet.

Live example

Real request and response JSON

Captured from the indexed primary action, translate, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/translate/v1/translate",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "text": "Hello, how are you?",
    "target": "es"
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "translate",
    "endpoint": "translate",
    "mode": "live",
    "latency_ms": 687,
    "record_count": 1,
    "bytes": 135,
    "cache_hit": false,
    "source": "google_translate",
    "truncated": false,
    "charged_credits": 1,
    "version": "1.0.0"
  },
  "data": {
    "text": "¿Hola, cómo estás?",
    "source_text": "Hello, how are you?",
    "source": "en",
    "target": "es",
    "detected_source": "en",
    "detection_confidence": 0.9896,
    "source_language_name": "English",
    "target_language_name": "Spanish"
  }
}
Actions

What the Translate API does

ActionDescriptionConcrete use caseKey params
translateTranslate text into a single target language. Auto-detects the source by default and returns the detected language + confidence. Supports every script.Ops teams call translate to get translate text into a single target language.text, target, source
translate_multiTranslate the SAME text into MANY target languages in a single call — the multi-target differentiator. Pass up to 60 target codes; returns a translation for each, fanned out concurrently (≈15× faster than calling translate per language).Developer tools call translate_multi to get translate the SAME text into MANY target languages in a single call.text, targets, source
translate_batchTranslate MANY strings into ONE target language in a single call — built for catalogue work (product titles, spec values, category names). Send up to 500 strings as an array and get an array back in the SAME order, index for index. Costs ONE upstream call regardless of how many strings you send, so a 500-title page is one request instead of 500. Items the upstream could not translate are listed in `failed[]` with a reason and come back as text:null — never as an empty string and never silently dropped.Validation workflows call translate_batch to get translate MANY strings into ONE target language in a single call.texts, target, source
detectDetect the language of a piece of text. Returns the detected language code, its name and a confidence score (0-1). Works on any script.Data-quality teams call detect to detect the language of a piece of text.text
dictionaryWord-level dictionary lookup: translate a word/short phrase and get its meanings grouped by part of speech, synonyms, back-translations and transliteration (romanization). Best for single words or short phrases.Ops teams call dictionary to get word-level dictionary lookup.text, target, source
languagesList all supported languages (code → English name). Useful to populate a language picker or validate a code before translating.Developer tools call languages to list all supported languages (code → English name).none
speakText-to-speech: turn text into spoken audio (MP3). Pronounces the text in the chosen language's voice/accent — works with every script (Chinese, Japanese, Arabic, Cyrillic, Turkish…). Long text is split and joined into a single MP3. Returns the audio base64-encoded inline (audio/mpeg), so no second download is needed. Pair it with 'translate' to get spoken translations.Validation workflows call speak to get text-to-speech.text, lang, slow
Code samples

Call translate from your stack

curl -X POST https://api.reefapi.com/translate/v1/translate \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"text":"Hello, how are you?","target":"es"}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.translate.translate with {"text":"Hello, how are you?","target":"es"}.
Use cases

Who uses this API and why

  • Chat apps call translate to render messages in a user's language in real time.
  • Localization pipelines use translate_multi to produce many locales at once.
  • Apps use detect and dictionary for language handling and definitions.
FAQ

Questions developers ask before integrating

Do I have to tell it the source language?

No — source defaults to auto and detection is returned alongside the result, so you never have to guess in advance. A measured translation of Turkish input into Japanese came back with detected_source 'tr', detection_confidence 1.0 and source_language_name 'Turkish' next to the translated text. If you already know the source, passing it explicitly skips detection and removes the small chance of a wrong guess on very short strings.

How do I translate one string into many languages efficiently?

translate_multi takes up to 60 target codes in one call and fans them out concurrently rather than making you loop. Note the response shape: translations is an object keyed by language code, not an array — a measured call returned translations.de, translations.ja, translations.ar and translations['zh-CN'], each with its own text and language_name, plus count 4 and errors null. Detection runs once for the shared source. If one target fails the others still return and the failure surfaces in errors.

Why does the dictionary's top-scored word differ from the translation?

Because they answer different questions and you will misread the response if you assume they agree. A measured dictionary lookup of 'run' into Spanish returned text 'correr' as the translation, while the highest-scoring verb entry was 'ejecutar' at 0.177 with 'correr' second at 0.074. The translation is the best fit for the string in isolation; the dictionary scores are corpus frequencies across all senses, and 'ejecutar' wins because software and legal usage dominate written text. Read text for a translation and the dictionary array for a thesaurus.

What exactly is the transliteration field?

The pronunciation of the input word, not of the translation. A measured lookup of English 'run' into Spanish returned transliteration 'rən' — the English pronunciation, not how to say 'correr'. It is most useful in the other direction: pass a word in a non-Latin script and the field gives you a readable romanization of what you sent.

Is detect different from the detection inside translate?

It returns one extra thing you should be using. detect gives detected_source, language_name, confidence and is_reliable — that last boolean is a separate judgment from the score, so you do not have to invent a confidence threshold. A measured call on Czech returned cs with confidence 1.0 and is_reliable true. Short strings, product codes and mixed-language input are where confidence stays high while is_reliable goes false.

Is there a length limit?

5,000 characters per call. Longer input is truncated rather than rejected, and meta.truncated flags that it happened — check it, because a silently shortened translation looks perfectly fine until a customer reads the end of it. For long documents, split on sentence or paragraph boundaries and reassemble; splitting mid-sentence degrades quality noticeably in languages with different word order.

Can I get audio instead of text?

Yes. speak is text-to-speech and returns MP3 audio for text in any supported language, so a single key covers both translation and voice — the usual pairing being translate the string, then speak the result in the target language. Every script is handled the same way; the engine does not require Latin input at any point.

What is the Translate API?

Translate API is a ReefAPI endpoint group for translate It returns live JSON through POST requests under /translate/v1.

Is the Translate API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. Translate calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Translate login or account?

No login to Translate is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the Translate data?

The page example is captured from a live translate call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the Translate API use?

Translate actions currently cost 1 credit per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.

Can I call Translate from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call translate actions with the same key, credit pool and JSON envelope used by normal REST requests.

Is the Translate API a Translate scraper?

It is the managed alternative to a DIY Translate scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same translate back as clean JSON.

docs / translate

Translate

Translate

base /translate/v17 endpoints
post/translate/v1/translate1 credit

Translate text into a single target language. Auto-detects the source by default and returns the detected language + confidence. Supports every script.

ParameterAllowed / rangeDescription
textrequired—The text to translate. Plain UTF-8 — any script works (Latin, Chinese, Japanese, Arabic, Cyrillic…). Up to 5000 characters per call; longer input is truncated and flagged in meta.truncated.
targetrequiredaf · sq · am · ar · hy · as · ay · az · bm · eu · be · bn · bho · bs · bg · ca · ceb · ny · zh-CN · zh-TW · co · hr · cs · da · dv · doi · nl · en · eo · et · ee · tl · fi · fr · fy · gl · ka · de · el · gn · gu · ht · ha · haw · iw · hi · hmn · hu · is · ig · ilo · id · ga · it · ja · jw · kn · kk · km · rw · gom · ko · kri · ku · ckb · ky · lo · la · lv · ln · lt · lg · lb · mk · mai · mg · ms · ml · mt · mi · mr · mni-Mtei · lus · mn · my · ne · no · or · om · ps · fa · pl · pt · pa · qu · ro · ru · sm · sa · gd · nso · sr · st · sn · sd · si · sk · sl · so · es · su · sw · sv · tg · ta · tt · te · th · ti · ts · tr · tk · ak · uk · ur · ug · uz · vi · cy · xh · yi · yo · zuTarget language code to translate INTO (e.g. 'es', 'fr', 'ja', 'ar'). Must be one of the supported codes (see the 'languages' action). Friendly aliases like 'zh' or 'he' are accepted.
source = autooptional—Source language code (ISO-639-style, e.g. 'en', 'de', 'zh-CN'). Defaults to 'auto' — the language is detected automatically and returned as detected_source. See the 'languages' action for codes.
Try in playground →
post/translate/v1/translate_multi1 credit

Translate the SAME text into MANY target languages in a single call — the multi-target differentiator. Pass up to 60 target codes; returns a translation for each, fanned out concurrently (≈15× faster than calling translate per language).

ParameterAllowed / rangeDescription
textrequired—The text to translate. Plain UTF-8 — any script works (Latin, Chinese, Japanese, Arabic, Cyrillic…). Up to 5000 characters per call; longer input is truncated and flagged in meta.truncated.
targetsrequired—List of target language codes to translate the SAME text into, in ONE call (e.g. ['es','fr','de','ja','ar']). Accepts a JSON array or a comma-separated string. Up to 60 targets; unknown codes are rejected (never silently skipped).
source = autooptional—Source language code (ISO-639-style, e.g. 'en', 'de', 'zh-CN'). Defaults to 'auto' — the language is detected automatically and returned as detected_source. See the 'languages' action for codes.
Try in playground →
post/translate/v1/translate_batch1 credit

Translate MANY strings into ONE target language in a single call — built for catalogue work (product titles, spec values, category names). Send up to 500 strings as an array and get an array back in the SAME order, index for index. Costs ONE upstream call regardless of how many strings you send, so a 500-title page is one request instead of 500. Items the upstream could not translate are listed in `failed[]` with a reason and come back as text:null — never as an empty string and never silently dropped.

ParameterAllowed / rangeDescription
textsrequired—The strings to translate, as a JSON array — e.g. a page of product titles or spec values. Order is preserved: result[i] always corresponds to texts[i]. Up to 500 items and 100000 characters total per call, 5000 characters per item. NOTE: pass a real JSON array. A bare string is split on commas (gateway-wide behaviour for array parameters), which would cut a title like 'Trainers, size 42' into two items.
targetrequiredaf · sq · am · ar · hy · as · ay · az · bm · eu · be · bn · bho · bs · bg · ca · ceb · ny · zh-CN · zh-TW · co · hr · cs · da · dv · doi · nl · en · eo · et · ee · tl · fi · fr · fy · gl · ka · de · el · gn · gu · ht · ha · haw · iw · hi · hmn · hu · is · ig · ilo · id · ga · it · ja · jw · kn · kk · km · rw · gom · ko · kri · ku · ckb · ky · lo · la · lv · ln · lt · lg · lb · mk · mai · mg · ms · ml · mt · mi · mr · mni-Mtei · lus · mn · my · ne · no · or · om · ps · fa · pl · pt · pa · qu · ro · ru · sm · sa · gd · nso · sr · st · sn · sd · si · sk · sl · so · es · su · sw · sv · tg · ta · tt · te · th · ti · ts · tr · tk · ak · uk · ur · ug · uz · vi · cy · xh · yi · yo · zuTarget language code to translate INTO (e.g. 'es', 'fr', 'ja', 'ar'). Must be one of the supported codes (see the 'languages' action). Friendly aliases like 'zh' or 'he' are accepted.
source = autooptional—Source language code (ISO-639-style, e.g. 'en', 'de', 'zh-CN'). Defaults to 'auto' — the language is detected automatically and returned as detected_source. See the 'languages' action for codes.
Try in playground →
post/translate/v1/detect1 credit

Detect the language of a piece of text. Returns the detected language code, its name and a confidence score (0-1). Works on any script.

ParameterAllowed / rangeDescription
textrequired—The text to translate. Plain UTF-8 — any script works (Latin, Chinese, Japanese, Arabic, Cyrillic…). Up to 5000 characters per call; longer input is truncated and flagged in meta.truncated.
Try in playground →
post/translate/v1/dictionary1 credit

Word-level dictionary lookup: translate a word/short phrase and get its meanings grouped by part of speech, synonyms, back-translations and transliteration (romanization). Best for single words or short phrases.

ParameterAllowed / rangeDescription
textrequired—A word or short phrase to look up.
targetrequiredaf · sq · am · ar · hy · as · ay · az · bm · eu · be · bn · bho · bs · bg · ca · ceb · ny · zh-CN · zh-TW · co · hr · cs · da · dv · doi · nl · en · eo · et · ee · tl · fi · fr · fy · gl · ka · de · el · gn · gu · ht · ha · haw · iw · hi · hmn · hu · is · ig · ilo · id · ga · it · ja · jw · kn · kk · km · rw · gom · ko · kri · ku · ckb · ky · lo · la · lv · ln · lt · lg · lb · mk · mai · mg · ms · ml · mt · mi · mr · mni-Mtei · lus · mn · my · ne · no · or · om · ps · fa · pl · pt · pa · qu · ro · ru · sm · sa · gd · nso · sr · st · sn · sd · si · sk · sl · so · es · su · sw · sv · tg · ta · tt · te · th · ti · ts · tr · tk · ak · uk · ur · ug · uz · vi · cy · xh · yi · yo · zuTarget language code to translate INTO (e.g. 'es', 'fr', 'ja', 'ar'). Must be one of the supported codes (see the 'languages' action). Friendly aliases like 'zh' or 'he' are accepted.
source = autooptional—Source language code (ISO-639-style, e.g. 'en', 'de', 'zh-CN'). Defaults to 'auto' — the language is detected automatically and returned as detected_source. See the 'languages' action for codes.
Try in playground →
post/translate/v1/languages1 credit

List all supported languages (code → English name). Useful to populate a language picker or validate a code before translating.

Try in playground →
post/translate/v1/speak1 credit

Text-to-speech: turn text into spoken audio (MP3). Pronounces the text in the chosen language's voice/accent — works with every script (Chinese, Japanese, Arabic, Cyrillic, Turkish…). Long text is split and joined into a single MP3. Returns the audio base64-encoded inline (audio/mpeg), so no second download is needed. Pair it with 'translate' to get spoken translations.

ParameterAllowed / rangeDescription
textrequired—The text to speak aloud. Plain UTF-8 — any script works (Latin, Chinese, Japanese, Arabic, Cyrillic…). Up to 3000 characters; longer text is split into chunks and the audio is joined into one MP3. Longer input than that is truncated and flagged in meta.truncated.
langrequiredaf · sq · am · ar · hy · as · ay · az · bm · eu · be · bn · bho · bs · bg · ca · ceb · ny · zh-CN · zh-TW · co · hr · cs · da · dv · doi · nl · en · eo · et · ee · tl · fi · fr · fy · gl · ka · de · el · gn · gu · ht · ha · haw · iw · hi · hmn · hu · is · ig · ilo · id · ga · it · ja · jw · kn · kk · km · rw · gom · ko · kri · ku · ckb · ky · lo · la · lv · ln · lt · lg · lb · mk · mai · mg · ms · ml · mt · mi · mr · mni-Mtei · lus · mn · my · ne · no · or · om · ps · fa · pl · pt · pa · qu · ro · ru · sm · sa · gd · nso · sr · st · sn · sd · si · sk · sl · so · es · su · sw · sv · tg · ta · tt · te · th · ti · ts · tr · tk · ak · uk · ur · ug · uz · vi · cy · xh · yi · yo · zuLanguage to pronounce the text in (e.g. 'en', 'es', 'ja', 'tr', 'ar'). Determines the voice/accent. Must be a supported code (see the 'languages' action). Friendly aliases like 'zh' or 'he' are accepted.
slow = falseoptional—Speak slowly (useful for language learning / clear pronunciation). Defaults to false (normal speed).
Try in playground →
Built for volume
5M+ requests a day

Measured at 60 requests a second across the fleet, with no central bottleneck. Volume pricing is on request, and per-key limits are raised for high-volume accounts.

Missing a source?
We build it

Tell us a site we do not cover yet and it becomes an engine. A customer asked for bestprice.gr on a Sunday and it was in the catalog the next day.

Support
2 minute median reply

Median time from a question in the live chat to the first answer, measured across every answered conversation. Setup help included, no support tier to buy.

One key, one balance
Every API included

No per-site plans and no separate subscriptions. One key and one credit pool across the whole catalog, so adding a source costs nothing up front.

Planning something large? Tell us the volume and the sources and we will come back with what it costs and what we would have to build.