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.
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.
- 1Buat akaun
Daftar dengan hanya alamat e-mel dan kata laluan.
- 2Sahkan e-mel anda
Masukkan kod yang dihantar oleh
[email protected]. Verification grants 50 free credits. - 3Simpan kunci API anda
Salin yang dihasilkan
wly_live_...kunci dan simpannya dalam pembolehubah persekitaran sebelah pelayan. - 4Buat permintaan ujian
Hubungi titik akhir akaun untuk mengesahkan pengesahan dan melihat baki yang tinggal.
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" }
}URL asas dan versi
Semua titik akhir pengeluaran disajikan daripada URL asas versi berikut:
https://api.wordlyenglish.com/v1Memecah 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_keyJangan 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.
| Operasi | Kos kredit | Ketersediaan |
|---|---|---|
GET /v1/status | 0 | Langsung |
GET /v1/account | 0 | Langsung |
GET /v1/words/{word} | 1–5 | Langsung |
GET /v1/words/search | 1 | Langsung |
GET /v1/words/random | 1 per word | Langsung |
POST /v1/words/batch | Berdasarkan rekod yang dikembalikan | Langsung |
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.
{
"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.
{
"data": { ... },
"meta": {
"credits_used": 1,
"request_id": "..."
}
}{
"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.
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.
Titik akhir pengeluaran
/v1/statusLangsungMengembalikan 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" }
}/v1/accountLive · 0 creditsValidates the supplied key and returns the current account balance without charging a credit.
Pengepala
| Nama | Diperlukan | Penerangan |
|---|---|---|
Authorization | ya | Bearer wly_live_... |
Accept | Disyorkan | application/json |
Tajuk respons
X-Credits-Remaining is returned only by this balance endpoint.
200 · Success
{
"data": { "message": "Authenticated", "credits_remaining": 1250 },
"meta": { "lang": "en" }
}Titik akhir perbendaharaan kata
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.
/v1/languagesLive · 0 creditsLists all supported interface and API-message locales. Vocabulary translations are returned only when a record contains them.
Query parameters
| Nama | Type | Diperlukan | Rules | Penerangan |
|---|---|---|---|---|
lang | string | No | Supported locale code | Language 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" }
}/v1/words/{word}Live · 1–5 creditsReturns one exact vocabulary record. Catalog and translated records cost 1 credit; enriched records cost 5 credits.
Parameters
| Nama | Location | Type | Diperlukan | Rules and meaning |
|---|---|---|---|---|
word | Path | string | ya | 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. |
Contoh permintaan
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/searchLangsung · 1 kreditSearches active vocabulary in alphabetical order. Use the returned cursor for stable forward pagination.
Query parameters
| Nama | Type | Diperlukan | Default / limit | Penerangan |
|---|---|---|---|---|
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. |
Contoh permintaan
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
| Nama | Type | Diperlukan | Default / limit | Penerangan |
|---|---|---|---|---|
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. |
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 }
}/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.
Pengepala
| Nama | Diperlukan | Value |
|---|---|---|
Authorization | ya | Bearer wly_live_... |
Content-Type | ya | application/json |
Accept | Disyorkan | application/json |
JSON body
| Field | Type | Diperlukan | Rules | Penerangan |
|---|---|---|---|---|
words | string[] | ya | 1–50 items; each max 120 chars | Words to resolve; duplicates are normalized and removed. |
languages | string[] | No | Supported locale codes | Translations 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" }
}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 | Penerangan |
|---|---|---|---|
id | string | No | Stable URL-safe slug. |
word | string | No | Canonical English word. |
part_of_speech | string | ya | Grammatical class. |
level | string | ya | Learning difficulty or catalog level. |
definition | string | ya | Concise English definition. |
example | string | ya | Natural example sentence. |
phonetic | string | ya | 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 | ya | Learning image URL. |
media.audio_url | URL string | ya | Pronunciation audio URL. |
media.attribution | object | No | Required media attribution metadata. |
completeness | enum | No | catalog, translated, or enriched. |
Meta object
| Field | Type | When present | Penerangan |
|---|---|---|---|
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 | Penerangan |
|---|---|---|
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. |
Kesilapan
| HTTP | Kod | Maknanya | Tindakan pelanggan |
|---|---|---|---|
| 401 | invalid_api_key | Kunci hilang, cacat bentuk, dibatalkan atau tidak aktif. | Semak pengepala Pembawa atau gantikan kekunci. |
| 402 | credits_exhausted | Akaun tidak mempunyai kredit untuk operasi. | Hentikan percubaan semula dan arahkan pelanggan ke pengebilan. |
| 404 | not_found | Titik akhir yang diminta tidak tersedia. | Semak laluan dan versi API. |
| 404 | word_not_found | Entri perbendaharaan kata yang diminta tidak tersedia. | Semak ejaan atau gunakan carian. |
| 422 | invalid_request | Parameter atau badan kelompok tidak sah. | Betulkan permintaan sebelum mencuba semula. |
| 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 | Kunci API melebihi 120 permintaan seminit. | Wait for Retry-After. |
| 5xx | server_error | Kegagalan 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, and5xxsecara berasingan. - Query
GET /v1/accountwhen your application needs the current balance. - Log titik akhir, status, kependaman dan
request_idtanpa 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.
Perlukan bantuan penyepaduan? E-mel [email protected].