Payment links

Payment links let you collect payment without embedding checkout in your purchase flow. Your backend generates a URL; you send it by email, SMS, or any channel.

Sequence

POST /pay/api/generate-payment-link Compared to integrated checkout, payment links require:
  • generalPurchaseDescription
  • userEmail (valid email)
  • culture (es or en)
Callback URLs are not used — there is no merchant redirect after payment in the link flow by default. Poll payment status from your backend or notify the payer through your own channels. Response fields:
FieldDescription
checkoutSessionIdSession ID for status queries
paymentLinkFull URL to share with the payer
internalTransactionReferenceNumberVpay internal reference
expirationDateTimeLink expiry (UTC)
The paymentLink value is built from the BaseUrlPaymentLink configuration for your environment (e.g. {sandboxBaseUrl}/pay/link/{checkoutSessionId}). Payers open:
GET /pay/link/{checkoutSessionId}?lg=es
Optional query lg sets checkout language (es or en).

Expiration

When expirationDateTime passes, the link is no longer valid. Opening an expired link shows an error page. Generate a new link with a fresh transactionReferenceNumber if needed.

Status polling

Unlike integrated checkout, you may not receive a browser callback. Poll:
GET /pay/api/payment/{checkoutSessionId}
until state indicates a terminal outcome (Successful, Failed, or ApprovedTransaction).

Generate payment link API

Payment status