Udvikler dokumentation

Byg med Wordly API.

Brug en API-nøgle på serversiden, lav HTTPS-anmodninger, og spor hvert opkald gennem en forudsigelig kreditbaseret faktureringsmodel. Denne reference dokumenterer de endepunkter, der i øjeblikket er tilgængelige i produktionen og markerer tydeligt endepunkter, der stadig er under udarbejdelse.

API version v1Format JSONTransport Kun HTTPSFri balance 50 creditsÅbn API Download skemaPostman CollectionPostman Environment

Quickstart

Opret en gratis konto, bekræft din e-mail ved hjælp af den sekscifrede kode, og kopier API-nøglen, der vises én gang i dit udvikler-dashboard.

  1. 1
    Opret en konto

    Tilmeld dig kun med en e-mailadresse og adgangskode.

  2. 2
    Bekræft din e-mail

    Indtast koden sendt af [email protected]. Verification grants 50 free credits.

  3. 3
    Gem din API-nøgle

    Kopier den genererede wly_live_... nøgle og hold den i en miljøvariabel på serversiden.

  4. 4
    Lav en testanmodning

    Ring til kontoslutpunktet for at bekræfte godkendelsen og se den resterende saldo.

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

Basis URL og versionering

Alle produktionsendepunkter betjenes fra følgende versionerede basis-URL:

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

Brydende svar eller adfærdsændringer vil bruge en ny stiversion. Additive felter kan indføres inden for v1, so clients should ignore response properties they do not recognize.

Autentificering

Godkendte slutpunkter kræver en API-nøgle i HTTP Authorization header ved hjælp af Bærer-skemaet.

Authorization: Bearer wly_live_your_api_key
Udsæt ikke API-nøgler.

Placer aldrig en live-nøgle i browserens JavaScript, offentlige Git-lagre, skærmbilleder, logfiler eller en distribueret mobilapplikation. Kald Wordly API fra din backend og lad din egen applikation kommunikere med den backend.

Lokaliserede API-meddelelser

Indstil svarsproget med ?lang=tr eller standarden Accept-Language overskrift. Forespørgselsparametre har forrang. Hvert JSON-svar erklærer den valgte lokalitet 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"

Understøttede sprogkoder: 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.

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

BetjeningKreditomkostningerTilgængelighed
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/batchBaseret på returnerede optegnelserLive

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

Opret separate nøgler til udvikling, iscenesættelse og produktion. Wordly gemmer kun en kryptografisk hash af hver nøgle; den fulde værdi vises én gang ved oprettelsen.

  • Navngiv nøgler efter miljø eller tjeneste.
  • Brug miljøvariabler eller en administreret hemmelig butik.
  • Tilbagekald straks en nøgle, hvis den kan være blevet blotlagt.
  • Roter nøgler uden at genbruge gamle værdier.
  • Send ikke nøgler i forespørgselsstrenge.

Svarformat

Succesfulde svar bruger et topniveau data genstand og kan omfatte en meta objekt. Fejl bruger altid et topniveau error objekt med en stabil maskinlæsbar code og en menneskelig læsbar message.

Vellykket anmodning
{
  "data": { ... },
  "meta": {
    "credits_used": 1,
    "request_id": "..."
  }
}
Mislykket anmodning
{
  "error": {
    "code": "invalid_api_key",
    "message": "..."
  }
}

Behold request_id når du kontakter support om en vellykket faktureret anmodning. JSON er UTF-8-kodet, og klienter skal 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.

Endpoint reference

Produktions slutpunkter

FÅ/v1/statusLive

Returnerer oplysninger om public service-sundhed og API-version. Dette slutpunkt kræver ikke godkendelse og koster nul kreditter.

Eksempel på anmodning

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

NavnPåkrævetBeskrivelse
AuthorizationJaBearer wly_live_...
AcceptAnbefalesapplication/json

Svaroverskrifter

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 opfundne data.

GET /v1/words/{word}

Returnerer et nøjagtigt ordmatch. Brug languages=tr,de,fr kun at returnere ønskede oversættelser. Katalog eller oversatte poster koster 1 kredit; fuldt berigede profiler koster 5 kreditter.

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

GET /v1/words/search

Søg med q og valgfrit level, part_of_speech, category, limit, and cursor. Limits range from 1 to 50. Pass meta.next_cursor til næste anmodning.

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 tilfældige ord. Filtrer efter level, part_of_speech, or category. Each returned slot costs one credit.

POST /v1/words/batch

Slår op mellem 1 og 50 unikke ord i en enkelt anmodning. Svaret bevarer anmodningsrækkefølgen og markerer 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 understøttede grænseflader og API-meddelelseslokaliteter. Ordforrådsoversættelser returneres kun, når de er tilgængelige. Dette endepunkt er offentligt og koster nul kreditter.

Satsgrænse

Hver API-nøgle er begrænset til 120 accepterede anmodninger pr. rullende minut. Svar inkluderer X-RateLimit-Limit og X-RateLimit-Remaining. A 429 rate_limit_exceeded svar omfatter 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

NavnTypePåkrævetRulesBeskrivelse
langstringNoSupported locale codeLanguage for human-readable messages.

Eksempel på anmodning

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

NavnLocationTypePåkrævetRules 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.

Eksempel på anmodning

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

NavnTypePåkrævetDefault / 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.

Eksempel på anmodning

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

NavnPåkrævetValue
AuthorizationJaBearer wly_live_...
Content-TypeJaapplication/json
AcceptAnbefalesapplication/json

JSON body

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

Eksempel på anmodning

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.

Fejl

HTTPKodeBetydningKlienthandling
401invalid_api_keyManglende, forkert udformet, tilbagekaldt eller inaktiv nøgle.Tjek bærehovedet, eller udskift nøglen.
402credits_exhaustedKontoen mangler kreditter til operationen.Stop genforsøg, og led kunden til fakturering.
404not_foundDet anmodede slutpunkt er ikke tilgængeligt.Tjek stien og API-versionen.
404word_not_foundDen anmodede ordforrådspost er ikke tilgængelig.Kontroller stavning eller brug søgning.
422invalid_requestEn parameter eller batchtekst er ugyldig.Ret anmodningen, før du prøver 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-nøglen oversteg 120 anmodninger i minuttet.Wait for Retry-After.
5xxserver_errorEn uventet fejl på serversiden.Prøv igen med backoff; kontakt support, hvis det fortsætter.

Anbefalet politik for genforsøg

Forsøg ikke igen 401, 402, or 404 automatisk. Til forbigående 5xx svar, brug eksponentiel backoff med jitter og en streng genforsøgsgrænse. Opret aldrig en ubegrænset genforsøgsløkke, fordi hver accepteret godkendt anmodning kan forbruge 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

Send ikke Wordly-nøglen i en Flutter-applikation. Eksemplet hører hjemme i en pålidelig 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']);
}

Produktionstjekliste

  • Proxy Wordly-anmodninger via en betroet backend.
  • Indstil forbindelse og svar timeouts.
  • Håndtag 401, 402, 404, and 5xx separat.
  • Query GET /v1/account when your application needs the current balance.
  • Log slutpunkt, status, latens og request_id uden at logge API-nøglen.
  • Brug separate nøgler pr. miljø og roter dem med jævne mellemrum.
  • Cache stable vocabulary responses in your backend when appropriate.

Klar til at fremsætte din første anmodning?

Opret en konto, bekræft din e-mail, og modtag 50 gratis kreditter.

Opret gratis konto

Har du brug for integrationshjælp? E-mail [email protected].