Documentación
Integra recargas, facturas, remesas y Paso Rápido con una sola API REST. Peticiones y respuestas en JSON, sobre HTTPS.
Introducción
#La URL base de producción es:
Hay dos entornos, determinados por el prefijo de tu API key: zp_live_ para producción y zp_test_ para sandbox. El sandbox simula respuestas sin mover dinero real.
Todos los montos están en pesos dominicanos (DOP) con dos decimales.
Quickstart
#Haz tu primera llamada en menos de un minuto. Con una key de sandbox, crea una recarga de prueba:
Recibirás una transacción con status: "completed". Cambia tu key por una zp_live_ para procesar en producción.
Autenticación
#Envía tu API key como Bearer token en el header Authorization de cada petición. Mantén tus keys en secreto y rótalas si se exponen.
Idempotencia
#Para evitar transacciones duplicadas ante reintentos de red, envía un header Idempotency-Key único por operación (un UUID). Si repites la misma key, la API devuelve el resultado de la primera petición sin volver a procesar.
Rate limits
#El límite por defecto es de 100 peticiones por minuto por API key. Cada respuesta incluye los headers X-RateLimit-Remaining y X-RateLimit-Reset. Al excederlo recibirás un 429.
Listar operadores
#/v1/operatorsDevuelve los operadores disponibles y su categoría.
Crear una recarga
#/v1/recargascarrierreq | string | ID del operador (p. ej. Claro). |
accountreq | string | Número de teléfono destino. |
amountreq | number | Monto en DOP. |
reference | string | Referencia propia para conciliar. |
Respuesta:
Pagar una factura
#Primero consulta la cuenta para obtener el titular y el monto pendiente, luego confirma el pago.
/v1/facturas/lookup/v1/facturascarrierreq | string | Operador de factura (p. ej. Edenorte). |
accountreq | string | NIC, contrato o cuenta. |
amountreq | number | Monto a pagar en DOP. |
Enviar una remesa
#/v1/remesasproviderreq | string | NATCASH o MONCASH. |
accountreq | string | Teléfono o billetera destino. |
amountreq | number | Monto en DOP. |
Consultar balance
#/v1/balanceDevuelve el balance disponible de tu wallet.
Transacciones
#/v1/transactions/v1/transactions/:idcategory | string | Filtra por recarga, factura, remesa o pasorapido. |
status | string | Filtra por estado (completed, failed, …). |
limit | number | Máximo de resultados (1–100, por defecto 25). |
starting_after | string | Cursor de paginación (id de transacción). |
Paginación
#Los endpoints de listado usan paginación basada en cursor. Pasa el último id recibido en starting_after para obtener la siguiente página. La respuesta incluye has_more.
Webhooks
#Registra un endpoint para recibir eventos firmados cuando cambia el estado de una transacción. Verifica la firma con el secreto whsec_... usando el header X-Zenter-Signature.
Verificar la firma en Node.js:
Eventos: transaction.completed, transaction.failed, transaction.reversed, balance.low.
Objetos
#Estos son los recursos principales que devuelve la API. Los mismos modelos se usan en el panel y en los webhooks.
El objeto Transaction
id | string | Identificador único (txn_…). |
reference | string | Referencia del comercio. |
category | enum | recarga · factura · remesa · pasorapido. |
carrier | string | ID del operador. |
account | string | Cuenta destino (teléfono, NIC…). |
amount | number | Monto en DOP. |
benefit | number | Ganancia del comercio (4% en recargas; 0 en facturas). |
currency | string | Siempre “DOP”. |
status | enum | pending · processing · completed · failed · reversed. |
channel | enum | api · dashboard. |
created_at | string | Fecha de creación (ISO 8601). |
updated_at | string | Última actualización (ISO 8601). |
El objeto Webhook
id | string | Identificador único (wh_…). |
url | string | Endpoint HTTPS de destino. |
events | array | Eventos suscritos. |
status | enum | active · disabled. |
secret | string | Secreto de firma (whsec_…). |
created_at | string | Fecha de creación (ISO 8601). |
Errores
#Los errores devuelven un código HTTP y un cuerpo JSON con code y message.
| Código | HTTP | Descripción |
|---|---|---|
| invalid_request | 400 | Faltan parámetros o son inválidos. |
| unauthorized | 401 | API key ausente o inválida. |
| insufficient_funds | 402 | Balance insuficiente en el wallet. |
| not_found | 404 | El recurso no existe. |
| transaction_failed | 422 | El operador rechazó la transacción. |
| rate_limited | 429 | Demasiadas peticiones. |
| carrier_unavailable | 503 | El operador no está disponible. |
SDKs
#Usa nuestras librerías oficiales para integrar más rápido. También puedes llamar la API directamente con cualquier cliente HTTP.