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.
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.
- 1Creați un cont
Înregistrați-vă doar cu o adresă de e-mail și o parolă.
- 2Verificați-vă adresa de e-mail
Introdu codul trimis de
[email protected]. Verification grants 50 free credits. - 3Stocați-vă cheia API
Copiați cel generat
wly_live_...cheie și păstrați-o într-o variabilă de mediu pe partea serverului. - 4Faceți o cerere de testare
Apelați punctul final al contului pentru a verifica autentificarea și a vedea soldul rămas.
curl "https://api.wordlyenglish.com/v1/account" \
-H "Authorization: Bearer $WORDLY_API_KEY" \
-H "Accept: application/json"{
"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:
https://api.wordlyenglish.com/v1Ră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_keyNu 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țiunea | Costul creditului | Disponibilitate |
|---|---|---|
GET /v1/status | 0 | În direct |
GET /v1/account | 0 | În direct |
GET /v1/words/{word} | 1–5 | În direct |
GET /v1/words/search | 1 | În direct |
GET /v1/words/random | 1 per word | În direct |
POST /v1/words/batch | Pe 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.
{
"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.
{
"data": { ... },
"meta": {
"credits_used": 1,
"request_id": "..."
}
}{
"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.
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.
Puncte finale de producție
/v1/statusÎn directReturnează 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" }
}/v1/accountLive · 0 creditsValidates the supplied key and returns the current account balance without charging a credit.
Anteturi
| Nume | Necesar | Descriere |
|---|---|---|
Authorization | Da | Bearer wly_live_... |
Accept | Recomandat | application/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" }
}Finalizări ale vocabularului
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.
/v1/languagesLive · 0 creditsLists all supported interface and API-message locales. Vocabulary translations are returned only when a record contains them.
Query parameters
| Nume | Type | Necesar | Rules | Descriere |
|---|---|---|---|---|
lang | string | No | Supported locale code | Language 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" }
}/v1/words/{word}Live · 1–5 creditsReturns one exact vocabulary record. Catalog and translated records cost 1 credit; enriched records cost 5 credits.
Parameters
| Nume | Location | Type | Necesar | Rules and meaning |
|---|---|---|---|---|
word | Path | string | Da | Exact word or slug; maximum 120 characters. URL-encode special characters. |
languages | Query | string | No | Comma-separated translation codes, for example tr,de,fr. |
lang | Query | string | No | Human-readable message language; not a vocabulary filter. |
Exemplu de cerere
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" }
}/v1/words/searchLive · 1 creditSearches active vocabulary in alphabetical order. Use the returned cursor for stable forward pagination.
Query parameters
| Nume | Type | Necesar | Default / limit | Descriere |
|---|---|---|---|---|
q | string | No | Max 120 chars | Case-insensitive contained text. |
level | string | No | Max 30 chars | Exact level filter. |
part_of_speech / pos | string | No | Max 40 chars | Exact grammatical-class filter. |
category | string | No | Max 80 chars | Category-array filter. |
limit | integer | No | 20; min 1, max 50 | Maximum returned records. |
cursor | string | No | Max 120 chars | Previous meta.next_cursor. |
languages | string | No | Comma-separated | Translations to include. |
Exemplu de cerere
curl "https://api.wordlyenglish.com/v1/words/search?q=app&level=advanced&languages=tr&limit=2" \
-H "Authorization: Bearer $WORDLY_API_KEY"200 · Success
{
"data": [{
"id": "application",
"word": "application",
"part_of_speech": "noun",
"level": "advanced",
"definition": null,
"example": null,
"translations": { "tr": "uygulama" },
"categories": [],
"media": { "image_url": null, "audio_url": null, "attribution": {} },
"completeness": "translated"
}],
"meta": { "credits_used": 1, "request_id": "...", "lang": "en", "count": 1, "next_cursor": null }
}/v1/words/randomLive · 1 credit per requested slotReturns random active words for quizzes, discovery feeds, and practice sessions.
Query parameters
| Nume | Type | Necesar | Default / limit | Descriere |
|---|---|---|---|---|
count | integer | No | 1; min 1, max 20 | Requested slots and credit cost. |
level | string | No | Exact value | Level filter. |
part_of_speech / pos | string | No | Exact value | Grammatical-class filter. |
category | string | No | Exact value | Category filter. |
languages | string | No | Comma-separated | Translations 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 }
}/v1/words/batchLive · calculatedLooks 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
| Nume | Necesar | Value |
|---|---|---|
Authorization | Da | Bearer wly_live_... |
Content-Type | Da | application/json |
Accept | Recomandat | application/json |
JSON body
| Field | Type | Necesar | Rules | Descriere |
|---|---|---|---|---|
words | string[] | Da | 1–50 items; each max 120 chars | Words to resolve; duplicates are normalized and removed. |
languages | string[] | No | Supported locale codes | Translations 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" }
}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
| Field | Type | Nullable | Descriere |
|---|---|---|---|
id | string | No | Stable URL-safe slug. |
word | string | No | Canonical English word. |
part_of_speech | string | Da | Grammatical class. |
level | string | Da | Learning difficulty or catalog level. |
definition | string | Da | Concise English definition. |
example | string | Da | Natural example sentence. |
phonetic | string | Da | Pronunciation transcription when available. |
translations | object<string,string> | No | Locale codes mapped to translations; may be empty. |
synonyms | string[] | No | Available synonyms. |
antonyms | string[] | No | Available antonyms. |
categories | string[] | No | Learning or semantic categories. |
media.image_url | URL string | Da | Learning image URL. |
media.audio_url | URL string | Da | Pronunciation audio URL. |
media.attribution | object | No | Required media attribution metadata. |
completeness | enum | No | catalog, translated, or enriched. |
Meta object
| Field | Type | When present | Descriere |
|---|---|---|---|
credits_used | integer | Metered responses | Credits charged by this request. |
request_id | UUID string | Metered success | Support and billing trace ID. |
lang | string | Always | Selected message locale. |
count | integer | List responses | Number of response items. |
next_cursor | string or null | Search | Next page cursor; null means final page. |
Error object
| Field | Type | Descriere |
|---|---|---|
error.code | string | Stable machine-readable code. |
error.message | string | Localized human-readable explanation. |
error.upgrade_url | string | Relative billing URL on a 402 result. |
meta.lang | string | Error-message locale. |
Erori
| HTTP | Cod | Înțeles | Acțiunea clientului |
|---|---|---|---|
| 401 | invalid_api_key | Cheie lipsă, malformată, revocată sau inactivă. | Verificați antetul purtătorului sau înlocuiți cheia. |
| 402 | credits_exhausted | Contului îi lipsesc creditele pentru operațiune. | Opriți reîncercări și direcționați clientul către facturare. |
| 404 | not_found | Punctul final solicitat nu este disponibil. | Verificați calea și versiunea API. |
| 404 | word_not_found | Intrarea de vocabular solicitată nu este disponibilă. | Verificați ortografia sau folosiți căutarea. |
| 422 | invalid_request | Un parametru sau un corp de lot este nevalid. | Corectați solicitarea înainte de a reîncerca. |
| 405 | method_not_allowed | The endpoint does not accept the HTTP method. | Use the documented GET or POST method. |
| 413 | payload_too_large | The JSON request body exceeds 64 KB. | Reduce the batch body. |
| 415 | unsupported_media_type | The batch request is not JSON. | Send Content-Type: application/json. |
| 429 | rate_limit_exceeded | Cheia API a depășit 120 de solicitări pe minut. | Wait for Retry-After. |
| 5xx | server_error | O 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, and5xxseparat. - Query
GET /v1/accountwhen your application needs the current balance. - Înregistrați punctul final, starea, latența și
request_idfă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.
Ai nevoie de ajutor pentru integrare? E-mail [email protected].