Payment Links

Genera links de pago personalizados para cobrar a terceros sin necesidad de integración técnica.

Los Payment Links permiten recibir pagos sin necesidad de integración técnica por parte del pagador.


Genera un Payment Link con monto fijo o variable.

Envía la URL al pagador por email, WhatsApp, etc.

Pagador Completa el Pago

El pagador selecciona método de pago y completa la transacción.

Recibir Notificación

El sistema actualiza el estado a PAID y acredita el balance.


Genera un nuevo link de pago.

Crear Payment Link

Autorización

Se requieren el header x-api-key y Authorization: Bearer <token>.

Endpoint

POSThttps://dev.backend.colurs.co/payment-links

Headers Requeridos

Content-Type: application/jsonAccept: application/jsonx-api-key: [API_KEY]Authorization: Bearer [ACCESS_TOKEN]

Request Body

CampoTipoRequeridoDescripción
currencystringCOP, USD
amountdecimalMonto fijo (requerido si is_general=false)
is_generalbooleantrue = monto variable, false = monto fijo
descriptionstringDescripción del pago
fee_modestringpayer o receiver
expires_atdatetimeFecha de expiración del link

Respuesta

response.json
{
"id": 123,
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"owner": {
  "username": "usuario",
  "email": 
"usuario@ejemplo.com"},
"currency": "COP",
"amount": 50000.0,
"colurs_fee_amount": 1000.0,
"colurs_iva_amount": 190.0,
"total_to_pay": 51190.0,
"status": "PENDING",
"expires_at": "2026-03-03T00:00:00Z",
"link_url": "https://colurs.me/pay/550e8400-e29b-41d4-a716-446655440000",
"allowed_methods": ["BANCOLOMBIA", "PSE", "NEQUI"],
"description": "Pago de servicio",
"created_at": 
"2026-02-03T10:00:00Z"}
⚠️
Para links con monto fijo (is_general=false): el monto debe ser mayor al mínimo configurado y no puede ser negativo.
🔗
Comparte la `link_url` con el pagador para que pueda realizar el pago.

Opciones de métodos de pago

Autorización

Se requieren el header x-api-key y Authorization: Bearer <token>.

Endpoint

GET/payment-links/methods/options

Headers Requeridos

Content-Type: application/jsonAccept: application/jsonx-api-key: [API_KEY]Authorization: Bearer [ACCESS_TOKEN]

Respuesta

response.json
{
"PSE": true,
"CARD": true,
"BREB": false,
"UMA": false,
"BANCOLOMBIA": true,
"NEQUI": true
}

Personalizar métodos de un link

Autorización

Se requieren el header x-api-key y Authorization: Bearer <token>.

Endpoint

PATCH/payment-links/{link_uuid}/custom

Headers Requeridos

Content-Type: application/jsonAccept: application/jsonx-api-key: [API_KEY]Authorization: Bearer [ACCESS_TOKEN]

Request Body

CampoTipoRequeridoDescripción
allowed_methodsobjectClaves: PSE, CARD, BREB, UMA, BANCOLOMBIA, NEQUI (boolean cada una)

Respuesta

response.json
{
"id": 123,
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"allowed_methods": { "PSE": true, "BANCOLOMBIA": true, "NEQUI": false }
}

Modos de Fee

El sistema soporta dos modos para el cobro de comisiones:

ModoDescripciónEjemplo (monto: $50,000, fee: $1,190)
payerEl usuario paga monto + feesUsuario paga: $51,190 → Se acredita: $50,000
receiverEl usuario paga solo el montoUsuario paga: $50,000 → Se acredita: $48,810

Los fees se calculan automáticamente según la configuración del perfil (CustomFees) o los fees globales.


Depositar / pagar un Payment Link

Autorización

Se requieren el header x-api-key y Authorization: Bearer <token>.

Endpoint

POST/payment-links/{uuid}/deposit

Headers Requeridos

Content-Type: application/jsonAccept: application/jsonx-api-key: [API_KEY]Authorization: Bearer [ACCESS_TOKEN]

Request Body

CampoTipoRequeridoDescripción
amountnumberMonto a pagar
payment_methodstringBANCOLOMBIA, PSE, NEQUI, etc.
payer_dataobjectDatos del pagador según el método

Respuesta

response.json
{
"status": "PENDING",
"checkout_url": "https://checkout.colurs.me/...",
"amount": 51190.0
}

EstadoIconoDescripción
PENDINGCreado, esperando pago
ACTIVE🔄Pago en proceso
PAIDPago completado
EXPIREDLink expirado
CANCELLEDLink cancelado

Métodos de Pago Disponibles

MétodoDescripciónGenera Link
BANCOLOMBIABotón Bancolombia
PSEPagos Seguros en Línea
NEQUIPago desde app Nequi

Consultar un Payment Link

Autorización

Se requieren el header x-api-key y Authorization: Bearer <token>.

Endpoint

GET/payment-links/{link_uuid}/custom

Headers Requeridos

Content-Type: application/jsonAccept: application/jsonx-api-key: [API_KEY]Authorization: Bearer [ACCESS_TOKEN]

Respuesta

response.json
{
"id": 123,
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"owner": { "username": "usuario", "email":  "usuario@ejemplo.com"},
"currency": "COP",
"amount": 50000.0,
"status": "PENDING",
"link_url": "https://colurs.me/pay/550e8400-e29b-41d4-a716-446655440000",
"allowed_methods": ["BANCOLOMBIA", "PSE", "NEQUI"]
}

Link general por usuario

Autorización

Se requieren el header x-api-key y Authorization: Bearer <token>.

Endpoint

GET/payment-links/{user_reference}/general

Headers Requeridos

Content-Type: application/jsonAccept: application/jsonx-api-key: [API_KEY]Authorization: Bearer [ACCESS_TOKEN]

Respuesta

response.json
{
"id": 456,
"uuid": "...",
"currency": "COP",
"is_general": true,
"link_url": 
"https://colurs.me/pay/..."}

Ejemplo Completo

curl -X POST https://api.colurs.co/payment-links \
  -H "Authorization: Bearer [TOKEN]" \
  -H "x-api-key: [API_KEY]" \
  -H "Content-Type: application/json" \
  -d '{
    "currency": "COP",
    "amount": 100000,
    "is_general": false,
    "description": "Pago mensualidad",
    "fee_mode": "payer"
}'

2. Compartir la URL

Envía al pagador la link_url devuelta (ej. https://colurs.me/pay/550e8400-e29b-41d4-a716-446655440000).

3. El pagador completa el pago

El pagador usa POST /payment-links/{uuid}/deposit o completa el flujo en la URL del link.

curl -X GET "https://api.colurs.co/payment-links/550e8400-e29b-41d4-a716-446655440000/custom" \
  -H "Authorization: Bearer [TOKEN]" \
  -H "x-api-key: [API_KEY]"

5. Pago confirmado

Cuando status sea PAID, el balance se acredita automáticamente.


Errores Comunes

CódigoErrorDescripción
400AmountRequiredMonto requerido para links generales
400AmountMismatchMonto no coincide con el del link
400InvalidStatusEl link no está en estado válido para pago
404NotFoundPayment Link no existe