En esta página
Notificaciones
Koywe emite notificaciones para mantener informados a los usuarios del merchant sobre eventos de órdenes — separadas de los webhooks, que están pensados para integraciones servidor-a-servidor.
Existen dos canales independientes, configurables por merchant:
- Notificaciones in-app: se entregan a los usuarios con sesión iniciada en el dashboard de Koywe. Siempre activas.
- Notificaciones por correo: opt-in. Desactivadas por defecto; habilítalas y elige los destinatarios por merchant.
Las notificaciones son para personas — equipos de operaciones, finanzas, soporte. Para integración programática, usa Webhooks.
Notificaciones In-App
Las notificaciones in-app se generan automáticamente solo ante eventos de órdenes — eventType utiliza el subconjunto order.* de la taxonomía de webhooks (p. ej. order.completed, order.failed) y no abarca merchant.*, policy.*, webhook.ping ni otras familias. Cada notificación pertenece a un único merchant y puede listarse, contarse y marcarse como leída a través de la API que alimenta el centro de notificaciones del dashboard.
Objeto de Notificación
{
"id": "d2dd8481-3552-4466-b99e-a7caad69a302",
"merchantId": "koywe-3-sys",
"orderId": "ord_abc123",
"orderType": "PAYIN",
"eventType": "order.completed",
"title": "Tu pago se completó",
"body": "El pago de $500 USD fue procesado correctamente.",
"read": false,
"readAt": null,
"createdAt": "2026-04-13T18:00:00.000Z",
"metadata": null
}| Campo | Descripción |
|---|---|
id | ID de la notificación |
merchantId | Merchant al que pertenece la notificación |
orderId | Orden relacionada, si aplica |
orderType | PAYIN, PAYOUT, ONRAMP, OFFRAMP, BALANCE_TRANSFER, PAYMENT_LINK |
eventType | Subconjunto order.* de la taxonomía de webhooks (order.completed, order.failed, …). Otras familias (merchant.*, policy.*, webhook.ping) no generan notificaciones in-app |
title / body | Contenido legible, ya localizado |
read / readAt | Estado de lectura. readAt es null hasta que se marca como leída |
metadata | Payload opcional específico del evento |
Listar Notificaciones
GET /api/v1/merchants/{merchantId}/notifications/inappPaginado, de la más reciente a la más antigua.
Parámetros de consulta
| Nombre | Por defecto | Descripción |
|---|---|---|
page | 1 | Número de página |
limit | 50 | Items por página |
const response = await axios.get(
`https://api.koywe.com/api/v1/merchants/${merchantId}/notifications/inapp`,
{
params: { page: 1, limit: 50 },
headers: { Authorization: `Bearer ${token}` }
}
);
const { data, total, page, limit } = response.data;Conteo de No Leídas
GET /api/v1/merchants/{merchantId}/notifications/inapp/unread-countDevuelve { "count": 3 }. Úsalo para el badge del ícono de campana — es más económico que paginar la lista completa.
Marcar Una como Leída
PATCH /api/v1/merchants/{merchantId}/notifications/inapp/{notificationId}/readDevuelve { "ok": true }.
Devuelve el error NE00001 si la notificación no existe, y NE00002 si pertenece a otro merchant.
Marcar Todas como Leídas
PATCH /api/v1/merchants/{merchantId}/notifications/inapp/read-allDevuelve { "updated": 5 } — la cantidad de notificaciones que pasaron de no-leídas a leídas.
Configuración de Notificaciones por Correo
Las notificaciones por correo están desactivadas por defecto. Habilítalas por merchant y define una lista de direcciones destinatarias. Koywe luego envía correos a esos destinatarios en cada evento de orden, en paralelo a la notificación in-app y el webhook.
Obtener Configuración
GET /api/v1/merchants/{merchantId}/notification-settingsDevuelve la configuración existente, o los valores por defecto si aún no se ha configurado nada:
{
"emailEnabled": false,
"recipients": []
}Actualizar Configuración
PUT /api/v1/merchants/{merchantId}/notification-settings{
"emailEnabled": true,
"recipients": ["ops@merchant.com", "finance@merchant.com"]
}Reglas:
emailEnabledes requerido.- Cuando
emailEnabledestrue, debe proporcionarse al menos un correo válido enrecipients. - Cuando
emailEnabledesfalse,recipientspuede omitirse y se conservará la lista existente hasta que la vacíes explícitamente. - Si envías
recipients, reemplaza por completo la lista anterior. Para vaciar la lista, envía un arreglo vacío (recipients: []); omitirla no limpia a los destinatarios ya configurados.
await axios.put(
`https://api.koywe.com/api/v1/merchants/${merchantId}/notification-settings`,
{
emailEnabled: true,
recipients: ['ops@merchant.com', 'finance@merchant.com']
},
{ headers: { Authorization: `Bearer ${token}` } }
);¿Cuándo Usar Qué?
| Canal | Audiencia | Ideal para |
|---|---|---|
| Webhooks | Tus servidores | Fulfillment de órdenes, conciliación, cualquier cosa automatizada |
| In-app | Usuarios del dashboard | Feed de actividad en vivo, “qué acaba de pasar” |
| Correo | Ops / finanzas / soporte | Alertas fuera de banda para equipos que no están mirando el dashboard |
Los tres canales son independientes — un evento de orden dispara los tres donde estén configurados.