Dokumentasi pengembang

Bangun dengan Wordly API.

Gunakan kunci API sisi server, buat permintaan HTTPS, dan lacak setiap panggilan melalui model penagihan berbasis kredit yang dapat diprediksi. Referensi ini mendokumentasikan titik akhir yang saat ini tersedia dalam produksi dan dengan jelas menandai titik akhir yang masih dipersiapkan.

API version v1Format JSONTransportasi HTTPS sajaSaldo gratis 50 creditsAPI Terbuka Unduh skemaPostman CollectionPostman Environment

Mulai cepat

Buat akun gratis, verifikasi email Anda menggunakan kode enam digit, dan salin kunci API yang ditampilkan satu kali di dasbor pengembang Anda.

  1. 1
    Buat akun

    Daftar hanya dengan alamat email dan kata sandi.

  2. 2
    Verifikasi email Anda

    Masukkan kode yang dikirimkan oleh [email protected]. Verification grants 50 free credits.

  3. 3
    Simpan kunci API Anda

    Salin yang dihasilkan wly_live_... kunci dan simpan dalam variabel lingkungan sisi server.

  4. 4
    Buat permintaan tes

    Hubungi titik akhir akun untuk memverifikasi otentikasi dan melihat sisa saldo.

cangkang
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 dasar dan pembuatan versi

Semua titik akhir produksi dilayani dari URL dasar berversi berikut:

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

Menghentikan respons atau perubahan perilaku akan menggunakan versi jalur baru. Bidang aditif dapat diperkenalkan di dalamnya v1, so clients should ignore response properties they do not recognize.

Otentikasi

Titik akhir yang diautentikasi memerlukan kunci API di HTTP Authorization header menggunakan skema Bearer.

Authorization: Bearer wly_live_your_api_key
Jangan mengekspos kunci API.

Jangan pernah menempatkan kunci langsung di browser JavaScript, repositori Git publik, tangkapan layar, log, atau aplikasi seluler terdistribusi. Panggil Wordly API dari backend Anda dan biarkan aplikasi Anda berkomunikasi dengan backend tersebut.

Pesan API yang dilokalkan

Atur bahasa respons dengan ?lang=tr atau standar Accept-Language tajuk. Parameter kueri diutamakan. Setiap respons JSON mendeklarasikan lokal yang dipilih 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"

Kode bahasa yang didukung: 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 penagihan

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.

OperasiBiaya kreditKetersediaan
GET /v1/status0Hidup
GET /v1/account0Hidup
GET /v1/words/{word}1–5Hidup
GET /v1/words/search1Hidup
GET /v1/words/random1 per wordHidup
POST /v1/words/batchBerdasarkan catatan yang dikembalikanHidup

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

Buat kunci terpisah untuk pengembangan, pementasan, dan produksi. Wordly hanya menyimpan hash kriptografi dari setiap kunci; nilai lengkap ditampilkan satu kali saat pembuatan.

  • Kunci nama berdasarkan lingkungan atau layanan.
  • Gunakan variabel lingkungan atau penyimpanan rahasia yang dikelola.
  • Segera cabut kunci jika mungkin telah terbuka.
  • Putar kunci tanpa menggunakan kembali nilai lama.
  • Jangan mengirim kunci dalam string kueri.

Format tanggapan

Respons yang berhasil menggunakan tingkat atas data objek dan dapat mencakup a meta objek. Kesalahan selalu menggunakan tingkat atas error objek dengan stabil yang dapat dibaca mesin code dan dapat dibaca manusia message.

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

Pertahankan request_id saat menghubungi dukungan tentang permintaan penagihan yang berhasil. JSON dikodekan UTF-8 dan klien harus mengirim 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.

Referensi titik akhir

Titik akhir produksi

DAPATKAN/v1/statusHidup

Mengembalikan informasi kesehatan layanan publik dan versi API. Titik akhir ini tidak memerlukan autentikasi dan tidak dikenakan biaya 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.

Header

NamaDiperlukanDeskripsi
AuthorizationYaBearer wly_live_...
AcceptDirekomendasikanapplication/json

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

20,000+ catalog entries are live.

Setiap catatan melaporkannya completeness sebagai catalog, translated, or enriched. Fields that are not available are returned as null atau objek kosong, bukan data yang ditemukan.

GET /v1/words/{word}

Mengembalikan kata yang sama persis. Gunakan languages=tr,de,fr untuk mengembalikan hanya terjemahan yang diminta. Katalog atau catatan yang diterjemahkan 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 opsional level, part_of_speech, category, limit, and cursor. Limits range from 1 to 50. Pass meta.next_cursor ke permintaan berikutnya.

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 kata acak. Saring berdasarkan level, part_of_speech, or category. Each returned slot costs one credit.

POST /v1/words/batch

Mencari antara 1 dan 50 kata unik dalam satu permintaan. Responsnya mempertahankan urutan permintaan dan menandai 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 30 antarmuka yang didukung dan lokal pesan API. Terjemahan kosakata dikembalikan hanya jika tersedia. Titik akhir ini bersifat publik dan tidak memerlukan biaya kredit.

Batas tarif

Setiap kunci API dibatasi hingga 120 permintaan yang diterima per menit berjalan. Tanggapannya meliputi X-RateLimit-Limit dan X-RateLimit-Remaining. A 429 rate_limit_exceeded respon 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

NamaTypeDiperlukanRulesDeskripsi
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

cangkang
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 / limitDeskripsi
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.

Header

NamaDiperlukanValue
AuthorizationYaBearer wly_live_...
Content-TypeYaapplication/json
AcceptDirekomendasikanapplication/json

JSON body

FieldTypeDiperlukanRulesDeskripsi
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

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

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

Kesalahan

HTTPKodeArtinyaTindakan klien
401invalid_api_keyKunci hilang, salah format, dicabut, atau tidak aktif.Periksa header Bearer atau ganti kuncinya.
402credits_exhaustedAkun tersebut tidak memiliki kredit untuk operasi tersebut.Hentikan percobaan ulang dan arahkan pelanggan ke penagihan.
404not_foundTitik akhir yang diminta tidak tersedia.Periksa jalur dan versi API.
404word_not_foundEntri kosakata yang diminta tidak tersedia.Periksa ejaan atau gunakan pencarian.
422invalid_requestParameter atau isi batch tidak valid.Perbaiki permintaan sebelum mencoba lagi.
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 per menit.Wait for Retry-After.
5xxserver_errorKegagalan sisi server yang tidak terduga.Coba lagi dengan kemunduran; hubungi dukungan jika terus-menerus.

Kebijakan percobaan ulang yang disarankan

Jangan mencoba lagi 401, 402, or 404 secara otomatis. Untuk sementara 5xx respons, gunakan backoff eksponensial dengan jitter dan batas coba lagi yang ketat. Jangan pernah membuat putaran percobaan ulang tanpa batas karena setiap permintaan terotentikasi yang diterima dapat menghabiskan 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 piton

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

Panah / Berkibar

Jangan mengirimkan kunci Wordly di dalam aplikasi Flutter. Contohnya termasuk dalam fungsi server atau backend Dart yang tepercaya.

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

Daftar periksa produksi

  • Permintaan Proxy Wordly melalui backend tepercaya.
  • Tetapkan batas waktu koneksi dan respons.
  • Tangani 401, 402, 404, and 5xx secara terpisah.
  • Query GET /v1/account when your application needs the current balance.
  • Catat titik akhir, status, latensi, dan request_id tanpa mencatat kunci API.
  • Gunakan kunci terpisah per lingkungan dan putar secara berkala.
  • Cache stable vocabulary responses in your backend when appropriate.

Siap untuk membuat permintaan pertama Anda?

Buat akun, verifikasi email Anda, dan terima 50 kredit gratis.

Buat akun gratis

Butuh bantuan integrasi? Surel [email protected].