Documentación del desarrollador

Construya con la API de Wordly.

Utilice una clave API del lado del servidor, realice solicitudes HTTPS y realice un seguimiento de cada llamada a través de un modelo de facturación predecible basado en crédito. Esta referencia documenta los puntos finales actualmente disponibles en producción y marca claramente los puntos finales que aún se están preparando.

Versión API v1Formato JSONTransporte Solo HTTPSSaldo libre 50 créditosAPI abierta Descargar esquemaPostman CollectionPostman Environment

Inicio rápido

Cree una cuenta gratuita, verifique su correo electrónico usando el código de seis dígitos y copie la clave API que se muestra una vez en su panel de desarrollador.

  1. 1
    Crea una cuenta

    Regístrese solo con una dirección de correo electrónico y contraseña.

  2. 2
    Verifica tu correo electrónico

    Introduce el código enviado por [email protected]. La verificación otorga 50 créditos gratis.

  3. 3
    Guarde su clave API

    Copiar lo generado wly_live_... key y guárdela en una variable de entorno del lado del servidor.

  4. 4
    Hacer una solicitud de prueba

    Llame al punto final de la cuenta para verificar la autenticación y ver el saldo restante.

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

URL base y versiones

Todos los puntos finales de producción se sirven desde la siguiente URL base versionada:

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

Los cambios importantes en la respuesta o el comportamiento utilizarán una nueva versión de ruta. Se podrán introducir campos adicionales dentro v1, por lo que los clientes deben ignorar las propiedades de respuesta que no reconocen.

Autenticación

Los puntos finales autenticados requieren una clave API en HTTP Authorization encabezado usando el esquema Portador.

Authorization: Bearer wly_live_your_api_key
No exponga las claves API.

Nunca coloque una clave activa en JavaScript del navegador, repositorios públicos de Git, capturas de pantalla, registros o una aplicación móvil distribuida. Llame a Wordly API desde su backend y permita que su propia aplicación se comunique con ese backend.

Mensajes API localizados

Configure el idioma de respuesta con ?lang=tr o el estándar Accept-Language encabezado. Los parámetros de consulta tienen prioridad. Cada respuesta JSON declara la configuración regional seleccionada en Content-Language y meta.lang. Los códigos de error permanecen estables en inglés para el manejo programático; sólo se localiza el mensaje legible por humanos.

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

Códigos de idioma admitidos: 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.

Créditos y facturación

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.

OperaciónCosto del créditoDisponibilidad
GET /v1/status0en vivo
GET /v1/account0en vivo
GET /v1/words/{word}1–5en vivo
GET /v1/words/search1en vivo
GET /v1/words/random1 por palabraen vivo
POST /v1/words/batchBasado en registros devueltosen vivo

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 y no procesa la operación.

respuesta 402
{
  "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"
  }
}

Ciclo de vida de la clave API

Cree claves independientes para desarrollo, puesta en escena y producción. Wordly almacena sólo un hash criptográfico de cada clave; el valor completo se muestra una vez en el momento de la creación.

  • Nombrar claves por entorno o servicio.
  • Utilice variables de entorno o un almacén de secretos administrado.
  • Revocar una clave inmediatamente si pudo haber quedado expuesta.
  • Gire las claves sin reutilizar valores antiguos.
  • No envíe claves en cadenas de consulta.

Formato de respuesta

Las respuestas exitosas utilizan un nivel superior data objeto y puede incluir un meta objeto. Los errores siempre utilizan un nivel superior error objeto con una lectura estable por máquina. code y legible por humanos message.

Solicitud exitosa
{
  "data": { ... },
  "meta": {
    "credits_used": 1,
    "request_id": "..."
  }
}
Solicitud fallida
{
  "error": {
    "code": "invalid_api_key",
    "message": "..."
  }
}

Mantenga el request_id al comunicarse con soporte sobre una solicitud facturada exitosamente. JSON está codificado en UTF-8 y los clientes deben enviar 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.

Referencia de punto final

Puntos finales de producción

OBTENER/v1/statusen vivo

Devuelve información sobre el estado del servicio público y la versión de API. Este punto final no requiere autenticación y no cuesta créditos.

Solicitud de ejemplo

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

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

Encabezados

NombreRequeridoDescripción
AuthorizationsiBearer wly_live_...
AcceptRecomendadoapplication/json

Encabezados de respuesta

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.

Puntos finales de vocabulario

Más de 20.000 entradas de catálogo están activas.

Cada registro reporta su completeness como catalog, translated, o enriched. Los campos que no están disponibles se devuelven como null o un objeto vacío en lugar de datos inventados.

GET /v1/words/{word}

Devuelve una coincidencia exacta de palabras. uso languages=tr,de,fr para devolver sólo las traducciones solicitadas. El catálogo o los registros traducidos cuestan 1 crédito; Los perfiles completamente enriquecidos cuestan 5 créditos.

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

GET /v1/words/search

Buscar con q y opcional level, part_of_speech, category, limit, y cursor. Los límites varían de 1 a 50. Pasar meta.next_cursor en la siguiente solicitud.

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

GET /v1/words/random

Devuelve entre 1 y 20 palabras aleatorias. Filtrar por level, part_of_speech, o category. Cada espacio devuelto cuesta un crédito.

POST /v1/words/batch

Busca entre 1 y 50 palabras únicas en una sola solicitud. La respuesta conserva el orden de la solicitud y marca cada elemento con 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

Devuelve las 30 interfaces compatibles y configuraciones regionales de mensajes API. Las traducciones de vocabulario se devuelven solo cuando están disponibles. Este punto final es público y no cuesta créditos.

Límite de tarifa

Cada clave API está limitada a 120 solicitudes aceptadas por minuto consecutivo. Las respuestas incluyen X-RateLimit-Limit y X-RateLimit-Remaining. un 429 rate_limit_exceeded la respuesta incluye Retry-After: 60.

OBTENER/v1/languagesLive · 0 credits

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

Query parameters

NombreTypeRequeridoRulesDescripción
langstringNoSupported locale codeLanguage for human-readable messages.

Solicitud de ejemplo

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

NombreLocationTypeRequeridoRules and meaning
wordPathstringsiExact 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.

Solicitud de ejemplo

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

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

Query parameters

NombreTypeRequeridoDefault / limitDescripción
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.

Solicitud de ejemplo

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.

Encabezados

NombreRequeridoValue
AuthorizationsiBearer wly_live_...
Content-Typesiapplication/json
AcceptRecomendadoapplication/json

JSON body

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

Solicitud de ejemplo

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

FieldTypeNullableDescripción
idstringNoStable URL-safe slug.
wordstringNoCanonical English word.
part_of_speechstringsiGrammatical class.
levelstringsiLearning difficulty or catalog level.
definitionstringsiConcise English definition.
examplestringsiNatural example sentence.
phoneticstringsiPronunciation 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 stringsiLearning image URL.
media.audio_urlURL stringsiPronunciation audio URL.
media.attributionobjectNoRequired media attribution metadata.
completenessenumNocatalog, translated, o enriched.

Meta object

FieldTypeWhen presentDescripción
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

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

Errores

HTTPCódigoSignificadoAcción del cliente
401invalid_api_keyClave faltante, mal formada, revocada o inactiva.Verifique el encabezado del portador o reemplace la clave.
402credits_exhaustedLa cuenta carece de créditos para la operación.Detenga los reintentos y dirija al cliente a facturación.
404not_foundEl punto final solicitado no está disponible.Verifique la ruta y la versión de API.
404word_not_foundLa entrada de vocabulario solicitada no está disponible.Revisa la ortografía o utiliza la búsqueda.
422invalid_requestUn parámetro o cuerpo de lote no es válido.Corrija la solicitud antes de volver a intentarlo.
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_exceededLa clave API superó las 120 solicitudes por minuto.Esperar Retry-After.
5xxserver_errorUn fallo inesperado del lado del servidor.Reintentar con retroceso; Póngase en contacto con el soporte si persiste.

Política de reintento recomendada

no lo vuelvas a intentar 401, 402, o 404 automáticamente. Para transitorio 5xx respuestas, utilice un retroceso exponencial con fluctuación y un límite estricto de reintentos. Nunca cree un ciclo de reintento ilimitado porque cada solicitud autenticada aceptada puede consumir créditos.

JavaScript/Nodo.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);

pitón

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

Dardo / Aleteo

No envíe la clave de Wordly dentro de una aplicación Flutter. El ejemplo pertenece a una función de servidor o backend confiable de Dart.

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

Lista de verificación de producción

  • Solicitudes proxy de Wordly a través de un backend confiable.
  • Establezca tiempos de espera de conexión y respuesta.
  • Manejar 401, 402, 404, y 5xx por separado.
  • Query GET /v1/account when your application needs the current balance.
  • Registrar punto final, estado, latencia y request_id sin registrar la clave API.
  • Utilice claves separadas por entorno y rótelas periódicamente.
  • Cache stable vocabulary responses in your backend when appropriate.

¿Listo para hacer tu primera solicitud?

Cree una cuenta, verifique su correo electrónico y reciba 50 créditos gratis.

Crear cuenta gratis

¿Necesita ayuda para la integración? Correo electrónico [email protected].