Bygg med Wordly API.
Bruk en API-nøkkel på serversiden, foreta HTTPS-forespørsler og spor hvert anrop gjennom en forutsigbar kredittbasert faktureringsmodell. Denne referansen dokumenterer endepunktene som for tiden er tilgjengelige i produksjon og markerer tydelig endepunkter som fortsatt er under utarbeidelse.
Hurtigstart
Opprett en gratis konto, bekreft e-posten din med den sekssifrede koden, og kopier API-nøkkelen som vises én gang i utviklerdashbordet.
- 1Opprett en konto
Registrer deg med kun e-postadresse og passord.
- 2Bekreft e-posten din
Skriv inn koden sendt av
[email protected]. Verification grants 50 free credits. - 3Lagre API-nøkkelen din
Kopier den genererte
wly_live_...nøkkel og hold den i en miljøvariabel på serversiden. - 4Lag en testforespørsel
Ring kontoendepunktet for å bekrefte autentisering og se den gjenværende saldoen.
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" }
}Base URL og versjonering
Alle produksjonsendepunkter serveres fra følgende versjonsbaserte basis-URL:
https://api.wordlyenglish.com/v1Brytende respons eller atferdsendringer vil bruke en ny baneversjon. Additive felt kan bli introdusert innenfor v1, so clients should ignore response properties they do not recognize.
Autentisering
Autentiserte endepunkter krever en API-nøkkel i HTTP Authorization header ved å bruke bærerskjemaet.
Authorization: Bearer wly_live_your_api_keyPlasser aldri en live-nøkkel i nettleserens JavaScript, offentlige Git-repositorier, skjermbilder, logger eller en distribuert mobilapplikasjon. Ring Wordly API fra backend og la din egen applikasjon kommunisere med den backend.
Lokaliserte API-meldinger
Still inn svarspråket med ?lang=tr eller standarden Accept-Language overskrift. Søkeparametere har forrang. Hvert JSON-svar erklærer den valgte lokaliteten i Content-Language og 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"Støttede språkkoder: 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.
Kreditter og fakturering
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.
| Drift | Kredittkostnad | Tilgjengelighet |
|---|---|---|
GET /v1/status | 0 | Live |
GET /v1/account | 0 | Live |
GET /v1/words/{word} | 1–5 | Live |
GET /v1/words/search | 1 | Live |
GET /v1/words/random | 1 per word | Live |
POST /v1/words/batch | Basert på returnerte poster | Live |
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 og behandler ikke operasjonen.
{
"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
Lag separate nøkler for utvikling, iscenesettelse og produksjon. Wordly lagrer kun en kryptografisk hash av hver nøkkel; hele verdien vises én gang ved opprettelse.
- Navngi nøkler etter miljø eller tjeneste.
- Bruk miljøvariabler eller en administrert hemmelig butikk.
- Trekk tilbake en nøkkel umiddelbart hvis den kan ha blitt utsatt.
- Roter nøkler uten å gjenbruke gamle verdier.
- Ikke send nøkler i spørrestrenger.
Svarformat
Vellykkede svar bruker et toppnivå data objekt og kan omfatte en meta objekt. Feil bruker alltid et toppnivå error objekt med en stabil maskinlesbar code og en menneskelig lesbar message.
{
"data": { ... },
"meta": {
"credits_used": 1,
"request_id": "..."
}
}{
"error": {
"code": "invalid_api_key",
"message": "..."
}
}Behold request_id når du kontakter brukerstøtten om en vellykket fakturert forespørsel. JSON er UTF-8-kodet og klienter bør sende 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.
Produksjons endepunkter
/v1/statusLiveReturnerer informasjon om offentlig tjenestehelse og API-versjon. Dette endepunktet krever ikke autentisering og koster null kreditter.
Eksempelforespørsel
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.
Overskrifter
| Navn | Obligatorisk | Beskrivelse |
|---|---|---|
Authorization | Ja | Bearer wly_live_... |
Accept | Anbefalt | application/json |
Svarhoder
X-Credits-Remaining is returned only by this balance endpoint.
200 · Success
{
"data": { "message": "Authenticated", "credits_remaining": 1250 },
"meta": { "lang": "en" }
}Ordforråds endepunkter
Hver post rapporterer sin completeness som catalog, translated, or enriched. Fields that are not available are returned as null eller et tomt objekt i stedet for oppfunnet data.
GET /v1/words/{word}
Returnerer et eksakt ordtreff. Bruk languages=tr,de,fr å returnere kun forespurte oversettelser. Katalog eller oversatte poster koster 1 kreditt; fullstendig berikede profiler koster 5 studiepoeng.
curl "https://api.wordlyenglish.com/v1/words/water?languages=tr,de" \
-H "Authorization: Bearer $WORDLY_API_KEY"GET /v1/words/search
Søk med q og valgfritt level, part_of_speech, category, limit, and cursor. Limits range from 1 to 50. Pass meta.next_cursor inn i neste forespørsel.
curl "https://api.wordlyenglish.com/v1/words/search?q=app&level=advanced&limit=20" \
-H "Authorization: Bearer $WORDLY_API_KEY"GET /v1/words/random
Returnerer 1–20 tilfeldige ord. Filtrer etter level, part_of_speech, or category. Each returned slot costs one credit.
POST /v1/words/batch
Slår opp mellom 1 og 50 unike ord i en enkelt forespørsel. Svaret bevarer forespørselsrekkefølgen og merker hver vare med 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
Returnerer alle 30 støttede grensesnitt og API-meldingslokaliteter. Ordforrådsoversettelser returneres bare når de er tilgjengelige. Dette endepunktet er offentlig og koster null studiepoeng.
Satsgrense
Hver API-nøkkel er begrenset til 120 aksepterte forespørsler per rullende minutt. Svarene inkluderer X-RateLimit-Limit og X-RateLimit-Remaining. A 429 rate_limit_exceeded svar inkluderer 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
| Navn | Type | Obligatorisk | Rules | Beskrivelse |
|---|---|---|---|---|
lang | string | No | Supported locale code | Language for human-readable messages. |
Eksempelforespørsel
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
| Navn | Location | Type | Obligatorisk | Rules and meaning |
|---|---|---|---|---|
word | Path | string | Ja | 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. |
Eksempelforespørsel
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 studiepoengSearches active vocabulary in alphabetical order. Use the returned cursor for stable forward pagination.
Query parameters
| Navn | Type | Obligatorisk | Default / limit | Beskrivelse |
|---|---|---|---|---|
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. |
Eksempelforespørsel
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
| Navn | Type | Obligatorisk | Default / limit | Beskrivelse |
|---|---|---|---|---|
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. |
Eksempelforespørsel
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.
Overskrifter
| Navn | Obligatorisk | Value |
|---|---|---|
Authorization | Ja | Bearer wly_live_... |
Content-Type | Ja | application/json |
Accept | Anbefalt | application/json |
JSON body
| Field | Type | Obligatorisk | Rules | Beskrivelse |
|---|---|---|---|---|
words | string[] | Ja | 1–50 items; each max 120 chars | Words to resolve; duplicates are normalized and removed. |
languages | string[] | No | Supported locale codes | Translations to include. |
Eksempelforespørsel
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 | Beskrivelse |
|---|---|---|---|
id | string | No | Stable URL-safe slug. |
word | string | No | Canonical English word. |
part_of_speech | string | Ja | Grammatical class. |
level | string | Ja | Learning difficulty or catalog level. |
definition | string | Ja | Concise English definition. |
example | string | Ja | Natural example sentence. |
phonetic | string | Ja | 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 | Ja | Learning image URL. |
media.audio_url | URL string | Ja | Pronunciation audio URL. |
media.attribution | object | No | Required media attribution metadata. |
completeness | enum | No | catalog, translated, or enriched. |
Meta object
| Field | Type | When present | Beskrivelse |
|---|---|---|---|
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 | Beskrivelse |
|---|---|---|
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. |
Feil
| HTTP | Kode | Mening | Klienthandling |
|---|---|---|---|
| 401 | invalid_api_key | Manglende, feil utformet, opphevet eller inaktiv nøkkel. | Sjekk bærerhodet eller bytt ut nøkkelen. |
| 402 | credits_exhausted | Kontoen mangler kreditter for operasjonen. | Stopp forsøk på nytt og send kunden til fakturering. |
| 404 | not_found | Det forespurte endepunktet er ikke tilgjengelig. | Sjekk banen og API-versjonen. |
| 404 | word_not_found | Den forespurte vokabularoppføringen er utilgjengelig. | Sjekk stavemåten eller bruk søk. |
| 422 | invalid_request | En parameter eller batchtekst er ugyldig. | Korriger forespørselen før du prøver på nytt. |
| 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 | API-nøkkelen overskred 120 forespørsler per minutt. | Wait for Retry-After. |
| 5xx | server_error | En uventet feil på serversiden. | Prøv på nytt med backoff; kontakt support hvis det er vedvarende. |
Anbefalt policy for forsøk på nytt
Ikke prøv på nytt 401, 402, or 404 automatisk. For forbigående 5xx svar, bruk eksponentiell backoff med jitter og en streng prøvetaking. Opprett aldri en ubegrenset forsøksløkke fordi hver godkjent autentisert forespørsel kan forbruke kreditter.
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
Ikke send Wordly-nøkkelen i en Flutter-applikasjon. Eksemplet hører hjemme i en pålitelig Dart-backend eller serverfunksjon.
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']);
}Sjekkliste for produksjon
- Proxy Wordly-forespørsler gjennom en pålitelig backend.
- Angi tidsavbrudd for tilkobling og respons.
- Håndtak
401,402,404, and5xxseparat. - Query
GET /v1/accountwhen your application needs the current balance. - Logg endepunkt, status, ventetid og
request_iduten å logge API-nøkkelen. - Bruk separate nøkler per miljø og roter dem med jevne mellomrom.
- Cache stable vocabulary responses in your backend when appropriate.
Klar til å komme med din første forespørsel?
Opprett en konto, bekreft e-posten din og motta 50 gratis kreditter.
Trenger du integreringshjelp? E-post [email protected].