Utvecklardokumentation

Bygg med Wordly API.

Använd en API-nyckel på serversidan, gör HTTPS-förfrågningar och spåra varje samtal genom en förutsägbar kreditbaserad faktureringsmodell. Denna referens dokumenterar de ändpunkter som för närvarande är tillgängliga i produktionen och markerar tydligt ändpunkter som fortfarande håller på att förberedas.

API version v1Format JSONTransport Endast HTTPSFri balans 50 creditsÖppna API Ladda ner schemaPostman CollectionPostman Environment

Snabbstart

Skapa ett gratis konto, verifiera din e-post med den sexsiffriga koden och kopiera API-nyckeln som visas en gång i din utvecklarpanel.

  1. 1
    Skapa ett konto

    Registrera dig med endast en e-postadress och lösenord.

  2. 2
    Verifiera din e-post

    Ange koden skickad av [email protected]. Verification grants 50 free credits.

  3. 3
    Lagra din API-nyckel

    Kopiera det genererade wly_live_... nyckel och behåll den i en miljövariabel på serversidan.

  4. 4
    Gör en testförfrågan

    Ring kontoslutpunkten för att verifiera autentiseringen och se det återstående saldot.

Skal
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" }
}

Bas-URL och versionshantering

Alla produktionsslutpunkter betjänas från följande versionsbaserade bas-URL:

Bas-URLhttps://api.wordlyenglish.com/v1

Brytande svar eller beteendeförändringar kommer att använda en ny sökvägsversion. Additiva fält kan införas inom v1, so clients should ignore response properties they do not recognize.

Autentisering

Autentiserade slutpunkter kräver en API-nyckel i HTTP Authorization header med hjälp av bärarschemat.

Authorization: Bearer wly_live_your_api_key
Exponera inte API-nycklar.

Placera aldrig en livenyckel i webbläsarens JavaScript, offentliga Git-arkiv, skärmdumpar, loggar eller en distribuerad mobilapplikation. Ring Wordly API från din backend och låt din egen applikation kommunicera med den backend.

Lokaliserade API-meddelanden

Ställ in svarsspråket med ?lang=tr eller standarden Accept-Language sidhuvud. Frågeparametrar har företräde. Varje JSON-svar deklarerar den valda lokalen i Content-Language och 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"

Språkkoder som stöds: 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.

Krediter och 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.

OperationKreditkostnadTillgänglighet
GET /v1/status0Live
GET /v1/account0Live
GET /v1/words/{word}1–5Live
GET /v1/words/search1Live
GET /v1/words/random1 per wordLive
POST /v1/words/batchBaserat på returnerade posterLive

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 och bearbetar inte operationen.

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

Skapa separata nycklar för utveckling, iscensättning och produktion. Wordly lagrar endast en kryptografisk hash för varje nyckel; hela värdet visas en gång vid skapandet.

  • Namnge nycklar efter miljö eller tjänst.
  • Använd miljövariabler eller en hanterad hemlig butik.
  • Återkalla en nyckel omedelbart om den kan ha blivit utsatt.
  • Rotera nycklar utan att återanvända gamla värden.
  • Skicka inte nycklar i frågesträngar.

Svarsformat

Framgångsrika svar använder en toppnivå data objekt och kan innefatta en meta objekt. Fel använder alltid en toppnivå error objekt med en stabil maskinläsbar code och en läsbar för människor message.

Lyckad begäran
{
  "data": { ... },
  "meta": {
    "credits_used": 1,
    "request_id": "..."
  }
}
Misslyckad begäran
{
  "error": {
    "code": "invalid_api_key",
    "message": "..."
  }
}

Behåll request_id när du kontaktar support om en lyckad faktureringsförfrågan. JSON är UTF-8-kodad och klienter bör skicka 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.

Slutpunktsreferens

Produktionsslutpunkter

FÅ/v1/statusLive

Returnerar information om public service-tillstånd och API-version. Denna slutpunkt kräver ingen autentisering och kostar noll krediter.

Exempelbegäran

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.
FÅ/v1/accountLive · 0 credits

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

Rubriker

NamnObligatorisktBeskrivning
AuthorizationJaBearer wly_live_...
AcceptRekommenderasapplication/json

Svarsrubriker

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.

Ordförrådens slutpunkter

20,000+ catalog entries are live.

Varje rekord rapporterar sin completeness som catalog, translated, or enriched. Fields that are not available are returned as null eller ett tomt objekt istället för påhittad data.

GET /v1/words/{word}

Returnerar en exakt ordmatchning. Använd languages=tr,de,fr för att endast returnera begärda översättningar. Katalog eller översatta poster kostar 1 poäng; helt berikade profiler kostar 5 poäng.

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 och valfritt level, part_of_speech, category, limit, and cursor. Limits range from 1 to 50. Pass meta.next_cursor till nästa begäran.

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

GET /v1/words/random

Returnerar 1–20 slumpmässiga ord. Filtrera efter level, part_of_speech, or category. Each returned slot costs one credit.

POST /v1/words/batch

Slår upp mellan 1 och 50 unika ord i en enda begäran. Svaret bevarar beställningsordningen och markerar varje artikel 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

Returnerar alla 30 gränssnitt och API-meddelanden som stöds. Ordförrådsöversättningar returneras endast när de är tillgängliga. Denna slutpunkt är offentlig och kostar noll poäng.

Prisgräns

Varje API-nyckel är begränsad till 120 accepterade förfrågningar per rullande minut. Svaren inkluderar X-RateLimit-Limit och X-RateLimit-Remaining. A 429 rate_limit_exceeded svar inkluderar Retry-After: 60.

FÅ/v1/languagesLive · 0 credits

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

Query parameters

NamnTypeObligatorisktRulesBeskrivning
langstringNoSupported locale codeLanguage for human-readable messages.

Exempelbegäran

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.
FÅ/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

NamnLocationTypeObligatorisktRules and meaning
wordPathstringJaExact 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.

Exempelbegäran

Skal
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.
FÅ/v1/words/randomLive · 1 credit per requested slot

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

Query parameters

NamnTypeObligatorisktDefault / limitBeskrivning
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.

Exempelbegäran

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.

Rubriker

NamnObligatorisktValue
AuthorizationJaBearer wly_live_...
Content-TypeJaapplication/json
AcceptRekommenderasapplication/json

JSON body

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

Exempelbegäran

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

FieldTypeNullableBeskrivning
idstringNoStable URL-safe slug.
wordstringNoCanonical English word.
part_of_speechstringJaGrammatical class.
levelstringJaLearning difficulty or catalog level.
definitionstringJaConcise English definition.
examplestringJaNatural example sentence.
phoneticstringJaPronunciation 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 stringJaLearning image URL.
media.audio_urlURL stringJaPronunciation audio URL.
media.attributionobjectNoRequired media attribution metadata.
completenessenumNocatalog, translated, or enriched.

Meta object

FieldTypeWhen presentBeskrivning
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

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

Fel

HTTPKodMeningKlientåtgärd
401invalid_api_keyNyckel saknas, är felaktig, återkallad eller inaktiv.Kontrollera bärarhuvudet eller byt ut nyckeln.
402credits_exhaustedKontot saknar krediter för operationen.Stoppa försök och hänvisa kunden till fakturering.
404not_foundDen begärda slutpunkten är inte tillgänglig.Kontrollera sökvägen och API-versionen.
404word_not_foundDen begärda vokabulärposten är inte tillgänglig.Kontrollera stavningen eller använd sökning.
422invalid_requestEn parameter eller batchtext är ogiltig.Korrigera begäran innan du försöker igen.
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_exceededAPI-nyckeln överskred 120 förfrågningar per minut.Wait for Retry-After.
5xxserver_errorEtt oväntat fel på serversidan.Försök igen med backoff; kontakta supporten om det är ihållande.

Rekommenderad policy för ett nytt försök

Försök inte igen 401, 402, or 404 automatiskt. För övergående 5xx svar, använd exponentiell backoff med jitter och ett strikt tak för försök igen. Skapa aldrig en obegränsad återförsöksslinga eftersom varje godkänd autentiserad begäran kan förbruka krediter.

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

Skicka inte Wordly-nyckeln i en Flutter-applikation. Exemplet hör hemma i en pålitlig Dart-backend eller serverfunktion.

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']);
}

Produktionschecklista

  • Proxy Wordly-förfrågningar via en pålitlig backend.
  • Ställ in anslutnings- och svarstidsgränser.
  • Handtag 401, 402, 404, and 5xx separat.
  • Query GET /v1/account when your application needs the current balance.
  • Logga slutpunkt, status, latens och request_id utan att logga API-nyckeln.
  • Använd separata nycklar per miljö och rotera dem med jämna mellanrum.
  • Cache stable vocabulary responses in your backend when appropriate.

Är du redo att göra din första förfrågan?

Skapa ett konto, verifiera din e-post och få 50 gratis krediter.

Skapa ett gratis konto

Behöver du integrationshjälp? E-post [email protected].