Generate payment link

Creates a one-time payment link the payer can open in a browser.

Request

method
POST
/pay/api/generate-payment-link
Authentication: Authorization: Bearer {token} — role VpayTerminal

Body

FieldTypeRequiredDescription
totalTransactionAmountdecimalYesMust be > 0
currencyCodestringYese.g. CRC, USD
terminalNumberstringNoResolved from JWT if omitted
transactionReferenceNumberstringYesUnique merchant reference
generalPurchaseDescriptionstringYesShown to payer
userEmailstringYesValid email address
culturestringYeses or en
additionalChargesarrayNoExtra charges
itemsarrayNoLine items

Response 200

FieldTypeDescription
checkoutSessionIdstringSession ID for status API
paymentLinkstringURL to send to payer
internalTransactionReferenceNumberstringVpay internal reference
expirationDateTimedatetimeLink expiry (UTC)
{
  "checkoutSessionId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "paymentLink": "{sandboxBaseUrl}/pay/link/a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "internalTransactionReferenceNumber": "VPAY-INT-12346",
  "expirationDateTime": "2026-06-20T12:00:00Z"
}

Errors

StatusTypeDescription
400Validation errors (email, culture, amount, etc.)
401Unauthorized
422VPAY_001Duplicate reference
422VPAY_005Terminal not registered
500Internal error

Example

curl -X POST "{sandboxBaseUrl}/pay/api/generate-payment-link" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "totalTransactionAmount": 1500.00,
    "currencyCode": "CRC",
    "transactionReferenceNumber": "LINK-2026-001",
    "generalPurchaseDescription": "Invoice #1042",
    "userEmail": "customer@example.com",
    "culture": "es"
  }'