Translate once. Serve it forever, free.
LLM-quality translation for menus, catalogs and app content — with content-hash caching, so a string you've translated never costs you again.
Serve customers in their language — without re-paying for every view.
The first translation of a string is done by a state-of-the-art language model. Every identical request after that is served from your cache — instantly, and free.
Every language your customers speak
Serve menus and catalogs in any language without re-paying for every page view. Translate French today, add Japanese tomorrow — same content, same cache.
Your brand words stay yours
The glossary keeps names and trademarks exactly as written — your restaurant, product and brand names never come back "translated".
Costs you can predict
Only fresh text is metered; repeats are free forever. Your dashboard shows exactly how many characters you've used and how much the cache saved you.
A translation API you can reason about.
- →
sha256(text|lang|glossaryVersion)cache keys. A repeat translation is a database read, not a provider call — deterministic, and free on every plan. - →Batch endpoint sends only cache misses to the provider. Up to 100 items per request; duplicates inside one batch are translated — and metered — once.
- →Glossary edits version-bust stale entries automatically. A changed glossary bumps
glossaryVersion, so affected strings re-translate on their next request. No manual invalidation.
# One new dish, one the cache already knows. curl -s -X POST https://lingorelay.yagnotech.com/v1/translate \ -H "Authorization: Bearer sk_lr_YOUR_KEY" \ -H "content-type: application/json" \ -d '{ "projectId": "665f0c31a2b4c5d6e7f8a9b0", "targetLang": "fr", "items": [ { "id": "dish-1", "text": "Grilled salmon lemon butter" }, { "id": "dish-2", "text": "Dinify house salad" } ] }'
# 200 OK { "items": [ { "id": "dish-1", "text": "Grilled salmon lemon butter", "translated": "Saumon grillé au beurre citronné", "cached": false }, { "id": "dish-2", "text": "Dinify house salad", "translated": "Salade maison Dinify", "cached": true } ], "stats": { "cacheHits": 1, "providerCalls": 1, "charsTranslated": 27 } } # Run the exact same call again: # "stats": { "cacheHits": 2, "providerCalls": 0, # "charsTranslated": 0 }
Simple plans. Honest metering.
Only provider-translated characters count against your quota. Cached translations are free and unlimited on every plan — even when you're at your monthly cap, cached content keeps serving.
Starter
$29 CAD / month
200,000 translated characters / month
- Unlimited free cache hits
- Projects, glossaries & language detection
- Up to 100 items per batch request
- 300 requests / min
Growth
$79 CAD / month
1,000,000 translated characters / month
- Unlimited free cache hits
- Projects, glossaries & language detection
- Up to 100 items per batch request
- 300 requests / min
Scale
$199 CAD / month
5,000,000 translated characters / month
- Unlimited free cache hits
- Projects, glossaries & language detection
- Up to 100 items per batch request
- 300 requests / min
Prices in CAD. 14-day trial on every plan, no card. Hitting the cap returns 429 quota_exceeded — cached content keeps serving.
Questions, answered.
Which languages can it translate?
Any language the model speaks — effectively all major languages. You pick the target per request ("targetLang": "fr", "pt-br", "ja", …), and free language detection (POST /v1/detect) tells you what your source text is.
What counts against my quota?
Provider-translated characters only — cache hits are free and unlimited on every plan. If a request is served entirely from cache, it succeeds even when you're at your monthly cap.
How do I control quality?
Per-project glossaries pin brand names (keep) or force preferred terminology (translateTo), and the cache is deterministic — the same text, language and glossary version always returns the same stored translation. Review every cached entry, with hit counts, in the dashboard.
Can I bust the cache?
Yes — purge per language (or a project's whole cache) from the dashboard or via DELETE /v1/projects/:id/cache?targetLang=fr. Or simply edit the glossary: changes bump its version, and affected strings re-translate on their next request.
Stop paying to translate the same string twice.
Sign up, create a project, and make your first cached translation in minutes.