Utviklerdokumentasjon

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.

API version v1Format JSONTransport Kun HTTPSFri balanse 50 creditsÅpne API Last ned skjemaPostman CollectionPostman Environment

Hurtigstart

Opprett en gratis konto, bekreft e-posten din med den sekssifrede koden, og kopier API-nøkkelen som vises én gang i utviklerdashbordet.

  1. 1
    Opprett en konto

    Registrer deg med kun e-postadresse og passord.

  2. 2
    Bekreft e-posten din

    Skriv inn koden sendt av [email protected]. Verification grants 50 free credits.

  3. 3
    Lagre API-nøkkelen din

    Kopier den genererte wly_live_... nøkkel og hold den i en miljøvariabel på serversiden.

  4. 4
    Lag en testforespørsel

    Ring kontoendepunktet for å bekrefte autentisering og se den gjenværende saldoen.

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

Base URL og versjonering

Alle produksjonsendepunkter serveres fra følgende versjonsbaserte basis-URL:

Base URLhttps://api.wordlyenglish.com/v1

Brytende 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_key
Ikke utsett API-nøkler.

Plasser 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.

DriftKredittkostnadTilgjengelighet
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/batchBasert på returnerte 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 og behandler ikke operasjonen.

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

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.

Vellykket forespørsel
{
  "data": { ... },
  "meta": {
    "credits_used": 1,
    "request_id": "..."
  }
}
Mislykket forespørsel
{
  "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.

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.

Endepunktreferanse

Produksjons endepunkter

FÅ/v1/statusLive

Returnerer 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" }
}
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.

Overskrifter

NavnObligatoriskBeskrivelse
AuthorizationJaBearer wly_live_...
AcceptAnbefaltapplication/json

Svarhoder

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.

Ordforråds endepunkter

20,000+ catalog entries are live.

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.

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

NavnTypeObligatoriskRulesBeskrivelse
langstringNoSupported locale codeLanguage 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" }
}
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

NavnLocationTypeObligatoriskRules 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.

Eksempelforespørsel

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

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

Query parameters

NavnTypeObligatoriskDefault / limitBeskrivelse
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.

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 }
}
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.

Overskrifter

NavnObligatoriskValue
AuthorizationJaBearer wly_live_...
Content-TypeJaapplication/json
AcceptAnbefaltapplication/json

JSON body

FieldTypeObligatoriskRulesBeskrivelse
wordsstring[]Ja1–50 items; each max 120 charsWords to resolve; duplicates are normalized and removed.
languagesstring[]NoSupported locale codesTranslations 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" }
}
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

FieldTypeNullableBeskrivelse
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 presentBeskrivelse
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

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

Feil

HTTPKodeMeningKlienthandling
401invalid_api_keyManglende, feil utformet, opphevet eller inaktiv nøkkel.Sjekk bærerhodet eller bytt ut nøkkelen.
402credits_exhaustedKontoen mangler kreditter for operasjonen.Stopp forsøk på nytt og send kunden til fakturering.
404not_foundDet forespurte endepunktet er ikke tilgjengelig.Sjekk banen og API-versjonen.
404word_not_foundDen forespurte vokabularoppføringen er utilgjengelig.Sjekk stavemåten eller bruk søk.
422invalid_requestEn parameter eller batchtekst er ugyldig.Korriger forespørselen før du prøver på nytt.
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-nøkkelen overskred 120 forespørsler per minutt.Wait for Retry-After.
5xxserver_errorEn 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, and 5xx separat.
  • Query GET /v1/account when your application needs the current balance.
  • Logg endepunkt, status, ventetid og request_id uten å 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.

Opprett gratis konto

Trenger du integreringshjelp? E-post [email protected].