Dokumentasi pembangun

Bina dengan Wordly API.

Gunakan kunci API bahagian pelayan, buat permintaan HTTPS dan jejak setiap panggilan melalui model pengebilan berasaskan kredit yang boleh diramal. Rujukan ini mendokumenkan titik akhir yang tersedia dalam pengeluaran dan dengan jelas menandakan titik akhir yang masih disediakan.

API version v1Format JSONPengangkutan HTTPS sahajaBaki percuma 50 creditsOpenAPI Muat turun skemaPostman CollectionPostman Environment

Mula pantas

Buat akaun percuma, sahkan e-mel anda menggunakan kod enam digit dan salin kunci API yang ditunjukkan sekali dalam papan pemuka pembangun anda.

  1. 1
    Buat akaun

    Daftar dengan hanya alamat e-mel dan kata laluan.

  2. 2
    Sahkan e-mel anda

    Masukkan kod yang dihantar oleh [email protected]. Verification grants 50 free credits.

  3. 3
    Simpan kunci API anda

    Salin yang dihasilkan wly_live_... kunci dan simpannya dalam pembolehubah persekitaran sebelah pelayan.

  4. 4
    Buat permintaan ujian

    Hubungi titik akhir akaun untuk mengesahkan pengesahan dan melihat baki yang tinggal.

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

URL asas dan versi

Semua titik akhir pengeluaran disajikan daripada URL asas versi berikut:

URL asashttps://api.wordlyenglish.com/v1

Memecah tindak balas atau perubahan tingkah laku akan menggunakan versi laluan baharu. Medan aditif boleh diperkenalkan dalam v1, so clients should ignore response properties they do not recognize.

Pengesahan

Titik akhir yang disahkan memerlukan kunci API dalam HTTP Authorization pengepala menggunakan skema Pembawa.

Authorization: Bearer wly_live_your_api_key
Jangan dedahkan kunci API.

Jangan sekali-kali meletakkan kunci langsung dalam JavaScript penyemak imbas, repositori Git awam, tangkapan skrin, log atau aplikasi mudah alih yang diedarkan. Panggil Wordly API dari bahagian belakang anda dan biarkan aplikasi anda sendiri berkomunikasi dengan bahagian belakang itu.

Mesej API setempat

Tetapkan bahasa respons dengan ?lang=tr atau piawaian Accept-Language pengepala. Parameter pertanyaan diutamakan. Setiap respons JSON mengisytiharkan tempat yang dipilih masuk Content-Language dan 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"

Kod bahasa yang disokong: 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.

Kredit dan pengebilan

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.

OperasiKos kreditKetersediaan
GET /v1/status0Langsung
GET /v1/account0Langsung
GET /v1/words/{word}1–5Langsung
GET /v1/words/search1Langsung
GET /v1/words/random1 per wordLangsung
POST /v1/words/batchBerdasarkan rekod yang dikembalikanLangsung

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 dan tidak memproses operasi.

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

Cipta kunci berasingan untuk pembangunan, pementasan dan pengeluaran. Wordly hanya menyimpan cincangan kriptografi bagi setiap kunci; nilai lengkap dipaparkan sekali semasa penciptaan.

  • Namakan kunci mengikut persekitaran atau perkhidmatan.
  • Gunakan pembolehubah persekitaran atau stor rahsia terurus.
  • Batalkan kunci serta-merta jika ia mungkin telah terdedah.
  • Putar kekunci tanpa menggunakan semula nilai lama.
  • Jangan hantar kunci dalam rentetan pertanyaan.

Format jawapan

Respons yang berjaya menggunakan tahap teratas data objek dan mungkin termasuk a meta objek. Ralat sentiasa menggunakan peringkat atasan error objek dengan mesin yang stabil boleh dibaca code dan boleh dibaca manusia message.

Permintaan berjaya
{
  "data": { ... },
  "meta": {
    "credits_used": 1,
    "request_id": "..."
  }
}
Permintaan gagal
{
  "error": {
    "code": "invalid_api_key",
    "message": "..."
  }
}

Simpan request_id apabila menghubungi sokongan tentang permintaan bil yang berjaya. JSON dikodkan UTF-8 dan pelanggan harus menghantar 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.

Rujukan titik akhir

Titik akhir pengeluaran

DAPATKAN/v1/statusLangsung

Mengembalikan kesihatan perkhidmatan awam dan maklumat versi API. Titik akhir ini tidak memerlukan pengesahan dan kos sifar kredit.

Contoh permintaan

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

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

Pengepala

NamaDiperlukanPenerangan
AuthorizationyaBearer wly_live_...
AcceptDisyorkanapplication/json

Tajuk respons

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.

Titik akhir perbendaharaan kata

20,000+ catalog entries are live.

Setiap rekod melaporkannya completeness sebagai catalog, translated, or enriched. Fields that are not available are returned as null atau objek kosong dan bukannya data ciptaan.

GET /v1/words/{word}

Mengembalikan padanan perkataan yang tepat. guna languages=tr,de,fr untuk mengembalikan terjemahan yang diminta sahaja. Katalog atau rekod terjemahan berharga 1 kredit; profil yang diperkaya sepenuhnya berharga 5 kredit.

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

GET /v1/words/search

Cari dengan q dan pilihan level, part_of_speech, category, limit, and cursor. Limits range from 1 to 50. Pass meta.next_cursor ke dalam permintaan seterusnya.

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

GET /v1/words/random

Mengembalikan 1–20 perkataan rawak. Tapis mengikut level, part_of_speech, or category. Each returned slot costs one credit.

POST /v1/words/batch

Mencari antara 1 dan 50 perkataan unik dalam satu permintaan. Respons mengekalkan pesanan permintaan dan menandakan setiap item dengan 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

Mengembalikan kesemua 30 antara muka yang disokong dan tempat mesej API. Terjemahan kosa kata dikembalikan hanya apabila tersedia. Titik akhir ini adalah awam dan kos sifar kredit.

Had kadar

Setiap kunci API dihadkan kepada 120 permintaan yang diterima setiap minit bergulir. Jawapan termasuk X-RateLimit-Limit dan X-RateLimit-Remaining. A 429 rate_limit_exceeded tindak balas termasuk Retry-After: 60.

DAPATKAN/v1/languagesLive · 0 credits

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

Query parameters

NamaTypeDiperlukanRulesPenerangan
langstringNoSupported locale codeLanguage for human-readable messages.

Contoh permintaan

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

NamaLocationTypeDiperlukanRules and meaning
wordPathstringyaExact 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.

Contoh permintaan

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

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

Query parameters

NamaTypeDiperlukanDefault / limitPenerangan
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.

Contoh permintaan

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.

Pengepala

NamaDiperlukanValue
AuthorizationyaBearer wly_live_...
Content-Typeyaapplication/json
AcceptDisyorkanapplication/json

JSON body

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

Contoh permintaan

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

FieldTypeNullablePenerangan
idstringNoStable URL-safe slug.
wordstringNoCanonical English word.
part_of_speechstringyaGrammatical class.
levelstringyaLearning difficulty or catalog level.
definitionstringyaConcise English definition.
examplestringyaNatural example sentence.
phoneticstringyaPronunciation 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 stringyaLearning image URL.
media.audio_urlURL stringyaPronunciation audio URL.
media.attributionobjectNoRequired media attribution metadata.
completenessenumNocatalog, translated, or enriched.

Meta object

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

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

Kesilapan

HTTPKodMaknanyaTindakan pelanggan
401invalid_api_keyKunci hilang, cacat bentuk, dibatalkan atau tidak aktif.Semak pengepala Pembawa atau gantikan kekunci.
402credits_exhaustedAkaun tidak mempunyai kredit untuk operasi.Hentikan percubaan semula dan arahkan pelanggan ke pengebilan.
404not_foundTitik akhir yang diminta tidak tersedia.Semak laluan dan versi API.
404word_not_foundEntri perbendaharaan kata yang diminta tidak tersedia.Semak ejaan atau gunakan carian.
422invalid_requestParameter atau badan kelompok tidak sah.Betulkan permintaan sebelum mencuba semula.
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_exceededKunci API melebihi 120 permintaan seminit.Wait for Retry-After.
5xxserver_errorKegagalan sebelah pelayan yang tidak dijangka.Cuba semula dengan mundur; hubungi sokongan jika berterusan.

Dasar cuba semula yang disyorkan

Jangan cuba semula 401, 402, or 404 secara automatik. Untuk sementara 5xx respons, gunakan backoff eksponen dengan jitter dan had cuba semula yang ketat. Jangan sekali-kali membuat gelung percubaan semula tanpa had kerana setiap permintaan disahkan yang diterima boleh menggunakan kredit.

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

Ular sawa

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

Jangan hantar kunci Wordly di dalam aplikasi Flutter. Contohnya terdapat dalam bahagian belakang Dart atau fungsi pelayan yang dipercayai.

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

Senarai semak pengeluaran

  • Permintaan Proxy Wordly melalui bahagian belakang yang dipercayai.
  • Tetapkan sambungan dan tamat masa tindak balas.
  • pegang 401, 402, 404, and 5xx secara berasingan.
  • Query GET /v1/account when your application needs the current balance.
  • Log titik akhir, status, kependaman dan request_id tanpa mengelog kunci API.
  • Gunakan kekunci berasingan bagi setiap persekitaran dan putarkannya secara berkala.
  • Cache stable vocabulary responses in your backend when appropriate.

Bersedia untuk membuat permintaan pertama anda?

Buat akaun, sahkan e-mel anda dan terima 50 kredit percuma.

Buat akaun percuma

Perlukan bantuan penyepaduan? E-mel [email protected].