Creates a payment request and returns the checkout URL to share with the payer.
Requires the payment_links:create ability, and a verified account. Both verification gates — identity and business — run ahead of this endpoint, and an unverified account is refused with 400, not 403: KYC_VERIFICATION_REQUIRED or KYB_VERIFICATION_REQUIRED, each carrying a meta block describing where that check stands. Only creation is gated this way; reading and cancelling stay open.
currency alone decides where the money settles. Every currency but USD is collected with that country's local methods and credited to your local-currency wallet. USD is collected as a bank debit: it requires USD payments to be enabled on your account, and it runs on a slower cycle with three statuses the local rail never uses — see PaymentLinkStatus.
When the payer's currency and your wallet's currency are the same, amount_type changes neither what the payer pays nor what you are credited — which is every USD request. There, receive and charge produce the same charge and the same credit, and who absorbs the fee is decided by customer_paid_fee alone. The flag is not wholly without effect even then: an internal fee figure recorded against the resulting payment follows it, and that figure is reported outside this API rather than by these operations. The examples below cover the combinations where the amounts themselves differ.
A second floor runs before this endpoint's own validation. A request worth less than 2.00 USD once converted is refused with 400 BUSINESS_PAYMENT_LINK_MINIMUM_AMOUNT and a meta block holding the amount you sent and its USD equivalent. Because that check runs first, it can answer before the validator has reported anything about your body.
Refusals past the shared ones: 400 KYC_VERIFICATION_REQUIRED, 400 KYB_VERIFICATION_REQUIRED, 400 BUSINESS_PAYMENT_LINK_MINIMUM_AMOUNT, 401 INVALID_API_KEY in the ordinary envelope, 403 BUSINESS_TENANT_PAUSED, 404 USER_NOT_FOUND, 422 VALIDATION_FAILED, 422 USD_ACCOUNT_NOT_ENABLED, 422 WALLET_NOT_FOUND and 500 SYSTEM_DATABASE_ERROR. WALLET_NOT_FOUND means your account holds wallets but none on the local rail; an account with no wallet row at all is stopped earlier, by the minimum-amount check, which answers 500 SYSTEM_DATABASE_ERROR with the fixed message Virtual wallet not found. Please contact support.
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
