Documentația dezvoltatorului

Creați cu API-ul Wordly.

Utilizați o cheie API pe partea de server, faceți solicitări HTTPS și urmăriți fiecare apel printr-un model previzibil de facturare bazat pe credit. Această referință documentează punctele finale disponibile în prezent în producție și marchează clar punctele finale care sunt încă în curs de pregătire.

API version v1Format JSONTransport Numai HTTPSSold liber 50 creditsOpenAPI Descărcați schemaPostman CollectionPostman Environment

Pornire rapidă

Creați un cont gratuit, verificați-vă e-mailul folosind codul din șase cifre și copiați cheia API afișată o dată în tabloul de bord pentru dezvoltatori.

  1. 1
    Creați un cont

    Înregistrați-vă doar cu o adresă de e-mail și o parolă.

  2. 2
    Verificați-vă adresa de e-mail

    Introdu codul trimis de [email protected]. Verification grants 50 free credits.

  3. 3
    Stocați-vă cheia API

    Copiați cel generat wly_live_... cheie și păstrați-o într-o variabilă de mediu pe partea serverului.

  4. 4
    Faceți o cerere de testare

    Apelați punctul final al contului pentru a verifica autentificarea și a vedea soldul rămas.

Shell
curl "https://api.wordlyenglish.com/v1/account" \
  -H "Authorization: Bearer $WORDLY_API_KEY" \
  -H "Accept: application/json"
200 response
{
  "data": {
    "message": "Authenticated",
    "credits_remaining": 50
  },
  "meta": { "lang": "en" }
}

Adresa URL de bază și versiunea

Toate punctele finale de producție sunt difuzate de la următoarea adresă URL de bază versiunea:

Adresa URL de bazăhttps://api.wordlyenglish.com/v1

Răspunsul de întrerupere sau schimbările de comportament vor folosi o nouă versiune de cale. Câmpurile aditive pot fi introduse în interior v1, so clients should ignore response properties they do not recognize.

Autentificare

Punctele finale autentificate necesită o cheie API în HTTP Authorization antet folosind schema Bearer.

Authorization: Bearer wly_live_your_api_key
Nu expuneți cheile API.

Nu plasați niciodată o cheie live în JavaScript browser, depozite Git publice, capturi de ecran, jurnale sau într-o aplicație mobilă distribuită. Apelați Wordly API din backend și lăsați propria aplicație să comunice cu acel backend.

Mesaje API localizate

Setați limba de răspuns cu ?lang=tr sau standardul Accept-Language antet. Parametrii de interogare au prioritate. Fiecare răspuns JSON declară localitatea selectată în Content-Language şi meta.lang. Error codes remain stable in English for programmatic handling; only the human-readable message is localized.

curl "https://api.wordlyenglish.com/v1/account?lang=tr" \
  -H "Authorization: Bearer $WORDLY_API_KEY" \
  -H "Accept-Language: tr-TR"

Codurile de limbă acceptate: en, tr, de, fr, es, it, pt, nl, pl, ru, uk, ar, fa, he, hi, bn, ur, zh, ja, ko, id, ms, vi, th, sv, no, da, fi, cs, ro.

Credite și facturare

Each successful metered request consumes the documented number of credits. Email-verified accounts receive 50 free credits once. Credits are deducted atomically, so concurrent requests cannot spend the same balance twice. Balance lookup through GET /v1/account is free.

OperațiuneaCostul credituluiDisponibilitate
GET /v1/status0În direct
GET /v1/account0În direct
GET /v1/words/{word}1–5În direct
GET /v1/words/search1În direct
GET /v1/words/random1 per wordÎn direct
POST /v1/words/batchPe baza înregistrărilor returnateÎn direct

Use GET /v1/account when you need the current balance. Other endpoint responses include the operation charge but omit the remaining balance. When the balance is insufficient, the API returns HTTP 402 și nu prelucrează operațiunea.

402 response
{
  "error": {
    "code": "credits_exhausted",
    "message": "Your credit balance is exhausted. Add a package or enable pay-as-you-go to continue.",
    "upgrade_url": "/app.php?page=billing"
  }
}

API key lifecycle

Creați chei separate pentru dezvoltare, punere în scenă și producție. Wordly stochează doar un hash criptografic al fiecărei chei; valoarea completă este afișată o dată la creare.

  • Denumiți cheile după mediu sau serviciu.
  • Utilizați variabile de mediu sau un depozit secret gestionat.
  • Revocați imediat o cheie dacă este posibil să fi fost expusă.
  • Rotiți cheile fără a reutiliza valorile vechi.
  • Nu trimiteți chei în șiruri de interogare.

Formatul de răspuns

Răspunsurile de succes folosesc un nivel superior data obiect și poate include a meta obiect. Erorile folosesc întotdeauna un nivel superior error obiect cu un dispozitiv stabil, care poate fi citit de mașină code și un citibil de om message.

Cerere reușită
{
  "data": { ... },
  "meta": {
    "credits_used": 1,
    "request_id": "..."
  }
}
Solicitare eșuată
{
  "error": {
    "code": "invalid_api_key",
    "message": "..."
  }
}

Păstrați request_id atunci când contactați asistența în legătură cu o solicitare facturată reușită. JSON este codificat UTF-8 și clienții ar trebui să trimită Accept: application/json.

Cache behavior

Wordly caches shared vocabulary data on the server, never API keys, account identities, balances, rate-limit state, or request identifiers. Public status and language responses advertise shared-cache lifetimes. Authenticated responses remain private, no-store; applications may cache the stable data value in their own trusted backend when appropriate.

Referință la punctul final

Puncte finale de producție

GET/v1/statusÎn direct

Returnează informații despre starea serviciului public și despre versiunea API. Acest punct final nu necesită autentificare și costă zero credite.

Exemplu de cerere

curl "https://api.wordlyenglish.com/v1/status" \
  -H "Accept: application/json"

200 · Success

{
  "data": { "status": "ok", "version": "v1" },
  "meta": { "lang": "en" }
}
Possible results200 Service is reachable.405 Method is not GET.429 IP request limit exceeded.
GET/v1/accountLive · 0 credits

Validates the supplied key and returns the current account balance without charging a credit.

Anteturi

NumeNecesarDescriere
AuthorizationDaBearer wly_live_...
AcceptRecomandatapplication/json

Antete de răspuns

X-Credits-Remaining is returned only by this balance endpoint.

200 · Success

{
  "data": { "message": "Authenticated", "credits_remaining": 1250 },
  "meta": { "lang": "en" }
}
Possible results200 Key accepted and balance returned.401 Missing, invalid, revoked, or suspended key.429 Rate limit exceeded.

Finalizări ale vocabularului

20,000+ catalog entries are live.

Fiecare înregistrare își raportează completeness ca catalog, translated, or enriched. Fields that are not available are returned as null sau un obiect gol în loc de date inventate.

GET /v1/words/{word}

Returnează o potrivire exactă a cuvântului. Utilizați languages=tr,de,fr pentru a returna numai traducerile solicitate. Înregistrările de catalog sau traduse costă 1 credit; profilurile complet îmbogățite costă 5 credite.

curl "https://api.wordlyenglish.com/v1/words/water?languages=tr,de" \
  -H "Authorization: Bearer $WORDLY_API_KEY"

GET /v1/words/search

Caută cu q și opțional level, part_of_speech, category, limit, and cursor. Limits range from 1 to 50. Pass meta.next_cursor în următoarea cerere.

curl "https://api.wordlyenglish.com/v1/words/search?q=app&level=advanced&limit=20" \
  -H "Authorization: Bearer $WORDLY_API_KEY"

GET /v1/words/random

Returnează 1–20 de cuvinte aleatorii. Filtrați după level, part_of_speech, or category. Each returned slot costs one credit.

POST /v1/words/batch

Caută între 1 și 50 de cuvinte unice într-o singură solicitare. Răspunsul păstrează ordinea cererii și marchează fiecare articol cu found.

curl -X POST "https://api.wordlyenglish.com/v1/words/batch?lang=tr" \
  -H "Authorization: Bearer $WORDLY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"words":["water","opportunity"],"languages":["tr","de"]}'

GET /v1/languages

Returnează toate cele 30 de interfețe acceptate și localuri de mesaje API. Traducerile de vocabular sunt returnate numai atunci când sunt disponibile. Acest punct final este public și costă zero credite.

Limită de rată

Fiecare cheie API este limitată la 120 de solicitări acceptate pe minut. Răspunsurile includ X-RateLimit-Limit şi X-RateLimit-Remaining. A 429 rate_limit_exceeded răspunsul include Retry-After: 60.

GET/v1/languagesLive · 0 credits

Lists all supported interface and API-message locales. Vocabulary translations are returned only when a record contains them.

Query parameters

NumeTypeNecesarRulesDescriere
langstringNoSupported locale codeLanguage for human-readable messages.

Exemplu de cerere

curl "https://api.wordlyenglish.com/v1/languages?lang=tr"

200 · Success

{
  "data": [{
    "code": "tr",
    "name": "Türkçe",
    "message_localization": true,
    "vocabulary_translation": "when_available"
  }],
  "meta": { "count": 30, "lang": "tr" }
}
Possible results200 Locale list returned.405 Method is not GET.429 IP request limit exceeded.
GET/v1/words/{word}Live · 1–5 credits

Returns one exact vocabulary record. Catalog and translated records cost 1 credit; enriched records cost 5 credits.

Parameters

NumeLocationTypeNecesarRules and meaning
wordPathstringDaExact word or slug; maximum 120 characters. URL-encode special characters.
languagesQuerystringNoComma-separated translation codes, for example tr,de,fr.
langQuerystringNoHuman-readable message language; not a vocabulary filter.

Exemplu de cerere

Shell
curl "https://api.wordlyenglish.com/v1/words/water?languages=tr,de" \
  -H "Authorization: Bearer $WORDLY_API_KEY" \
  -H "Accept: application/json"

200 · Success

{
  "data": {
    "id": "water",
    "word": "water",
    "part_of_speech": "noun",
    "level": "basic",
    "definition": "A clear liquid essential for life.",
    "example": "Please drink enough water every day.",
    "translations": { "tr": "su", "de": "Wasser" },
    "categories": ["nature", "daily-life"],
    "media": {
      "image_url": "https://media.example/water.webp",
      "audio_url": "https://media.example/water.mp3",
      "attribution": {}
    },
    "completeness": "enriched"
  },
  "meta": {
    "credits_used": 5,
    "request_id": "5ebac760-cdc5-4a73-a87b-22463d81483c",
    "lang": "en"
  }
}

404 · Word unavailable

{
  "error": { "code": "word_not_found", "message": "The requested word was not found." },
  "meta": { "lang": "en" }
}
Possible results200 Exact record returned.401 Invalid API key.402 Insufficient credits.404 Word not found.422 Word too long.429 Rate limit exceeded.
GET/v1/words/randomLive · 1 credit per requested slot

Returns random active words for quizzes, discovery feeds, and practice sessions.

Query parameters

NumeTypeNecesarDefault / limitDescriere
countintegerNo1; min 1, max 20Requested slots and credit cost.
levelstringNoExact valueLevel filter.
part_of_speech / posstringNoExact valueGrammatical-class filter.
categorystringNoExact valueCategory filter.
languagesstringNoComma-separatedTranslations to include.

Exemplu de cerere

curl "https://api.wordlyenglish.com/v1/words/random?count=3&level=basic&languages=tr" \
  -H "Authorization: Bearer $WORDLY_API_KEY"

200 · Success

{
  "data": [{ "id": "water", "word": "water", "part_of_speech": "noun", "level": "basic", "definition": null, "example": null, "translations": { "tr": "su" }, "categories": [], "media": { "image_url": null, "audio_url": null, "attribution": {} }, "completeness": "translated" }],
  "meta": { "credits_used": 3, "request_id": "...", "lang": "en", "count": 1 }
}
Possible results200 Random array returned.401 Invalid API key.402 Balance below requested count.429 Rate limit exceeded.
POST/v1/words/batchLive · calculated

Looks up 1–50 unique words while preserving request order. Each enriched result costs 5 credits, another found result costs 1, and the minimum request charge is 1.

Anteturi

NumeNecesarValue
AuthorizationDaBearer wly_live_...
Content-TypeDaapplication/json
AcceptRecomandatapplication/json

JSON body

FieldTypeNecesarRulesDescriere
wordsstring[]Da1–50 items; each max 120 charsWords to resolve; duplicates are normalized and removed.
languagesstring[]NoSupported locale codesTranslations to include.

Exemplu de cerere

curl -X POST "https://api.wordlyenglish.com/v1/words/batch?lang=tr" \
  -H "Authorization: Bearer $WORDLY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"words":["water","not-a-word"],"languages":["tr","de"]}'

200 · Success

{
  "data": [
    { "query": "water", "found": true, "word": { "id": "water", "word": "water", "part_of_speech": "noun", "level": "basic", "definition": null, "example": null, "translations": { "tr": "su", "de": "Wasser" }, "categories": [], "media": { "image_url": null, "audio_url": null, "attribution": {} }, "completeness": "translated" } },
    { "query": "not-a-word", "found": false, "word": null }
  ],
  "meta": { "credits_used": 1, "request_id": "...", "lang": "tr", "count": 2 }
}

422 · Invalid body

{
  "error": { "code": "invalid_request", "message": "Provide between 1 and 50 words." },
  "meta": { "lang": "en" }
}
Possible results200 Ordered results.401 Invalid API key.402 Insufficient credits.413 Body over 64 KB.415 Content-Type is not JSON.422 Invalid words array.429 Rate limit exceeded.

Response field reference

Every stable response variable is described below. Additive fields may appear later, so clients should ignore fields they do not recognize.

Vocabulary object

FieldTypeNullableDescriere
idstringNoStable URL-safe slug.
wordstringNoCanonical English word.
part_of_speechstringDaGrammatical class.
levelstringDaLearning difficulty or catalog level.
definitionstringDaConcise English definition.
examplestringDaNatural example sentence.
phoneticstringDaPronunciation transcription when available.
translationsobject<string,string>NoLocale codes mapped to translations; may be empty.
synonymsstring[]NoAvailable synonyms.
antonymsstring[]NoAvailable antonyms.
categoriesstring[]NoLearning or semantic categories.
media.image_urlURL stringDaLearning image URL.
media.audio_urlURL stringDaPronunciation audio URL.
media.attributionobjectNoRequired media attribution metadata.
completenessenumNocatalog, translated, or enriched.

Meta object

FieldTypeWhen presentDescriere
credits_usedintegerMetered responsesCredits charged by this request.
request_idUUID stringMetered successSupport and billing trace ID.
langstringAlwaysSelected message locale.
countintegerList responsesNumber of response items.
next_cursorstring or nullSearchNext page cursor; null means final page.

Error object

FieldTypeDescriere
error.codestringStable machine-readable code.
error.messagestringLocalized human-readable explanation.
error.upgrade_urlstringRelative billing URL on a 402 result.
meta.langstringError-message locale.

Erori

HTTPCodÎnțelesAcțiunea clientului
401invalid_api_keyCheie lipsă, malformată, revocată sau inactivă.Verificați antetul purtătorului sau înlocuiți cheia.
402credits_exhaustedContului îi lipsesc creditele pentru operațiune.Opriți reîncercări și direcționați clientul către facturare.
404not_foundPunctul final solicitat nu este disponibil.Verificați calea și versiunea API.
404word_not_foundIntrarea de vocabular solicitată nu este disponibilă.Verificați ortografia sau folosiți căutarea.
422invalid_requestUn parametru sau un corp de lot este nevalid.Corectați solicitarea înainte de a reîncerca.
405method_not_allowedThe endpoint does not accept the HTTP method.Use the documented GET or POST method.
413payload_too_largeThe JSON request body exceeds 64 KB.Reduce the batch body.
415unsupported_media_typeThe batch request is not JSON.Send Content-Type: application/json.
429rate_limit_exceededCheia API a depășit 120 de solicitări pe minut.Wait for Retry-After.
5xxserver_errorO eroare neașteptată la nivelul serverului.Reîncercați cu backoff; contactați asistența dacă persistă.

Politica de reîncercare recomandată

Nu reîncercați 401, 402, or 404 automat. Pentru tranzitoriu 5xx răspunsuri, utilizați backoff exponențial cu jitter și o limită strictă de reîncercare. Nu creați niciodată o buclă de reîncercare nelimitată, deoarece fiecare cerere autentificată acceptată poate consuma credite.

JavaScript / Node.js

const response = await fetch('https://api.wordlyenglish.com/v1/account', {
  headers: {
    Authorization: `Bearer ${process.env.WORDLY_API_KEY}`,
    Accept: 'application/json'
  }
});

const body = await response.json();
if (!response.ok) {
  throw new Error(`${body.error.code}: ${body.error.message}`);
}

console.log(body.data.credits_remaining);

Python

import os
import requests

response = requests.get(
    'https://api.wordlyenglish.com/v1/account',
    headers={
        'Authorization': f'Bearer {os.environ["WORDLY_API_KEY"]}',
        'Accept': 'application/json',
    },
    timeout=15,
)
response.raise_for_status()
print(response.json()['data']['credits_remaining'])

PHP

$curl = curl_init('https://api.wordlyenglish.com/v1/account');
curl_setopt_array($curl, [
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_TIMEOUT => 15,
  CURLOPT_HTTPHEADER => [
    'Authorization: Bearer ' . getenv('WORDLY_API_KEY'),
    'Accept: application/json',
  ],
]);

$body = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_RESPONSE_CODE);
curl_close($curl);

if ($status >= 400) {
  throw new RuntimeException('Wordly API request failed');
}
$data = json_decode($body, true, flags: JSON_THROW_ON_ERROR);

Dart / Flutter

Nu expediați cheia Wordly într-o aplicație Flutter. Exemplul aparține unei funcții de server sau backend Dart de încredere.

final response = await http.get(
  Uri.parse('https://api.wordlyenglish.com/v1/account'),
  headers: {
    'Authorization': 'Bearer ${Platform.environment['WORDLY_API_KEY']}',
    'Accept': 'application/json',
  },
);

final body = jsonDecode(response.body) as Map<String, dynamic>;
if (response.statusCode >= 400) {
  throw Exception((body['error'] as Map)['code']);
}

Lista de verificare a producției

  • Solicitări Proxy Wordly printr-un backend de încredere.
  • Setați conexiuni și timpi de răspuns.
  • Mâner 401, 402, 404, and 5xx separat.
  • Query GET /v1/account when your application needs the current balance.
  • Înregistrați punctul final, starea, latența și request_id fără a înregistra cheia API.
  • Utilizați taste separate pentru fiecare mediu și rotiți-le periodic.
  • Cache stable vocabulary responses in your backend when appropriate.

Ești gata să faci prima ta cerere?

Creează un cont, verifică-ți e-mailul și primești 50 de credite gratuite.

Creează cont gratuit

Ai nevoie de ajutor pentru integrare? E-mail [email protected].