Machine translation API
Translation API for Europe
One HTTP call, 36 languages, billed per character. Built in Europe for teams that need translation inside their product, not another web app.
Create free account Read the docs
Преводът трябва да звучи като написан от човек.Bulgarian Překlad má znít, jako by ho napsal člověk.Czech En oversættelse skal lyde, som om et menneske skrev den.Danish Eine Übersetzung soll klingen, als hätte sie ein Mensch geschrieben.German Μια μετάφραση πρέπει να ακούγεται σαν να τη έγραψε άνθρωπος.Greek A translation should read as if a person wrote it.English Una traducción debe sonar como si la hubiera escrito una persona.Spanish Tõlge peaks kõlama nii, nagu oleks selle kirjutanud inimene.Estonian Käännöksen pitäisi kuulostaa siltä, että sen on kirjoittanut ihminen.Finnish Une traduction doit sonner comme si une personne l’avait écrite.French Ba cheart go mbeadh aistriúchán cosúil le rud a scríobh duine.Irish Prijevod bi trebao zvučati kao da ga je napisao čovjek.Croatian A fordításnak úgy kell hangoznia, mintha ember írta volna.Hungarian Þýðing á að hljóma eins og manneskja hafi skrifað hana.Icelandic Una traduzione deve suonare come se l’avesse scritta una persona.Italian Vertimas turi skambėti taip, tarsi jį būtų parašęs žmogus.Lithuanian Tulkojumam jāizklausās tā, it kā to būtu rakstījis cilvēks.Latvian Traduzzjoni għandha tinstema’ bħallikieku kitibha bniedem.Maltese Een vertaling moet klinken alsof een mens haar heeft geschreven.Dutch En oversettelse skal høres ut som om et menneske skrev den.Norwegian (Bokmål) Tłumaczenie powinno brzmieć tak, jakby napisał je człowiek.Polish Uma tradução deve soar como se tivesse sido escrita por uma pessoa.Portuguese O traducere trebuie să sune ca și cum ar fi scris-o un om.Romanian Preklad má znieť, akoby ho napísal človek.Slovak Prevod mora zveneti, kot da ga je napisal človek.Slovenian En översättning ska låta som om en människa skrivit den.Swedish Переклад має звучати так, ніби його написала людина.Ukrainian Bir çeviri, onu bir insan yazmış gibi okunmalıdır.Turkish Перевод должен звучать так, будто его написал человек.Russian Превод треба да звучи као да га је написао човек.Serbian Prijevod treba zvučati kao da ga je napisao čovjek.Bosnian Преводот треба да звучи како да го напишал човек.Macedonian Një përkthim duhet të tingëllojë sikur e ka shkruar një njeri.Albanian Una traducció ha de sonar com si l’hagués escrit una persona.Catalan Itzulpen batek pertsona batek idatzia balitz bezala entzun behar du.Basque Unha tradución debe soar como se a escribise unha persoa.Galician
01
Priced per character
No seats, no minimum spend, no annual commitment. Prepaid credit or a plan with included volume — you can switch at any time.
02
Your text is not our product
We never store the text you send in usage records. The translation cache can be switched off per team, and every processor is listed in the data processing agreement.
03
Drop-in for DeepL clients
Same parameters, same response shape, same auth header. Point your client at api.vizvuz.com, swap the key, and keep the rest of your code.
Five lines to your first translation
Send an array of up to 50 strings and a target language. Everything else is optional.
curl
curl -X POST https://api.vizvuz.com/v1/translate \
-H "Authorization: Bearer vz_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"text":["Hello world"],"target_lang":"DE"}'
PHP
$ch = curl_init('https://api.vizvuz.com/v1/translate');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer vz_live_xxxxxxxx', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode(['text' => ['Hello world'], 'target_lang' => 'DE']),
]);
$response = json_decode(curl_exec($ch), true);
echo $response['translations'][0]['text'];
JavaScript
const response = await fetch('https://api.vizvuz.com/v1/translate', {
method: 'POST',
headers: { Authorization: 'Bearer vz_live_xxxxxxxx', 'Content-Type': 'application/json' },
body: JSON.stringify({ text: ['Hello world'], target_lang: 'DE' }),
});
const { translations } = await response.json();
console.log(translations[0].text);
Python
import requests
response = requests.post(
"https://api.vizvuz.com/v1/translate",
headers={"Authorization": "Bearer vz_live_xxxxxxxx"},
json={"text": ["Hello world"], "target_lang": "DE"},
timeout=30,
)
print(response.json()["translations"][0]["text"])
Go
body, _ := json.Marshal(map[string]any{
"text": []string{"Hello world"},
"target_lang": "DE",
})
req, _ := http.NewRequest("POST", "https://api.vizvuz.com/v1/translate", bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer vz_live_xxxxxxxx")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
36 languages, 38 targets
Including British and American English and European and Brazilian Portuguese as separate targets.
- BG Bulgarian
- CS Czech
- DA Danish
- DE German
- EL Greek
- ES Spanish
- ET Estonian
- FI Finnish
- FR French
- GA Irish
- HR Croatian
- HU Hungarian
- IS Icelandic
- IT Italian
- LT Lithuanian
- LV Latvian
- MT Maltese
- NL Dutch
- NB Norwegian (Bokmål)
- PL Polish
- PT Portuguese
- RO Romanian
- SK Slovak
- SL Slovenian
- SV Swedish
- UK Ukrainian
- TR Turkish
- RU Russian
- SR Serbian
- BS Bosnian
- MK Macedonian
- SQ Albanian
- CA Catalan
- EU Basque
- GL Galician
Simple, published prices
Pay as you go costs €15.00 per million characters. Starter is €19.00 per month with 2,000,000 characters included. Business is €99.00 per month.
Frequently asked
How good is the output?
It is produced by a large language model with a translation-specific prompt, glossary enforcement and formality control. For European language pairs it is competitive with the established providers; test it with your own text before you commit — the demo above needs no account.
Where is my data processed?
The application, database and queue run in Germany. The translation engine provider may process the text in the EU or the US depending on configuration; the current setup is named in the data processing agreement, and transfers rely on the EU standard contractual clauses.
Can it keep my HTML intact?
Yes. Set tag_handling to html or xml and tags are preserved, attributes are left alone and only text nodes are translated. Document files such as DOCX and PDF are on the roadmap, not in the current release.
How much work is switching?
For most projects: two lines. Change the base URL to https://api.vizvuz.com/v1 and the key. The DeepL-Auth-Key header is accepted as well, so official DeepL client libraries usually work unmodified.
What are the request limits?
Up to 50 texts per request, up to 50,000 to 200,000 characters per request depending on plan, and 10 to 100 requests per second. Every response carries the current rate-limit headers.