Oxygen Translation API

Egyszerűen használható fordító API AI háttérrel. Tetszőleges külső rendszerből HTTP POST-tal hívható, és a beküldött szöveget vagy tartalmi objektumot fixen ezekre a nyelvekre fordítja: en, ro, sk, es, de, uk.

Egyszerű használat AI háttér JSON API Bearer token szükséges

Gyors linkek: https://oxygen-translate.datalight.hu/api/health | https://oxygen-translate.datalight.hu/openapi.json

Rövid összefoglaló

A szolgáltatás célja, hogy a lehető legegyszerűbben lehessen fordítást kérni. Nincs szükség a háttérrendszer ismeretére, elég elküldeni egy JSON body-t a POST /api/translate végpontra, és a szolgáltatás visszaadja ugyanazt a tartalmat a beállított célnyelveken.

A működés lépésről lépésre:

Végpontok

MetódusÚtvonalCélAuth
GET/Ez a részletes, ember által olvasható dokumentáció.nem kell
GET/openapi.jsonRészletes rendszerleírás az integrációhoz.nem kell
GET/api/healthEgyszerű healthcheck és futási metaadatok.nem kell
POST/api/translateFordítás kérése.igen

Hitelesítés

A POST /api/translate végpont Bearer tokennel védett.

Authorization: Bearer <TRANSLATE_API_TOKEN>

A hívó félnek semmilyen AI kulcsot vagy háttérmodellt nem kell ismernie. A technikai metaadatok csak admin tokennel látszanak.

Gyors indítás

Ha valaki a legrövidebb úton akarja integrálni:

  1. Küldjön egy POST kérést ide: https://oxygen-translate.datalight.hu/api/translate
  2. Adja át a Bearer tokent az Authorization headerben.
  3. Küldjön JSON body-t, amiben van legalább content vagy text.
  4. A fordításokat a válasz translations.en, translations.ro, translations.sk, translations.es, translations.de, translations.uk ágaiban kapja meg.

Támogatott bemeneti formátumok

A szolgáltatás többféle bemenetet fogad el, hogy ne kelljen minden rendszert pontosan ugyanarra a JSON szerkezetre átállítani.

1. Minimális szövegkérés

A legegyszerűbb forma, ha csak sima szöveg áll rendelkezésre.

{
  "text": "Ide jön a szöveg.",
  "language": "hu"
}

2. Egyszerű, lapos content objektum

A content önmagában is elég; a title és a facebook_title opcionális.

{
  "content": "Itt jön a teljes fordítandó szöveg.",
  "language": "hu"
}

3. Beágyazott item objektum

Ez jó akkor, ha a küldő rendszer már eleve objektumként kezeli a cikket vagy rekordot.

{
  "item": {
    "title": "Magyar cím",
    "facebook_title": "Magyar Facebook cím",
    "content": "A teljes magyar szöveg itt jön...",
    "language": "hu",
    "source_name": "Példa forrás",
    "source_url": "https://pelda.hu/cikk",
    "published_at": "2026-03-25T10:00:00Z"
  }
}

Mezőszintű szabályok

MezőKötelezőMegjegyzés
textnemHasználható akkor, ha csak sima fordítandó szöveg van.
contentigen, ha nincs textA tényleges fordítandó törzsszöveg.
titlenemTeljesen opcionális; ha nincs, üresen marad.
facebook_titlenemTeljesen opcionális; ha hiányzik és van cím, a fordított cím másolódhat ide.
languagenemForrásnyelv. Ha nincs megadva, a szolgáltatás auto-ként kezeli.
source_namenemMetaadat, változatlanul megy tovább a válaszba.
source_urlnemMetaadat, változatlanul megy tovább a válaszba.
published_atnemMetaadat, változatlanul megy tovább a válaszba.
categorynemHa van, passthrough mezőként visszakerül, de nem kötelező.

A szolgáltatás a fordítandó szöveget ebben a sorrendben keresi:

  1. item.content
  2. content
  3. text

A forrásnyelvet ebben a sorrendben keresi:

  1. source_language
  2. item.language
  3. language
  4. ha egyik sincs: auto

Alap limitértékek:

Mi történik a kérés után?

A szolgáltatás minden kérést ugyanarra a belső szerkezetre alakít. Ezután csak a title, facebook_title és content mezőket küldi tovább fordításra. A metaadatok nem módosulnak.

Fontos szabályok:

Sikeres válasz szerkezete

A sikeres válasz három fő részből áll:

{
  "ok": true,
  "source": {
    "title": "Példa cím",
    "facebook_title": "Példa cím",
    "content": "Eredeti szöveg",
    "language": "hu"
  },
  "translations": {
    "en": {
      "title": "Example title",
      "facebook_title": "Example title",
      "content": "Translated English text",
      "language": "en"
    },
    "ro": { "...": "..." },
    "sk": { "...": "..." },
    "es": { "...": "..." },
    "de": { "...": "..." },
    "uk": { "...": "..." }
  }
}

Admin tokennel a válasz meta blokkot is tartalmaz a provider, modell és usage adatokkal.

Hibakezelés

Minden hiba egységes JSON formában jön vissza:

{
  "ok": false,
  "error": {
    "code": "validation_error",
    "message": "item.content or text is required"
  },
  "meta": {
    "request_id": "..."
  }
}
HTTPKódTipikus ok
400invalid_requestÜres body vagy a body nem olvasható.
400invalid_jsonA kérés törzse nem érvényes JSON.
400validation_errorHiányzik a content vagy túl hosszú valamelyik mező.
401unauthorizedHiányzó vagy hibás Bearer token.
413payload_too_largeA body túl nagy.
429cf_ai_request_neuron_limit_exceededEgyetlen kérés becsült Cloudflare AI Neuron költsége túl nagy.
429daily_cf_ai_neuron_limit_exceededA napi Cloudflare AI Neuron keret elfogyott vagy a modellválasz átlépné.
429daily_ai_token_limit_exceededAz OpenAI fallback napi tokenkerete elfogyott vagy a modellválasz átlépné.
503rate_limiter_unavailableAz AI használati keret számlálója nem elérhető.
502translation_failedCloudflare AI vagy OpenAI oldali hiba, illetve hibás upstream válasz.

Integrációs példák

cURL minimális példával

curl -X POST "https://oxygen-translate.datalight.hu/api/translate" \
  -H "Authorization: Bearer <TRANSLATE_API_TOKEN>" \
  -H "Content-Type: application/json" \
  --data-binary @- <<'JSON'
{
  "text": "Ez egy magyar minta szöveg.",
  "language": "hu"
}
JSON

cURL cím + content példával

curl -X POST "https://oxygen-translate.datalight.hu/api/translate" \
  -H "Authorization: Bearer <TRANSLATE_API_TOKEN>" \
  -H "Content-Type: application/json" \
  --data-binary @- <<'JSON'
{
  "title": "Példa cím",
  "facebook_title": "Példa cím",
  "content": "Ez a teljes fordítandó szöveg.",
  "language": "hu"
}
JSON

JavaScript / Node.js

const response = await fetch("https://oxygen-translate.datalight.hu/api/translate", {
  method: "POST",
  headers: {
    Authorization: "Bearer YOUR_TRANSLATE_API_TOKEN",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    title: "Példa cím",
    facebook_title: "Példa cím",
    content: "Ez a teljes fordítandó szöveg.",
    language: "hu"
  }),
});

const data = await response.json();
if (!response.ok || !data.ok) {
  throw new Error(data?.error?.message || "A fordítás nem sikerült");
}

console.log(data.translations.en.content);

Python

import requests

payload = {
    "text": "Ez egy magyar szöveg.",
    "language": "hu",
}

response = requests.post(
    "https://oxygen-translate.datalight.hu/api/translate",
    headers={
        "Authorization": "Bearer YOUR_TRANSLATE_API_TOKEN",
        "Content-Type": "application/json",
    },
    json=payload,
    timeout=60,
)

data = response.json()
if response.status_code != 200 or not data.get("ok"):
    raise RuntimeError(data.get("error", {}).get("message", "A fordítás nem sikerült"))

print(data["translations"]["de"]["content"])

PHP

<?php
$payload = [
    "text" => "Ez egy magyar szöveg.",
    "language" => "hu",
];

$ch = curl_init("https://oxygen-translate.datalight.hu/api/translate");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer YOUR_TRANSLATE_API_TOKEN",
        "Content-Type: application/json",
    ],
    CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE),
]);

$raw = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$data = json_decode($raw, true);

Megjegyzések