Geliştirici belgeleri

Wordly API ile oluşturun.

Sunucu tarafı bir API anahtarı kullanın, HTTPS istekleri yapın ve öngörülebilir bir kredi tabanlı faturalandırma modeli aracılığıyla her çağrıyı izleyin. Bu referans, şu anda üretimde mevcut olan uç noktaları belgelemekte ve halen hazırlanmakta olan uç noktaları açıkça belirtmektedir.

API sürümü v1Biçim JSONTaşıma Yalnızca HTTPSSerbest bakiye 50 krediOpenAPI Şemayı indirPostman CollectionPostman Environment

Hızlı başlangıç

Ücretsiz bir hesap oluşturun, altı haneli kodu kullanarak e-postanızı doğrulayın ve geliştirici kontrol panelinizde bir kez gösterilen API anahtarını kopyalayın.

  1. 1
    Hesap oluştur

    Yalnızca e-posta adresi ve şifreyle kaydolun.

  2. 2
    E-postanızı doğrulayın

    tarafından gönderilen kodu girin [email protected]. Doğrulama sonrasında 50 ücretsiz kredi verilir.

  3. 3
    API anahtarınızı saklayın

    Oluşturulanı kopyala wly_live_... anahtarını kullanın ve onu sunucu tarafı ortam değişkeninde tutun.

  4. 4
    Test isteğinde bulunun

    Kimlik doğrulamayı doğrulamak ve kalan bakiyeyi görmek için hesap uç noktasını arayın.

Kabuk
curl "https://api.wordlyenglish.com/v1/account" \
  -H "Authorization: Bearer $WORDLY_API_KEY" \
  -H "Accept: application/json"
200 yanıtı
{
  "data": {
    "message": "Authenticated",
    "credits_remaining": 50
  },
  "meta": { "lang": "en" }
}

Temel URL ve sürüm oluşturma

Tüm üretim uç noktalarına aşağıdaki sürüme sahip temel URL'den hizmet verilir:

Temel URLhttps://api.wordlyenglish.com/v1

Yanıt veya davranış değişikliklerini kırmak için yeni bir yol sürümü kullanılacaktır. İlave alanlar eklenebilir v1, bu nedenle istemciler tanımadıkları yanıt alanlarını yok saymalıdır.

Kimlik doğrulama

Kimliği doğrulanmış uç noktalar, HTTP'de bir API anahtarı gerektirir Authorization Taşıyıcı şemasını kullanarak başlık.

Authorization: Bearer wly_live_your_api_key
API anahtarlarını açığa çıkarmayın.

Tarayıcı JavaScript'ine, genel Git depolarına, ekran görüntülerine, günlüklere veya dağıtılmış bir mobil uygulamaya asla canlı anahtar yerleştirmeyin. Arka uçtan Wordly API'yi çağırın ve kendi uygulamanızın bu arka uçla iletişim kurmasına izin verin.

Yerelleştirilmiş API mesajları

Yanıt dilini şununla ayarlayın: ?lang=tr veya standart Accept-Language başlık. Sorgu parametreleri önceliklidir. Her JSON yanıtı, seçilen yerel ayarı bildirir. Content-Language ve meta.lang. Programatik kullanım için hata kodları İngilizce ve sabit kalır; yalnızca okunabilir mesaj yerelleştirilir.

curl "https://api.wordlyenglish.com/v1/account?lang=tr" \
  -H "Authorization: Bearer $WORDLY_API_KEY" \
  -H "Accept-Language: tr-TR"

Desteklenen dil kodları: 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.

Krediler ve faturalandırma

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.

OperasyonKredi maliyetiKullanılabilirlik
GET /v1/status0Canlı
GET /v1/account0Canlı
GET /v1/words/{word}1–5Canlı
GET /v1/words/search1Canlı
GET /v1/words/randomKelime başına 1Canlı
POST /v1/words/batchDöndürülen kayıtlara göreCanlı

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 ve işlemi işlemez.

402 yanıtı
{
  "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 anahtarının yaşam döngüsü

Geliştirme, hazırlama ve üretim için ayrı anahtarlar oluşturun. Wordly her anahtarın yalnızca kriptografik karmasını saklar; değerin tamamı oluşturma sırasında bir kez görüntülenir.

  • Anahtarları ortama veya hizmete göre adlandırın.
  • Ortam değişkenlerini veya yönetilen bir gizli depoyu kullanın.
  • Açığa çıkmış olabilecek bir anahtarı derhal iptal edin.
  • Eski değerleri tekrar kullanmadan tuşları döndürün.
  • Anahtarları sorgu dizelerinde göndermeyin.

Yanıt formatı

Başarılı yanıtlar üst düzey bir data nesne ve şunları içerebilir: meta nesne. Hatalar her zaman üst düzey bir değer kullanır error makine tarafından okunabilen kararlı bir nesne code ve insan tarafından okunabilen message.

Başarılı istek
{
  "data": { ... },
  "meta": {
    "credits_used": 1,
    "request_id": "..."
  }
}
Başarısız istek
{
  "error": {
    "code": "invalid_api_key",
    "message": "..."
  }
}

Sakla request_id Başarılı bir faturalandırılmış istek hakkında destek ekibiyle iletişime geçtiğinizde. JSON, UTF-8 kodludur ve istemcilerin göndermesi gerekir 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.

Uç nokta referansı

Üretim uç noktaları

AL/v1/statusCanlı

Kamu hizmeti durumunu ve API sürüm bilgilerini döndürür. Bu uç nokta, kimlik doğrulama gerektirmez ve sıfır krediye mal olur.

Örnek istek

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

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

Başlıklar

İsimGerekliAçıklama
AuthorizationEvetBearer wly_live_...
AcceptÖnerilenapplication/json

Yanıt başlıkları

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.

Kelime uç noktaları

20.000’den fazla katalog kaydı kullanıma hazır.

Her kayıt kendi durumunu bildirir completeness olarak catalog, translatedveya enriched. Kullanılamayan alanlar şu şekilde döndürülür: null veya icat edilmiş veriler yerine boş bir nesne.

GET /v1/words/{word}

Tam bir kelime eşleşmesi döndürür. Kullanım languages=tr,de,fr yalnızca istenen çevirileri döndürmek için. Katalog veya çevrilmiş kayıtların maliyeti 1 kredidir; tamamen zenginleştirilmiş profillerin maliyeti 5 kredidir.

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

GET /v1/words/search

Şu alanlarla arama yapın: q ve isteğe bağlı level, part_of_speech, category, limitve cursor. Limit 1 ile 50 arasındadır. Şunu gönderin: meta.next_cursor bir sonraki talebe.

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

GET /v1/words/random

1-20 rastgele kelimeyi döndürür. Şuna göre filtrele: level, part_of_speechveya category. Döndürülen her öğe bir kredi tutar.

POST /v1/words/batch

Tek bir istekte 1 ile 50 arasında benzersiz kelimeyi arar. Yanıt, istek sırasını korur ve her öğeyi şu şekilde işaretler: 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

Desteklenen 30 arayüzün ve API mesajı yerel ayarının tamamını döndürür. Kelime çevirileri yalnızca mevcut olduğunda döndürülür. Bu uç nokta halka açıktır ve sıfır krediye mal olur.

Oran sınırı

Her API anahtarı, sürekli dakika başına 120 kabul edilen istekle sınırlıdır. Yanıtlar şunları içerir: X-RateLimit-Limit ve X-RateLimit-Remaining. bir 429 rate_limit_exceeded yanıt şunları içerir Retry-After: 60.

AL/v1/languagesLive · 0 credits

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

Query parameters

İsimTypeGerekliRulesAçıklama
langstringNoSupported locale codeLanguage for human-readable messages.

Örnek istek

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

İsimLocationTypeGerekliRules and meaning
wordPathstringEvetExact 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.

Örnek istek

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

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

Query parameters

İsimTypeGerekliDefault / limitAçıklama
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.

Örnek istek

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.

Başlıklar

İsimGerekliValue
AuthorizationEvetBearer wly_live_...
Content-TypeEvetapplication/json
AcceptÖnerilenapplication/json

JSON body

FieldTypeGerekliRulesAçıklama
wordsstring[]Evet1–50 items; each max 120 charsWords to resolve; duplicates are normalized and removed.
languagesstring[]NoSupported locale codesTranslations to include.

Örnek istek

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

FieldTypeNullableAçıklama
idstringNoStable URL-safe slug.
wordstringNoCanonical English word.
part_of_speechstringEvetGrammatical class.
levelstringEvetLearning difficulty or catalog level.
definitionstringEvetConcise English definition.
examplestringEvetNatural example sentence.
phoneticstringEvetPronunciation 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 stringEvetLearning image URL.
media.audio_urlURL stringEvetPronunciation audio URL.
media.attributionobjectNoRequired media attribution metadata.
completenessenumNocatalog, translatedveya enriched.

Meta object

FieldTypeWhen presentAçıklama
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

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

Hatalar

HTTPKodAnlamıİstemci eylemi
401invalid_api_keyEksik, hatalı biçimlendirilmiş, iptal edilmiş veya etkin olmayan anahtar.Taşıyıcı başlığını kontrol edin veya anahtarı değiştirin.
402credits_exhaustedHesapta işlem için gerekli kredi yok.Yeniden denemeleri durdurun ve müşteriyi faturalandırmaya yönlendirin.
404not_foundİstenen uç nokta mevcut değil.Yolu ve API sürümünü kontrol edin.
404word_not_foundİstenilen kelime girişi mevcut değil.Yazımı kontrol edin veya aramayı kullanın.
422invalid_requestBir parametre veya toplu iş gövdesi geçersiz.Yeniden denemeden önce isteği düzeltin.
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 anahtarı dakikada 120 isteği aştı.Şu süreyi bekleyin: Retry-After.
5xxserver_errorBeklenmeyen bir sunucu tarafı hatası.Geri alma ile yeniden deneyin; ısrar ederse desteğe başvurun.

Önerilen yeniden deneme politikası

Tekrar deneme 401, 402veya 404 otomatik olarak. Geçici için 5xx Yanıtlar için titreşimli üstel geri çekilme ve katı bir yeniden deneme sınırı kullanın. Kabul edilen her kimliği doğrulanmış istek kredi tüketebileceğinden asla sınırsız bir yeniden deneme döngüsü oluşturmayın.

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

Wordly anahtarını Flutter uygulamasının içine göndermeyin. Örnek, güvenilir bir Dart arka ucuna veya sunucu işlevine aittir.

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

Üretim kontrol listesi

  • Güvenilir bir arka uç aracılığıyla Proxy Wordly istekleri.
  • Bağlantı ve yanıt zaman aşımlarını ayarlayın.
  • Şu durumları 401, 402, 404ve 5xx ayrı ayrı ele alın.
  • Query GET /v1/account when your application needs the current balance.
  • Uç noktayı, durumu, gecikmeyi ve request_id API anahtarını kaydetmeden.
  • Her ortam için ayrı anahtarlar kullanın ve bunları düzenli aralıklarla değiştirin.
  • Cache stable vocabulary responses in your backend when appropriate.

İlk isteğinizi yapmaya hazır mısınız?

Bir hesap oluşturun, e-postanızı doğrulayın ve 50 ücretsiz kredi kazanın.

Ücretsiz hesap oluştur

Entegrasyon yardımına mı ihtiyacınız var? E-posta [email protected].