Saltearse al contenido

Referencia de API

URL Base

http://localhost:4000/api/v1

Autenticación

Todos los endpoints requieren el header x-api-key:

x-api-key: sk_your_api_key

Endpoints

POST /exercises/evaluate

Evalúa la respuesta de un usuario a un ejercicio.

Headers:

HeaderRequeridoDescripción
x-api-keyTu API key
Content-Typeapplication/json

Body:

CampoTipoRequeridoDescripción
exerciseIdstringIdentificador del ejercicio
areastringÁrea: listening, reading, writing, vocabulary, grammar
typestringTipo: multiple_choice, fill_blank, open_answer
answerstringRespuesta del usuario
correctAnswerstringNoRespuesta correcta para comparación
difficultynumberNoNivel de dificultad (1-5)

Ejemplo:

{
"exerciseId": "ex_001",
"area": "listening",
"type": "multiple_choice",
"answer": "B",
"correctAnswer": "B",
"difficulty": 2
}

Respuesta 201:

{
"correct": true,
"score": 10,
"feedback": "¡Correcto!",
"metadata": {
"area": "listening",
"type": "multiple_choice"
}
}

Respuesta 401:

{
"statusCode": 401,
"message": "API key inválida o faltante",
"error": "Unauthorized"
}

POST /admin/keys

Genera una nueva API key.

Body:

CampoTipoRequeridoDescripción
namestringNombre descriptivo para la key

Ejemplo:

{
"name": "mi-app-frontend"
}

Respuesta 201:

{
"key": "sk_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2",
"message": "Guarda esta key de forma segura. No se mostrará de nuevo."
}

GET /admin/keys

Lista todas las API keys registradas (sin mostrar las keys completas).

Respuesta 200:

[
{
"keyPreview": "sk_a1b2c...xyz9",
"name": "Default (desde .env)",
"createdAt": "2026-05-04T13:00:00.000Z",
"lastUsedAt": "2026-05-04T13:05:00.000Z",
"isActive": true
}
]

DELETE /admin/keys/:keyHash

Revoca una API key.

Path params:

ParamTipoDescripción
keyHashstringHash SHA-256 de la key

Respuesta 200:

{
"revoked": true
}

Códigos de Estado

CódigoSignificado
200Éxito
201Recurso creado
400Bad Request (validación fallida)
401Unauthorized (API key inválida o faltante)
404Not Found
500Internal Server Error