Payment Links

Create personalized payment links to receive money from anyone.

Payment Links allow you to receive payments without requiring technical integration from the payer.


Generate a Payment Link with fixed or variable amount.

Send the URL to the payer via email, WhatsApp, etc.

Payer Completes Payment

Payer selects method (Bancolombia, PSE, Nequi) and pays.

Receive Notification

System updates status to PAID and credits the balance.


Generate a new payment link.

Endpoint

POST /api/payment_link/

Headers

Authorization: Bearer [ACCESS_TOKEN]
Content-Type: application/json
x-api-key: [API_KEY]

Request

Payment Link with fixed amount
{
  "currency": "COP",
  "amount": 50000.00,
  "is_general": false,
  "description": "Service payment",
  "fee_mode": "payer",
  "expires_at": "2026-03-03T00:00:00Z"
}
💡

The payer must pay exactly the specified amount.

Fields

FieldTypeRequiredDescription
currencystringCurrency code: COP, USD
amountdecimal⚠️Fixed amount (required if is_general=false)
is_generalbooleantrue = variable amount, false = fixed amount
descriptionstringPayment description
fee_modestringpayer or receiver
expires_atdatetimeLink expiration date

Validations

⚠️

For fixed amount links (is_general=false):

  • Amount must be greater than configured minimum
  • Amount cannot be negative

Response

201 CREATED
{
  "id": 123,
  "uuid": "550e8400-e29b-41d4-a716-446655440000",
  "owner": {
    "username": "user",
    "email": "user@example.com"
  },
  "currency": "COP",
  "amount": 50000.00,
  "colurs_fee_amount": 1000.00,
  "colurs_iva_amount": 190.00,
  "total_to_pay": 51190.00,
  "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": "Service payment",
  "created_at": "2026-02-03T10:00:00Z"
}
🔗

Share the link_url with the payer so they can make the payment.


Process Payment

When the payer accesses the link, they can complete the payment.

Endpoint

POST /api/payment_link/{'{uuid}'}/pay/

Request

request.json
{
  "amount": 50000.00,
  "payment_method": "BANCOLOMBIA",
  "payer_email": "payer@example.com",
  "payer_phone": "+573001234567",
  "payer_type_document": "CC",
  "payer_document": "1234567890"
}

Fields

FieldTypeRequiredDescription
amountdecimal⚠️Amount (required if is_general=true)
payment_methodstringBANCOLOMBIA, PSE, NEQUI
payer_emailstring⚠️Payer’s email
payer_phonestring⚠️Payer’s phone
payer_type_documentstring⚠️Type: CC, CE, NIT
payer_documentstring⚠️Document number
bank_idint⚠️Bank ID (required for PSE)

Required fields vary based on selected payment_method.

Response

200 OK
{
  "payment_link": "https://payment.colurs.co/checkout/abc123",
  "money_movement_id": "mm_xyz789",
  "total_to_pay": 51190.00
}

StatusIconDescription
PENDINGCreated, awaiting payment
ACTIVE🔄Payment in progress
PAIDPayment completed
EXPIREDLink expired
CANCELLEDLink cancelled

Available Payment Methods

MethodDescriptionGenerates Link
BANCOLOMBIABancolombia Button
PSEPagos Seguros en Línea
NEQUIPayment from Nequi app

Get details of a specific Payment Link.

Endpoint

GET /api/payment_link/{'{uuid}'}/

Response

200 OK
{
  "id": 123,
  "uuid": "550e8400-e29b-41d4-a716-446655440000",
  "owner": {
    "username": "user",
    "email": "user@example.com"
  },
  "currency": "COP",
  "amount": 50000.00,
  "colurs_fee_amount": 1000.00,
  "colurs_iva_amount": 190.00,
  "total_to_pay": 51190.00,
  "status": "PAID",
  "paid_at": "2026-02-03T10:30:00Z",
  "paid_amount": 51190.00,
  "link_url": "https://colurs.me/pay/550e8400-e29b-41d4-a716-446655440000",
  "created_at": "2026-02-03T10:00:00Z",
  "updated_at": "2026-02-03T10:30:00Z"
}

Get all user’s Payment Links.

Endpoint

GET /api/payment_link/

Query Parameters

ParameterTypeDescription
statusstringFilter by status
currencystringFilter by currency
pageintResults page

Complete Example

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

2. Share the URL

Send to payer:

https://colurs.me/pay/550e8400-e29b-41d4-a716-446655440000

3. Payer completes payment

Payer selects their payment method and completes the transaction.

4. Verify status

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

5. Payment confirmed

When status is PAID, balance is automatically credited.


Common Errors

CodeErrorDescription
400AmountRequiredAmount required for general links
400AmountMismatchAmount doesn’t match link amount
400InvalidStatusLink not in valid status for payment
404NotFoundPayment Link doesn’t exist