One string, every language you ship in, one call
The Translate API returns machine translation as clean JSON.
7 active endpoints, on 0 and 1 credit tiers.
- POST/translate/v1/translate
- POST/translate/v1/translate_multi
- POST/translate/v1/translate_batch
- POST/translate/v1/detect
- POST/translate/v1/dictionary
- POST/translate/v1/languages
- POST/translate/v1/speak
What Translate endpoints does ReefAPI ship?
7 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.
Translate API
3 of 7 endpoints, ready to run
The translated text plus the detected source language, its confidence, and the full names of both languages.
{ "ok": true, "meta": { "api": "translate", "endpoint": "translate", "mode": "live", "latency_ms": 278.4, "record_count": 1, "cache_hit": false }, "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" } }
How the Translate API works
Translate is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.
No OAuth app, no request signing, no per-site account. One key covers all 184 engines.
Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.
Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.
One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.
Localising one transactional string for every market you ship to
A status message like 'Order shipped' has to exist in every language your storefront serves. Translating it one language at a time is the same string sent N times.
{"text": "Order shipped", "targets": ["de", "fr", "ja"]}Returns an object keyed by language code — de, fr and ja came back in one response, each with the translated text and the language name.
{"text": "bank", "source": "en", "target": "tr"}For the words that are ambiguous. Returns the alternatives with their parts of speech and a transliteration, which is what a single translated string cannot give you.
One credit per call rather than one per language, and the source language is detected in the same response, so a mixed-language input table needs no pre-pass.
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"}'{
"ok": true,
"data": { … },
"meta": {
"api": "translate",
"endpoint": "translate",
"mode": "live",
"latency_ms": …,
"record_count": …
},
"error": null
}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 this | Language | This is rejected |
|---|---|---|
| iw | Hebrew — measured: 'good morning' → בוקר טוב | he |
| zh-CN | Chinese (Simplified) | zh |
| zh-TW | Chinese (Traditional) | zh-Hant |
| tl | Filipino | fil |
| jw | Javanese | jv |
| ckb | Kurdish (Sorani) — ku on its own is Kurmanji | — |
| mni-Mtei | Meiteilon (Manipuri) | mni |
| nso | Sepedi | — |
| gom | Konkani | kok |
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.
What the confidence score means, and where it flatters itself
Measured across languages and at the short end, where detection is hardest.
You never have to call detect first. A translate call returns the detected source language, its confidence and the full language names alongside the output, so a table of mixed-language rows can be processed in one pass.
The string 'ok' came back detected as English with high confidence and the reliability flag set true. There is not enough signal in two characters to justify that, and the score does not fall the way you would expect it to. Treat the reliability flag as a statement about the model's certainty, not about whether the input was long enough to be certain about — if you are routing on language, put your own minimum length in front of it.
Sending one string to three languages returned all three in a single response keyed by language code, each with its language name. This is the difference between one credit and three on the highest-volume thing a storefront does with translation.
Asking for a single ambiguous word returns the translated form, a transliteration, and the dictionary entries grouped by part of speech. A plain translation of an ambiguous word gives you one guess; this gives you the alternatives it chose between.
One hundred and thirty-three languages, retrievable as an endpoint so a dropdown does not have to be hardcoded. The same engine will also return spoken audio for a string, so a pronunciation or an accessibility flow does not need a second vendor.
What people build with Translate
The jobs this data is most often used for.
endpoints
credits per call
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.
What Translate data costs
The cheapest call here is 0 credits, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.
Full pricing →- 1,000 free credits on signup, no card
- One key, all 184 APIs, one credit pool
- Failed and blocked calls are never charged
- Credits roll over and never expire
Call it in two lines
Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.
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"}'import requests
r = requests.post(
"https://api.reefapi.com/translate/v1/translate",
headers={"x-api-key": REEF_KEY},
json={
"text": "Hello, how are you?",
"target": "es"
},
)
print(r.json()["data"])Have a question? We got answers.
The questions people actually ask before wiring up Translate.
Get a free key →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, and 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.
19 Utilities & AI APIs on the same key
One key, one credit pool, one response envelope. If you are pulling Translate, you are one call away from the rest of the category — no second contract, no second integration.
Need something this API does not do?
Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.
Try it on your own data before you pay anything
The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 183 APIs, and the same envelope everywhere.
Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-08-30.