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ä.
Pika-aloitus
Luo ilmainen tili, vahvista sähköpostisi kuusinumeroisella koodilla ja kopioi kerran kehittäjän hallintapaneelissa näkyvä API-avain.
- 1Luo tili
Rekisteröidy vain sähköpostiosoitteella ja salasanalla.
- 2Vahvista sähköpostiosoitteesi
Syötä lähettämä koodi
[email protected]. Verification grants 50 free credits. - 3Tallenna API-avaimesi
Kopioi luotu
wly_live_...avain ja säilytä se palvelinpuolen ympäristömuuttujassa. - 4Tee testipyyntö
Soita tilin päätepisteeseen vahvistaaksesi todennus ja katsoaksesi jäljellä olevan saldon.
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" }
}Perus-URL-osoite ja versiointi
Kaikki tuotannon päätepisteet palvellaan seuraavasta versioidusta perus-URL-osoitteesta:
https://api.wordlyenglish.com/v1Reaktion 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ä 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.
| Toiminta | Luottokustannus | Saatavuus |
|---|---|---|
GET /v1/status | 0 | Livenä |
GET /v1/account | 0 | Livenä |
GET /v1/words/{word} | 1–5 | Livenä |
GET /v1/words/search | 1 | Livenä |
GET /v1/words/random | 1 per word | Livenä |
POST /v1/words/batch | Palautettujen tietueiden perusteella | Livenä |
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ä.
{
"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.
{
"data": { ... },
"meta": {
"credits_used": 1,
"request_id": "..."
}
}{
"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.
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.
Tuotannon päätepisteet
/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" }
}/v1/accountLive · 0 creditsValidates the supplied key and returns the current account balance without charging a credit.
Otsikot
| Nimi | Pakollinen | Kuvaus |
|---|---|---|
Authorization | Kyllä | Bearer wly_live_... |
Accept | Suositeltava | application/json |
Vastauksen otsikot
X-Credits-Remaining is returned only by this balance endpoint.
200 · Success
{
"data": { "message": "Authenticated", "credits_remaining": 1250 },
"meta": { "lang": "en" }
}Sanaston päätepisteet
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.
/v1/languagesLive · 0 creditsLists all supported interface and API-message locales. Vocabulary translations are returned only when a record contains them.
Query parameters
| Nimi | Type | Pakollinen | Rules | Kuvaus |
|---|---|---|---|---|
lang | string | No | Supported locale code | Language 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" }
}/v1/words/{word}Live · 1–5 creditsReturns one exact vocabulary record. Catalog and translated records cost 1 credit; enriched records cost 5 credits.
Parameters
| Nimi | Location | Type | Pakollinen | Rules and meaning |
|---|---|---|---|---|
word | Path | string | Kyllä | 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. |
Esimerkkipyyntö
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 saldoSearches active vocabulary in alphabetical order. Use the returned cursor for stable forward pagination.
Query parameters
| Nimi | Type | Pakollinen | Default / limit | Kuvaus |
|---|---|---|---|---|
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. |
Esimerkkipyyntö
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
| Nimi | Type | Pakollinen | Default / limit | Kuvaus |
|---|---|---|---|---|
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. |
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 }
}/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.
Otsikot
| Nimi | Pakollinen | Value |
|---|---|---|
Authorization | Kyllä | Bearer wly_live_... |
Content-Type | Kyllä | application/json |
Accept | Suositeltava | application/json |
JSON body
| Field | Type | Pakollinen | Rules | Kuvaus |
|---|---|---|---|---|
words | string[] | Kyllä | 1–50 items; each max 120 chars | Words to resolve; duplicates are normalized and removed. |
languages | string[] | No | Supported locale codes | Translations 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" }
}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 | Kuvaus |
|---|---|---|---|
id | string | No | Stable URL-safe slug. |
word | string | No | Canonical English word. |
part_of_speech | string | Kyllä | Grammatical class. |
level | string | Kyllä | Learning difficulty or catalog level. |
definition | string | Kyllä | Concise English definition. |
example | string | Kyllä | Natural example sentence. |
phonetic | string | Kyllä | 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 | Kyllä | Learning image URL. |
media.audio_url | URL string | Kyllä | Pronunciation audio URL. |
media.attribution | object | No | Required media attribution metadata. |
completeness | enum | No | catalog, translated, or enriched. |
Meta object
| Field | Type | When present | Kuvaus |
|---|---|---|---|
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 | Kuvaus |
|---|---|---|
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. |
Virheet
| HTTP | Koodi | Merkitys | Asiakkaan toiminta |
|---|---|---|---|
| 401 | invalid_api_key | Puuttuva, väärin muotoiltu, peruutettu tai ei-aktiivinen avain. | Tarkista Bearer-otsikko tai vaihda avain. |
| 402 | credits_exhausted | Tililtä puuttuu luottoja toimintoa varten. | Lopeta uudelleenyritykset ja ohjaa asiakas laskutukseen. |
| 404 | not_found | Pyydetty päätepiste ei ole käytettävissä. | Tarkista polku ja API-versio. |
| 404 | word_not_found | Pyydetty sanasto ei ole käytettävissä. | Tarkista oikeinkirjoitus tai käytä hakua. |
| 422 | invalid_request | Parametri tai erän runko on virheellinen. | Korjaa pyyntö ennen kuin yrität uudelleen. |
| 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-avain ylitti 120 pyyntöä minuutissa. | Wait for Retry-After. |
| 5xx | server_error | Odottamaton 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, and5xxerikseen. - Query
GET /v1/accountwhen your application needs the current balance. - Kirjaa päätepiste, tila, latenssi ja
request_idkirjaamatta 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ä.
Tarvitsetko integraatioapua? Sähköposti [email protected].