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.
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.
- 1Crea una cuenta
Regístrese solo con una dirección de correo electrónico y contraseña.
- 2Verifica tu correo electrónico
Introduce el código enviado por
[email protected]. La verificación otorga 50 créditos gratis. - 3Guarde su clave API
Copiar lo generado
wly_live_...key y guárdela en una variable de entorno del lado del servidor. - 4Hacer una solicitud de prueba
Llame al punto final de la cuenta para verificar la autenticación y ver el saldo restante.
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 base y versiones
Todos los puntos finales de producción se sirven desde la siguiente URL base versionada:
https://api.wordlyenglish.com/v1Los 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_keyNunca 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ón | Costo del crédito | Disponibilidad |
|---|---|---|
GET /v1/status | 0 | en vivo |
GET /v1/account | 0 | en vivo |
GET /v1/words/{word} | 1–5 | en vivo |
GET /v1/words/search | 1 | en vivo |
GET /v1/words/random | 1 por palabra | en vivo |
POST /v1/words/batch | Basado en registros devueltos | en 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.
{
"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.
{
"data": { ... },
"meta": {
"credits_used": 1,
"request_id": "..."
}
}{
"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.
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.
Puntos finales de producción
/v1/statusen vivoDevuelve 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" }
}/v1/accountLive · 0 creditsValidates the supplied key and returns the current account balance without charging a credit.
Encabezados
| Nombre | Requerido | Descripción |
|---|---|---|
Authorization | si | Bearer wly_live_... |
Accept | Recomendado | application/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" }
}Puntos finales de vocabulario
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.
/v1/languagesLive · 0 creditsLists all supported interface and API-message locales. Vocabulary translations are returned only when a record contains them.
Query parameters
| Nombre | Type | Requerido | Rules | Descripción |
|---|---|---|---|---|
lang | string | No | Supported locale code | Language 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" }
}/v1/words/{word}Live · 1–5 creditsReturns one exact vocabulary record. Catalog and translated records cost 1 credit; enriched records cost 5 credits.
Parameters
| Nombre | Location | Type | Requerido | Rules and meaning |
|---|---|---|---|---|
word | Path | string | si | 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. |
Solicitud de ejemplo
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/searchEn vivo · 1 créditoSearches active vocabulary in alphabetical order. Use the returned cursor for stable forward pagination.
Query parameters
| Nombre | Type | Requerido | Default / limit | Descripción |
|---|---|---|---|---|
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. |
Solicitud de ejemplo
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
| Nombre | Type | Requerido | Default / limit | Descripción |
|---|---|---|---|---|
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. |
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 }
}/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.
Encabezados
| Nombre | Requerido | Value |
|---|---|---|
Authorization | si | Bearer wly_live_... |
Content-Type | si | application/json |
Accept | Recomendado | application/json |
JSON body
| Field | Type | Requerido | Rules | Descripción |
|---|---|---|---|---|
words | string[] | si | 1–50 items; each max 120 chars | Words to resolve; duplicates are normalized and removed. |
languages | string[] | No | Supported locale codes | Translations 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" }
}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 | Descripción |
|---|---|---|---|
id | string | No | Stable URL-safe slug. |
word | string | No | Canonical English word. |
part_of_speech | string | si | Grammatical class. |
level | string | si | Learning difficulty or catalog level. |
definition | string | si | Concise English definition. |
example | string | si | Natural example sentence. |
phonetic | string | si | 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 | si | Learning image URL. |
media.audio_url | URL string | si | Pronunciation audio URL. |
media.attribution | object | No | Required media attribution metadata. |
completeness | enum | No | catalog, translated, o enriched. |
Meta object
| Field | Type | When present | Descripción |
|---|---|---|---|
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 | Descripción |
|---|---|---|
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. |
Errores
| HTTP | Código | Significado | Acción del cliente |
|---|---|---|---|
| 401 | invalid_api_key | Clave faltante, mal formada, revocada o inactiva. | Verifique el encabezado del portador o reemplace la clave. |
| 402 | credits_exhausted | La cuenta carece de créditos para la operación. | Detenga los reintentos y dirija al cliente a facturación. |
| 404 | not_found | El punto final solicitado no está disponible. | Verifique la ruta y la versión de API. |
| 404 | word_not_found | La entrada de vocabulario solicitada no está disponible. | Revisa la ortografía o utiliza la búsqueda. |
| 422 | invalid_request | Un parámetro o cuerpo de lote no es válido. | Corrija la solicitud antes de volver a intentarlo. |
| 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 | La clave API superó las 120 solicitudes por minuto. | Esperar Retry-After. |
| 5xx | server_error | Un 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, y5xxpor separado. - Query
GET /v1/accountwhen your application needs the current balance. - Registrar punto final, estado, latencia y
request_idsin 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.
¿Necesita ayuda para la integración? Correo electrónico [email protected].