Kehittäjän dokumentaatio

Rakenna Wordly API:lla.

Käytä palvelinpuolen API-avainta, tee HTTPS-pyyntöjä ja seuraa jokaista puhelua ennustettavan luottoperusteisen laskutusmallin avulla. Tämä viite dokumentoi tällä hetkellä tuotannossa saatavilla olevat päätepisteet ja merkitsee selvästi päätepisteet, joita valmistellaan vielä.

API version v1Muoto JSONKuljetus Vain HTTPSVapaa saldo 50 creditsOpenAPI Lataa malliPostman CollectionPostman Environment

Pika-aloitus

Luo ilmainen tili, vahvista sähköpostisi kuusinumeroisella koodilla ja kopioi kerran kehittäjän hallintapaneelissa näkyvä API-avain.

  1. 1
    Luo tili

    Rekisteröidy vain sähköpostiosoitteella ja salasanalla.

  2. 2
    Vahvista sähköpostiosoitteesi

    Syötä lähettämä koodi [email protected]. Verification grants 50 free credits.

  3. 3
    Tallenna API-avaimesi

    Kopioi luotu wly_live_... avain ja säilytä se palvelinpuolen ympäristömuuttujassa.

  4. 4
    Tee testipyyntö

    Soita tilin päätepisteeseen vahvistaaksesi todennus ja katsoaksesi jäljellä olevan saldon.

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

Perus-URL-osoite ja versiointi

Kaikki tuotannon päätepisteet palvellaan seuraavasta versioidusta perus-URL-osoitteesta:

Perus-URL-osoitehttps://api.wordlyenglish.com/v1

Reaktion tai käyttäytymisen muutosten rikkominen käyttää uutta polkuversiota. Sisään voidaan lisätä lisäkenttiä v1, so clients should ignore response properties they do not recognize.

Todennus

Autentikoidut päätepisteet vaativat API-avaimen HTTP:ssä Authorization otsikko Bearer-mallilla.

Authorization: Bearer wly_live_your_api_key
Älä paljasta API-avaimia.

Älä koskaan aseta live-avainta selaimen JavaScriptiin, julkisiin Git-tietovarastoihin, kuvakaappauksiin, lokeihin tai hajautettuun mobiilisovellukseen. Soita Wordly API:lle taustajärjestelmästäsi ja anna oman sovelluksesi kommunikoida taustajärjestelmän kanssa.

Lokalisoidut API-viestit

Aseta vastauskieli painamalla ?lang=tr tai standardi Accept-Language otsikko. Kyselyparametrit ovat etusijalla. Jokainen JSON-vastaus ilmoittaa valitun alueen Content-Language ja 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"

Tuetut kielikoodit: 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.

Luotto ja laskutus

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.

ToimintaLuottokustannusSaatavuus
GET /v1/status0Livenä
GET /v1/account0Livenä
GET /v1/words/{word}1–5Livenä
GET /v1/words/search1Livenä
GET /v1/words/random1 per wordLivenä
POST /v1/words/batchPalautettujen tietueiden perusteellaLivenä

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 eikä käsittele toimenpidettä.

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

Luo erilliset avaimet kehitystä, lavastusta ja tuotantoa varten. Wordly tallentaa vain salaustiivisteen jokaisesta avaimesta; koko arvo näytetään kerran luonnin yhteydessä.

  • Nimeä avaimet ympäristön tai palvelun mukaan.
  • Käytä ympäristömuuttujia tai hallittua salasäilöä.
  • Peruuta avain välittömästi, jos se on saattanut paljastua.
  • Pyöritä avaimia käyttämättä uudelleen vanhoja arvoja.
  • Älä lähetä avaimia kyselymerkkijonoissa.

Vastauksen muoto

Onnistuneet vastaukset käyttävät huipputasoa data objekti ja voi sisältää a meta esine. Virheissä käytetään aina huipputasoa error esine vakaalla koneellisesti luettavalla code ja ihmisen luettava message.

Onnistunut pyyntö
{
  "data": { ... },
  "meta": {
    "credits_used": 1,
    "request_id": "..."
  }
}
Epäonnistunut pyyntö
{
  "error": {
    "code": "invalid_api_key",
    "message": "..."
  }
}

Pidä request_id kun otat yhteyttä tukeen onnistuneen laskutetun pyynnön johdosta. JSON on UTF-8-koodattu, ja asiakkaiden tulee lähettää 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.

Päätepisteen viite

Tuotannon päätepisteet

GET/v1/statusLivenä

Palauttaa julkisen palvelun kunto- ja API-versiotiedot. Tämä päätepiste ei vaadi todennusta ja maksaa nolla krediittiä.

Esimerkkipyyntö

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

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

Otsikot

NimiPakollinenKuvaus
AuthorizationKylläBearer wly_live_...
AcceptSuositeltavaapplication/json

Vastauksen otsikot

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.

Sanaston päätepisteet

20,000+ catalog entries are live.

Jokainen tietue ilmoittaa sen completeness kuten catalog, translated, or enriched. Fields that are not available are returned as null tai tyhjä objekti keksityn tiedon sijaan.

GET /v1/words/{word}

Palauttaa tarkan sanahaun. Käytä languages=tr,de,fr palauttaa vain pyydetyt käännökset. Luettelo tai käännetyt tietueet maksavat 1 pisteen; täysin rikastetut profiilit maksavat 5 krediittiä.

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

GET /v1/words/search

Hae sovelluksella q ja valinnainen level, part_of_speech, category, limit, and cursor. Limits range from 1 to 50. Pass meta.next_cursor seuraavaan pyyntöön.

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

GET /v1/words/random

Palauttaa 1–20 satunnaista sanaa. Suodatusperuste level, part_of_speech, or category. Each returned slot costs one credit.

POST /v1/words/batch

Etsii 1–50 ainutlaatuista sanaa yhdestä pyynnöstä. Vastaus säilyttää pyyntöjärjestyksen ja merkitsee jokaisen kohteen 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

Palauttaa kaikki 30 tuettua käyttöliittymä- ja API-viestien aluetta. Sanaston käännökset palautetaan vain, kun niitä on saatavilla. Tämä päätepiste on julkinen ja maksaa nolla krediittiä.

Hintarajoitus

Jokainen API-avain on rajoitettu 120 hyväksyttyyn pyyntöön liikkuvaa minuuttia kohti. Vastaukset sisältävät X-RateLimit-Limit ja X-RateLimit-Remaining. A 429 rate_limit_exceeded vastaus sisältää Retry-After: 60.

GET/v1/languagesLive · 0 credits

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

Query parameters

NimiTypePakollinenRulesKuvaus
langstringNoSupported locale codeLanguage for human-readable messages.

Esimerkkipyyntö

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.
GET/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

NimiLocationTypePakollinenRules and meaning
wordPathstringKylläExact 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.

Esimerkkipyyntö

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

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

Query parameters

NimiTypePakollinenDefault / limitKuvaus
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.

Esimerkkipyyntö

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.

Otsikot

NimiPakollinenValue
AuthorizationKylläBearer wly_live_...
Content-TypeKylläapplication/json
AcceptSuositeltavaapplication/json

JSON body

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

Esimerkkipyyntö

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

FieldTypeNullableKuvaus
idstringNoStable URL-safe slug.
wordstringNoCanonical English word.
part_of_speechstringKylläGrammatical class.
levelstringKylläLearning difficulty or catalog level.
definitionstringKylläConcise English definition.
examplestringKylläNatural example sentence.
phoneticstringKylläPronunciation 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 stringKylläLearning image URL.
media.audio_urlURL stringKylläPronunciation audio URL.
media.attributionobjectNoRequired media attribution metadata.
completenessenumNocatalog, translated, or enriched.

Meta object

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

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

Virheet

HTTPKoodiMerkitysAsiakkaan toiminta
401invalid_api_keyPuuttuva, väärin muotoiltu, peruutettu tai ei-aktiivinen avain.Tarkista Bearer-otsikko tai vaihda avain.
402credits_exhaustedTililtä puuttuu luottoja toimintoa varten.Lopeta uudelleenyritykset ja ohjaa asiakas laskutukseen.
404not_foundPyydetty päätepiste ei ole käytettävissä.Tarkista polku ja API-versio.
404word_not_foundPyydetty sanasto ei ole käytettävissä.Tarkista oikeinkirjoitus tai käytä hakua.
422invalid_requestParametri tai erän runko on virheellinen.Korjaa pyyntö ennen kuin yrität uudelleen.
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-avain ylitti 120 pyyntöä minuutissa.Wait for Retry-After.
5xxserver_errorOdottamaton palvelinpuolen virhe.Yritä uudelleen peruuttamalla; ota yhteyttä tukeen, jos se jatkuu.

Suositeltu uudelleenyrityskäytäntö

Älä yritä uudelleen 401, 402, or 404 automaattisesti. Ohimenevälle 5xx Vastauksissa käytä eksponentiaalista perääntymistä värinän ja tiukan uudelleenyritysrajoituksen kanssa. Älä koskaan luo rajatonta uudelleenyrityssilmukkaa, koska jokainen hyväksytty todennettu pyyntö voi kuluttaa krediittejä.

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

Älä lähetä Wordly-avainta Flutter-sovelluksen sisällä. Esimerkki kuuluu luotettuun Dart-taustajärjestelmään tai palvelintoimintoon.

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

Tuotannon tarkistuslista

  • Proxy Wordly pyytää luotettavan taustajärjestelmän kautta.
  • Aseta yhteyden ja vasteen aikakatkaisut.
  • Kahva 401, 402, 404, and 5xx erikseen.
  • Query GET /v1/account when your application needs the current balance.
  • Kirjaa päätepiste, tila, latenssi ja request_id kirjaamatta API-avainta.
  • Käytä erillisiä avaimia ympäristöä kohden ja kierrä niitä säännöllisesti.
  • Cache stable vocabulary responses in your backend when appropriate.

Oletko valmis tekemään ensimmäisen pyyntösi?

Luo tili, vahvista sähköpostiosoitteesi ja saat 50 ilmaista hyvitystä.

Luo ilmainen tili

Tarvitsetko integraatioapua? Sähköposti [email protected].