14-day free trial · no card

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.

Set up in minutes Cancel anytime CAD pricing Live status: /api/health
For your business

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.

For developers

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.
POST /v1/translateAuthorization: Bearer sk_lr_…
# 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 }
Pricing

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
Start free →

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
Start free →

Prices in CAD. 14-day trial on every plan, no card. Hitting the cap returns 429 quota_exceeded — cached content keeps serving.

FAQ

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.

14-day free trial · no card

Stop paying to translate the same string twice.

Sign up, create a project, and make your first cached translation in minutes.