Every user reads every post.
One API call covers 30+ languages. The output reads the way someone in that language would actually write, not like a 2010 translator. Your users in Seoul or São Paulo get the same product as your users in London, just in the right language.
curl https://auto18n.com/api/v1/translate \
-H "X-API-Key: $AUTO18N_KEY" \
-d '{
"text": "You have 3 new messages.",
"targetLanguage": "ja"
}'
{
"translatedText":
"新しいメッセージが3件あります。",
"detectedLanguage": "en",
"cached": false,
"usage": {
"inputTokens": 152,
"outputTokens": 23,
"cost": 0.000055
}
}
{
"translatedText":
"新しいメッセージが3件あります。",
"detectedLanguage": "en",
"cached": true,
"usage": {
"inputTokens": 0,
"outputTokens": 0,
"cost": 0
}
}
Captured from a real API call. The second request is a cache hit: cost 0, returned in ~100ms.
Try it yourself
What your users see
These show in your language by default. Hit 'Show original' on any of them if you want to see what was actually written, then flip back. Nothing reloads.
Went to the new ramen shop in Shibuya for lunch today. The miso ramen was incredible! Worth the wait in line.
Just migrated our backend to Rust and latency dropped 4x. Never going back to Node for this kind of service.
The croissant from the bakery downstairs is so good I've stopped having breakfast anywhere else.
Just finished my first marathon. Two years of training for this. Still can't believe it.
Six months since the whole team went fully remote. Productivity is actually up and nobody has quit. Makes you wonder why we had an office.
Deploying at 5pm on a Friday. What could possibly go wrong.
Translate a post in one call
Send the text your users write, get it back in the reader's language. Translate inline as content is read, or backfill everything you've already got.
TypeScript SDK
Drop it into your post or chat render path. Zero dependencies, typed errors, Node 18+ and edge runtimes.
npm install auto18n
import Auto18n from "auto18n";
const a18n = new Auto18n({
apiKey: process.env.AUTO18N_API_KEY,
});
// translate a post into the reader's language
const { translatedText } = await a18n.translate({
text: post.body,
targetLanguage: reader.locale,
});Raw HTTP
One POST per post or message. Auth via header, JSON in, JSON out.
curl https://auto18n.com/api/v1/translate \
-H "X-API-Key: $AUTO18N_KEY" \
-d '{
"text": "lol that's so real",
"targetLanguage": "fr"
}'Bulk backfill
Already have years of posts? Send them in the background and we webhook you when the archive is done.
// backfill old posts, 200 at a time
const { jobId } = await a18n.translateBulk({
items: batch.map((p) => ({
text: p.body,
targetLanguage: "es",
})),
});Run your whole product in any language without hiring a localization team.
Whatever you throw at it (UGC, product copy, notifications, support tickets) goes through the same endpoint. The first request hits the model, the result gets cached, and every later request for that string is served from cache instead of being retranslated. You don't need a translator on payroll, and you don't need anyone reviewing routine strings.
Output doesn't sound like a 2015 Google Translate result. Casual posts stay casual when translated. Corporate notices keep their formal tone. The model uses surrounding context to pick up register instead of treating every sentence as a standalone.
Cache means you only pay once
Translate a string once and we keep it. Every later request for that same string costs nothing in translation; you only pay for the storage row, which works out to a fraction of a cent per entry per month.
Backfill everything you've already got
Years of posts and messages already in your database? Send them in bulk, up to 200 per job. Processing runs in the background and we ping your webhook when it's done. Bulk jobs get 10% off, and anything already cached is skipped instead of re-translated.
Test for free, pay when you ship
Test keys (sk_test_*) hit the real model and give you real output, but nothing is billed. Wire up your full integration against a test key and only swap to a live one when you're ready to ship.
Built for teams
API keys belong to the team, not the person who created them. Roles decide who can rotate keys or change billing, and you can invite the whole engineering org without each person setting up their own account.
Pricing that fits in your head
Pay per token, prepaid credits, no monthly minimum. Test keys are free and hit the real model.
At typical token ratios that works out to roughly $0.28 per million characters — Google Translate charges $20 for the same million.
Full pricing breakdown →See your first translation in 2 minutes
Sign up, copy the curl snippet from the docs, and you're done. There isn't really a step three.