Zylang API
All the endpoints you need to translate your game into 30 languages. Try it in the Playground →
Quick Start
Create an Account
Sign up and log in.
Get an API Key
Create a new key from the Settings → API Keys page. The key is only shown once - copy it immediately!
Make Your First Translation
Copy and run the code below:
curl -X POST https://zylang-api.onrender.com/api/v2/translate \
-H "Content-Type: application/json" \
-H "X-API-Key: zylang_YOUR_KEY_HERE" \
-d '{
"text": "Game Over",
"target_lang": "tr",
"game_genre": "rpg"
}'{
"original": "Game Over",
"translated": "Oyun Bitti",
"target_lang": "tr",
"char_count": 10,
"tone_used": "casual",
"glossary_count": 0,
"string_type": "ui_label",
"classification": "UI",
"strategy": "standard",
"validation_passed": true,
"quality_score": 0,
"quality_passed": true
}Authentication
Zylang API supports two authentication methods:
Recommended API Key
For server-side integrations. Send the key as a header:
X-API-Key: zylang_abc123...JWT Token
With the token received after login. Mostly for web interface:
Authorization: Bearer eyJhbG...Rate Limits
| Tier | Daily Limit | Price |
|---|---|---|
| Free | 100 requests/day | Free |
| Indie | 2,000 requests/day | - |
| Studio | 10,000 requests/day | - |
POST /api/translate
v1 Simple single translation. Direct GPT translation without pipeline.
Request Body
text*target_lang*source_langgame_genregame_contexttonechar_limitgame_idcurl -X POST https://zylang-api.onrender.com/api/translate \
-H "Content-Type: application/json" \
-H "X-API-Key: zylang_YOUR_KEY" \
-d '{
"text": "Press any key to continue",
"target_lang": "tr",
"game_genre": "rpg",
"game_context": "ui",
"tone": "epic"
}'POST /api/v2/translate
v2 Recommended Smart translation with 5-layer pipeline. Includes Context Engine, strategy selection, validation, and repair.
Additional Parameters (on top of v1)
keyfile_pathtable_namecommentcurl -X POST https://zylang-api.onrender.com/api/v2/translate \
-H "Content-Type: application/json" \
-H "X-API-Key: zylang_YOUR_KEY" \
-d '{
"text": "You have been slain by {killer}!",
"target_lang": "tr",
"game_genre": "rpg",
"game_context": "combat",
"tone": "dark",
"key": "COMBAT_DEATH_MSG",
"file_path": "strings/combat.json",
"comment": "Death message shown when player dies"
}'{
"original": "You have been slain by {killer}!",
"translated": "{killer} tarafindan katledildin!",
"target_lang": "tr",
"char_count": 33,
"tone_used": "dark",
"glossary_count": 0,
"string_type": "combat_message",
"classification": "COMBAT",
"classification_method": "context_engine",
"strategy": "adaptive",
"strategy_notes": ["placeholder_detected: {killer}"],
"validation_passed": true,
"validation_issues": [],
"repair_attempts": 0,
"must_preserve": ["{killer}"],
"format_rules": ["preserve_placeholders"],
"quality_score": 0,
"quality_passed": true,
"quality_issues": []
}POST /api/v2/translate/review
Lazy Called separately AFTER translation. Returns quality score and improvement suggestions.
Request Body
original*translated*target_lang*source_langgame_genretonestrategyclassificationcurl -X POST https://zylang-api.onrender.com/api/v2/translate/review \
-H "Content-Type: application/json" \
-H "X-API-Key: zylang_YOUR_KEY" \
-d '{
"original": "Game Over",
"translated": "Oyun Bitti",
"target_lang": "tr",
"game_genre": "rpg",
"tone": "epic"
}'{
"quality_score": 85,
"quality_passed": true,
"quality_issues": [],
"improved_text": null
}POST /api/translate/batch
Multipart Batch translation by uploading a JSON or CSV file. Sent as form-data.
Form Parameters
file*target_lang*game_genregame_contextgame_idtone# strings.json contents:
# { "menu_play": "Play", "menu_quit": "Quit", "hud_health": "Health: {value}" }
curl -X POST https://zylang-api.onrender.com/api/translate/batch \
-H "X-API-Key: zylang_YOUR_KEY" \
-F "file=@strings.json" \
-F "target_lang=tr" \
-F "game_genre=rpg" \
-F "tone=epic"{
"status": "ok",
"translated": {
"menu_play": "Oyna",
"menu_quit": "Cikis",
"hud_health": "Can: {value}"
}
}Configuration Endpoints
To list supported languages, genres, tones, and contexts:
/api/config/languages- Supported languages/api/config/genres- Game genres/api/config/tones- Tone modes/api/config/contexts- ContextsError Codes
| Code | Meaning | Solution |
|---|---|---|
| 401 | Unauthorized | API key or JWT token missing/invalid |
| 403 | Forbidden | API key deactivated or wrong endpoint |
| 429 | Rate limit | Daily limit exceeded, try again tomorrow or upgrade tier |
| 400 | Bad request | Required field missing (text, target_lang) |
| 500 | Server error | Try again, contact support if issue persists |
SDK Examples
Ready-to-use code examples for integration with your game engine:
Unity (C#)
using UnityEngine;
using UnityEngine.Networking;
using System.Collections;
using System.Text;
public class ZylangTranslator : MonoBehaviour
{
private const string API_URL = "https://zylang-api.onrender.com/api/v2/translate";
private const string API_KEY = "zylang_YOUR_KEY";
public IEnumerator Translate(string text, string targetLang,
System.Action<string> onComplete)
{
var body = JsonUtility.ToJson(new TranslateReq {
text = text,
target_lang = targetLang,
game_genre = "rpg"
});
var request = new UnityWebRequest(API_URL, "POST");
request.uploadHandler = new UploadHandlerRaw(
Encoding.UTF8.GetBytes(body));
request.downloadHandler = new DownloadHandlerBuffer();
request.SetRequestHeader("Content-Type", "application/json");
request.SetRequestHeader("X-API-Key", API_KEY);
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
{
var res = JsonUtility.FromJson<TranslateRes>(
request.downloadHandler.text);
onComplete?.Invoke(res.translated);
}
}
[System.Serializable]
class TranslateReq {
public string text;
public string target_lang;
public string game_genre;
}
[System.Serializable]
class TranslateRes {
public string translated;
}
}Unreal Engine (C++ / Blueprint)
// ZylangSubsystem.h
#include "Http.h"
#include "Json.h"
void UZylangSubsystem::Translate(
const FString& Text, const FString& TargetLang,
TFunction<void(FString)> OnComplete)
{
auto Request = FHttpModule::Get().CreateRequest();
Request->SetURL(TEXT("https://zylang-api.onrender.com/api/v2/translate"));
Request->SetVerb(TEXT("POST"));
Request->SetHeader(TEXT("Content-Type"), TEXT("application/json"));
Request->SetHeader(TEXT("X-API-Key"), TEXT("zylang_YOUR_KEY"));
TSharedPtr<FJsonObject> Body = MakeShareable(new FJsonObject);
Body->SetStringField("text", Text);
Body->SetStringField("target_lang", TargetLang);
Body->SetStringField("game_genre", "rpg");
FString BodyStr;
TSharedRef<TJsonWriter<>> Writer =
TJsonWriterFactory<>::Create(&BodyStr);
FJsonSerializer::Serialize(Body.ToSharedRef(), Writer);
Request->SetContentAsString(BodyStr);
Request->OnProcessRequestComplete().BindLambda(
[OnComplete](FHttpRequestPtr, FHttpResponsePtr Response, bool) {
TSharedPtr<FJsonObject> Json;
TSharedRef<TJsonReader<>> Reader =
TJsonReaderFactory<>::Create(Response->GetContentAsString());
FJsonSerializer::Deserialize(Reader, Json);
OnComplete(Json->GetStringField("translated"));
});
Request->ProcessRequest();
}Godot (GDScript)
extends Node
const API_URL = "https://zylang-api.onrender.com/api/v2/translate"
const API_KEY = "zylang_YOUR_KEY"
func translate(text: String, target_lang: String) -> String:
var http = HTTPRequest.new()
add_child(http)
var headers = [
"Content-Type: application/json",
"X-API-Key: " + API_KEY
]
var body = JSON.stringify({
"text": text,
"target_lang": target_lang,
"game_genre": "rpg"
})
http.request(API_URL, headers, HTTPClient.METHOD_POST, body)
var result = await http.request_completed
var json = JSON.parse_string(result[3].get_string_from_utf8())
http.queue_free()
return json["translated"]
# Usage:
# var tr_text = await translate("Game Over", "tr")Python (General / CI Pipeline)
import requests
import json
API_KEY = "zylang_YOUR_KEY"
API_URL = "https://zylang-api.onrender.com/api/v2/translate"
def translate(text: str, target_lang: str, genre: str = "rpg") -> str:
response = requests.post(API_URL, json={
"text": text,
"target_lang": target_lang,
"game_genre": genre,
}, headers={
"X-API-Key": API_KEY,
})
response.raise_for_status()
return response.json()["translated"]
# For batch translation:
def translate_file(file_path: str, target_lang: str):
with open(file_path) as f:
strings = json.load(f)
translated = {}
for key, text in strings.items():
translated[key] = translate(text, target_lang)
with open(f"{file_path.replace('.json', '')}_{target_lang}.json", "w") as f:
json.dump(translated, f, ensure_ascii=False, indent=2)
# translate_file("strings/ui.json", "tr")JavaScript / TypeScript
const API_KEY = "zylang_YOUR_KEY";
const API_URL = "https://zylang-api.onrender.com/api/v2/translate";
async function translate(
text: string,
targetLang: string,
genre = "rpg"
): Promise<string> {
const res = await fetch(API_URL, {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": API_KEY,
},
body: JSON.stringify({
text,
target_lang: targetLang,
game_genre: genre,
}),
});
if (!res.ok) throw new Error(`Zylang API error: ${res.status}`);
const data = await res.json();
return data.translated;
}
// Usage:
// const tr = await translate("Game Over", "tr");Ready to go?
Test live with your key in the API Playground and see results instantly.
Go to API Playground →