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.

Request
curl https://auto18n.com/api/v1/translate \
  -H "X-API-Key: $AUTO18N_KEY" \
  -d '{
    "text": "You have 3 new messages.",
    "targetLanguage": "ja"
  }'
First call
{
  "translatedText":
    "新しいメッセージが3件あります。",
  "detectedLanguage": "en",
  "cached": false,
  "usage": {
    "inputTokens": 152,
    "outputTokens": 23,
    "cost": 0.000055
  }
}
Same call again
{
  "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.

$0.28
per million characters translated
Google Translate charges $20
33
languages through one endpoint
$0
for repeat strings — cache hits are free
2 min
from signup to first translation

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.

田中 美咲@misaka_t
2h

Went to the new ramen shop in Shibuya for lunch today. The miso ramen was incredible! Worth the wait in line.

Originally in Japanese
C
Carlos Mendes@carlosdev
4h

Just migrated our backend to Rust and latency dropped 4x. Never going back to Node for this kind of service.

Originally in Portuguese
L
Léa Dubois@lea_dbs
6h

The croissant from the bakery downstairs is so good I've stopped having breakfast anywhere else.

Originally in French
S
Sofía Ramírez@sofiruns
9h

Just finished my first marathon. Two years of training for this. Still can't believe it.

Originally in Spanish
김 지후@jihoo_k
12h

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.

Originally in Korean
M
Markus Weber@mweber_dev
1d

Deploying at 5pm on a Friday. What could possibly go wrong.

Originally in German

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.

Input$0.225 / 1M tokens
Output$0.90 / 1M tokens
Bulk jobs−10%
BYOK platform fee$0.10 / 1M tokens
Cached repeats$0

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.