Referencia del API
Todos los endpoints con ejemplos. Generada desde OpenAPI.
Toda la superficie del API REST de Replai vive en la documentación interactiva — generada desde el spec OpenAPI 3.1. Te dejamos pegar requests, ver schemas, y copiar snippets en varios lenguajes.
Spec en JSON/YAML: /api/openapi.yaml. Importable a Postman, Insomnia, openapi-generator y cualquier IDE.
Atajos a las secciones más usadas
- SessionsCrear sesión, listar, leer eventos SSE, métricas
- MessagesSend text + media (mediaId o url), opcional clientMessageId
- ConversationsListar, leer mensajes, toggle bot por conversación
- MediaSigned PUT URL para upload + signed GET para descargar
- KnowledgeCRUD de fuentes TEXT/URL + reindex
- WebhooksCRUD + verificación HMAC
Base URL
https://app.replai.tech/api
Todos los endpoints autenticados viven bajo /v1. El webhook de Stripe vive bajo /stripe-webhook (raw). El widget público vive bajo /v1/public/widget/*.
Convenciones
- Bodies JSON excepto donde se indique multipart (upload de media directo).
- Timestamps ISO 8601 en UTC.
- Idempotencia: los sends aceptan
clientMessageId— repetirlo devuelve el mismo job id sin duplicar. - Paginación:
limit(1–200) +before(cursor opaco). Las respuestas traennextCursor.
Errores
Toda respuesta de error sigue la misma forma:
{
"code": "VALIDATION_FAILED",
"message": "msisdn '...' is not a valid E.164 number",
"requestId": "5a92...",
"meta": { ... }
}El requestId matchea el header x-request-id de la respuesta y cualquier log nuestro. Cuando abras un soporte, pásanos ese id. Lista completa en Códigos de error.
Rate limits
Dos capas independientes:
- Por sesión: warmup tier (T0 → T4) — ver Pool + routing.
- Por plan tenant-wide: Starter 500 msg/día, Growth 2.000, Scale 20.000.
Cuando se exceda alguno, devolvemos 429 RATE_LIMITED con header Retry-After (segundos al próximo UTC midnight).