Skip to content

Referencia API

Documentación completa de la API REST de Zelta Pay. Esta referencia cubre todos los endpoints, formatos de datos, códigos de error y convenciones de la API.

URL Base

https://api-pay.zelta.dev

Todas las solicitudes deben usar HTTPS. Las solicitudes HTTP serán rechazadas.

Versionamiento

La API usa versionamiento por ruta. La versión actual es v1:

https://api-pay.zelta.dev/v1/

Todas las rutas de endpoints incluyen el prefijo /v1/. Cambios que rompen compatibilidad se realizarán en nuevas versiones.

Autenticación

Todas las solicitudes requieren el header X-API-Key:

http
X-API-Key: tu-api-key-aqui

Consulta la para obtener tu clave y ver ejemplos de implementación.

Rate Limiting

  • 60 solicitudes por minuto por API key
  • Ventana deslizante de 1 minuto
  • Headers de respuesta: RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset
  • Al exceder el límite: 429 Too Many Requests con código ERR_RATE_LIMIT_EXCEEDED

Formato de respuesta

Respuesta exitosa

json
{
  "success": true,
  "data": { ... },
  "message": "Descripción de la operación",
  "timestamp": "2026-03-13T10:30:00.000Z"
}

Respuesta de error

json
{
  "success": false,
  "error": {
    "code": "ERR_VALIDATION_FAILED",
    "message": "Descripción del error",
    "details": [...]
  },
  "timestamp": "2026-03-13T10:30:00.000Z"
}

Códigos de estado HTTP

CódigoDescripciónUso
200OKSolicitud exitosa (GET, PATCH)
201CreatedRecurso creado exitosamente (POST)
400Bad RequestDatos de solicitud inválidos o faltantes
401UnauthorizedAPI key faltante o inválida
403ForbiddenCuenta suspendida o sin permisos
404Not FoundRecurso no encontrado
409ConflictConflicto de estado (ej. cancelar un link ya completado)
429Too Many RequestsRate limit excedido
500Internal Server ErrorError interno del servidor

Códigos de error

Autenticación

CódigoHTTP StatusDescripción
ERR_MISSING_API_KEY401No se incluyó el header X-API-Key
ERR_API_KEY_NOT_FOUND404La API key no existe o fue revocada
ERR_ACCOUNT_SUSPENDED403La cuenta está suspendida
ERR_RATE_LIMIT_EXCEEDED429Se superó el límite de solicitudes

Validación

CódigoHTTP StatusDescripción
ERR_VALIDATION_FAILED400Los datos no pasan la validación
ERR_INVALID_AMOUNT400Monto fuera del rango permitido (100-200000)
ERR_METADATA_VALIDATION400Metadata excede límites (20 keys o 8192 bytes)

Lógica de negocio

CódigoHTTP StatusDescripción
ERR_NO_ACTIVE_PAYMENT_PROVIDER400No hay proveedor de pagos activo configurado
ERR_INACTIVE_PAYMENT_METHOD400El método de pago solicitado no está activo
ERR_PAYMENT_LINK_NOT_FOUND404El link de pago no existe
ERR_INVALID_STATE_TRANSITION409El link no puede cambiar al estado solicitado

Endpoints

MétodoRutaDescripciónDocumentación
GET/v1/payment-linksListar links de pago
POST/v1/payment-linksCrear un link de pago
GET/v1/payment-links/{hashUrl}Obtener un link de pago
PATCH/v1/payment-links/{hashUrl}/cancelCancelar un link de pago

Paginación

Los endpoints que devuelven listas soportan paginación con los parámetros:

ParámetroTipoDefaultDescripción
liminteger10Cantidad de resultados por página (máx. 100)
offinteger0Número de resultados a saltar

Ejemplo

http
GET /v1/payment-links?lim=20&off=40

La respuesta incluye el campo total para calcular la paginación:

json
{
  "success": true,
  "data": {
    "paymentLinks": [...],
    "total": 150
  }
}

Tipos de datos

Montos

Todos los montos se expresan en centavos (integer):

ValorEquivalente
100$1.00
1500$15.00
200000$2,000.00

Rango permitido: 100 a 200000 (es decir, $1.00 a $2,000.00).

Timestamps

Todas las fechas y horas usan formato ISO 8601 en UTC:

2026-03-13T10:30:00.000Z
EstadoDescripción
pendingLink creado, pendiente de pago
completedPago completado exitosamente
expiredLink expirado sin pago (3 días desde la creación)
cancelledLink cancelado manualmente

Métodos de pago

ValorDescripción
"yappy"Pago con Yappy
"card"Pago con tarjeta

Metadata

El campo metadata permite almacenar datos personalizados en formato clave-valor:

  • Máximo 20 llaves por objeto
  • Máximo 8192 bytes de tamaño total
  • Los valores deben ser de tipo string
  • No almacenes datos sensibles (tarjetas, contraseñas, tokens)
json
{
  "metadata": {
    "orderId": "ORD-2026-0042",
    "source": "web-checkout",
    "userId": "usr_abc123"
  }
}

Webhooks

Zelta Pay envía notificaciones en tiempo real a tu servidor cuando ocurren eventos relevantes.

Eventos disponibles

  • Pago completado
  • Link expirado
  • Link cancelado

Seguridad

Cada webhook incluye headers de firma (zeltapay-signature y zeltapay-timestamp) para verificar la autenticidad del mensaje.

Consulta las guías de webhooks para más detalles:

Modo de prueba

Usa el campo isTest: true al crear links de pago para probar tu integración sin procesar pagos reales. Los links de prueba se comportan igual que los de producción, pero no generan cobros.

Puedes filtrar links de prueba con el parámetro isTest al .

SDKs

Actualmente no hay SDKs oficiales. La API REST es compatible con cualquier lenguaje que soporte solicitudes HTTP. Consulta los para ver código en Node.js, Python, PHP, Cloudflare Workers y Hono.

Changelog

Consulta el para ver el historial de cambios de la API.

Soporte

Si tienes preguntas o necesitas ayuda con la integración:

  • Revisa la para empezar
  • Consulta los para ejemplos prácticos
  • Contacta a soporte desde tu

Documentación oficial de Zelta