Referencia de API

Documentación completa de los endpoints disponibles en la API de NIIO Payments.

¿Prefieres probar en vez de leer?
Esta página describe los endpoints; en la referencia interactiva puedes ejecutarlos en vivo desde el navegador con tus API keys.
Base URL
Todas las solicitudes deben hacerse a: https://api.prod.niiopay.com/api/v1

Autenticación

Todas las solicitudes requieren autenticación mediante headers:

Headers requeridos
X-Api-Key: tu_api_key
X-Api-Secret: tu_api_secret
Content-Type: application/json

Endpoints

POST /v1/collect

Crea una nueva orden de cobro y genera un link de pago donde tu cliente puede completar el pago.

Body Parameters

reference string requerido
Identificador único de la orden en tu sistema (ej: número de factura). Máximo 100 caracteres.
amount number requerido
Monto a cobrar en COP. Mínimo: 1,000 COP.
currency string opcional
Código de moneda. Default: COP. Actualmente solo se soporta COP.
description string opcional
Descripción del cobro visible para el cliente. Máximo 500 caracteres.
customerName string requerido
Nombre completo del cliente. Máximo 200 caracteres.
customerEmail string requerido
Email del cliente. Debe ser un email válido.
customerDocType string requerido
Tipo de documento: CC (Cédula), CE (Cédula Extranjería), NIT, PP (Pasaporte)
customerDocNumber string requerido
Número de documento del cliente.
expirationMinutes number opcional
Tiempo de expiración en minutos. Default: 60. Mínimo: 5.
callbackUrl string opcional
URL a la que redirigir al cliente después del pago. Debe ser una URL válida con HTTPS.
allowedMethods array opcional
Métodos de pago permitidos: ["PSE", "BANK_TRANSFER"]. Si no se especifica, usa los métodos configurados en tu cuenta.
metadata object opcional
Datos adicionales que quieras asociar a la orden. Se retornan en webhooks. Máximo 1KB.

Ejemplo de solicitud

{
  "reference": "ORDER-12345",
  "amount": 150000,
  "currency": "COP",
  "description": "Pago de factura #12345",
  "customerName": "Juan Pérez",
  "customerEmail": "juan@email.com",
  "customerDocType": "CC",
  "customerDocNumber": "1234567890",
  "expirationMinutes": 60,
  "callbackUrl": "https://mitienda.com/pago-exitoso",
  "allowedMethods": ["PSE", "BANK_TRANSFER"],
  "metadata": {
    "orderId": "12345",
    "userId": "user_abc"
  }
}

Respuesta exitosa

201 Created
{
  "success": true,
  "data": {
    "id": "clxyz123abc456def",
    "reference": "ORDER-12345",
    "amount": 150000,
    "currency": "COP",
    "status": "PENDING",
    "collectUrl": "https://pay.niiopay.com/c/clxyz123abc456def",
    "expiresAt": "2024-01-15T13:00:00.000Z",
    "createdAt": "2024-01-15T12:00:00.000Z"
  }
}
GET /v1/collect/:id

Obtiene los detalles y estado actual de una orden de cobro.

Path Parameters

id string requerido
ID de la orden de cobro retornado al crearla.

Ejemplo de solicitud

GET /v1/collect/clxyz123abc456def

Respuesta exitosa

200 OK
{
  "success": true,
  "data": {
    "id": "clxyz123abc456def",
    "reference": "ORDER-12345",
    "amount": 150000,
    "currency": "COP",
    "description": "Pago de factura #12345",
    "status": "COMPLETED",
    "selectedMethod": "PSE",
    "allowedMethods": ["PSE", "BANK_TRANSFER"],
    "customer": {
      "name": "Juan Pérez",
      "email": "juan@email.com",
      "documentType": "CC",
      "documentNumber": "1234567890"
    },
    "collectUrl": "https://pay.niiopay.com/c/clxyz123abc456def",
    "callbackUrl": "https://mitienda.com/pago-exitoso",
    "metadata": {
      "orderId": "12345",
      "userId": "user_abc"
    },
    "expiresAt": "2024-01-15T13:00:00.000Z",
    "paidAt": "2024-01-15T12:15:00.000Z",
    "createdAt": "2024-01-15T12:00:00.000Z",
    "updatedAt": "2024-01-15T12:15:00.000Z"
  }
}

Estados de una Orden

Una orden de cobro puede tener los siguientes estados:

Estado Descripción Final
PENDING Orden creada, esperando que el cliente seleccione método de pago No
PROCESSING Pago PSE en proceso de autorización No
WAITING_TRANSFER Cliente seleccionó transferencia bancaria, esperando el depósito No
COMPLETED Pago completado exitosamente Sí ✓
FAILED El pago falló (rechazado por el banco, fondos insuficientes, etc.) Sí ✓
EXPIRED La orden expiró sin recibir pago Sí ✓

Webhooks

Cuando el estado de una orden cambia a COMPLETED o FAILED, NIIO envía una notificación POST a tu webhookUrl configurada:

Evento: payment.completed

{
  "event": "payment.completed",
  "data": {
    "id": "clxyz123abc456def",
    "reference": "ORDER-12345",
    "amount": 150000,
    "currency": "COP",
    "status": "COMPLETED",
    "paidAt": "2024-01-15T12:15:00.000Z",
    "metadata": {
      "orderId": "12345"
    }
  },
  "timestamp": "2024-01-15T12:15:01.000Z"
}

Evento: payment.failed

{
  "event": "payment.failed",
  "data": {
    "id": "clxyz123abc456def",
    "reference": "ORDER-12345",
    "amount": 150000,
    "currency": "COP",
    "status": "FAILED",
    "paidAt": null,
    "metadata": {
      "orderId": "12345"
    }
  },
  "timestamp": "2024-01-15T12:20:00.000Z"
}

Rate Limits

La API tiene límites de solicitudes para garantizar la estabilidad del servicio:

Endpoint Límite
POST /v1/collect 100 solicitudes/minuto
GET /v1/collect/:id 1000 solicitudes/minuto

Si excedes el límite, recibirás un error 429 Too Many Requests. Los headers de respuesta incluyen información sobre el límite:

X-RateLimit-Limit: 100
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1705323600