Developer guide
VEXPay siteAPI reference
Browse documentation

Create and share a payment link

Sell without code: create a one-time link in the portal, share it by WhatsApp or QR, and confirm the payment — or create reusable product links with the API.

What you will do

A payment link opens the VEXPay hosted checkout for a fixed amount in USD. The buyer picks how to pay among the methods your account offers. Each portal link accepts one payment.

  • A seller account (marketplace accounts do not have payment links; use checkout sessions instead, see Split payments).
  • For live links: live mode approved (see Go live). Test links work at any time.
  • Optional: your Business profile filled in, so buyers see your name and logo.

Steps

  1. Open Payment links

    In the portal, pick Live or Test in the header, then open Payment links.

  2. Fill in the link

    Amount in USD (up to 2 decimals), a description the buyer sees (up to 140 characters), and optionally a private reference and an expiry date in the future.

  3. Share it

    Use Copy link, Share, or QR code. Below each active link the portal lists "Buyers can pay with: …", with a short reason for any method that is hidden.

  4. Get paid

    When the buyer pays, the link turns Paid, the payment appears in Payments, and your payment.* webhooks fire.

Reusable links for a product (API)

To sell the same item many times at a fixed unit price, create a product and a product link. Product links accept many payments and can let the buyer pick a quantity.

curlbash
curl --request POST "${API_URL}/v1/products" \
  --header "content-type: application/json" \
  --header "x-api-key: ${VEXPAY_API_KEY}" \
  --data '{ "name": "Monthly plan", "priceUsd": 12.00 }'

curl --request POST "${API_URL}/v1/products/PRODUCT_ID/links" \
  --header "content-type: application/json" \
  --header "x-api-key: ${VEXPAY_API_KEY}" \
  --data '{ "allowQuantity": true, "maxQuantity": 10 }'

Turn a product link off with PATCH /v1/payment-links/:id and { "status": "disabled" }. More: Products & links

Check that it worked

  • Open the link in a private window: you see your business name, the description and the amount.
  • After a test payment the link shows Paid and anyone opening it again sees that it was already paid.
  • Your webhook endpoint received payment.completed.

If something goes wrong

SymptomLikely causeWhat to do
"This payment link is not available."Live mode not approved or suspended, the account disabled, or the product link disabledCheck your live status, or enable the link again.
"This payment link has already been paid."One-time link already paidCreate a new link.
"This payment link has expired."The expiry passedCreate a new link.
409 charge_in_progressAnother buyer is paying the same one-time linkRetry in a moment.
A method is missingSee the reason under the linkSee Turn methods on or off.
403 payment_links_unavailableMarketplace accountUse checkout sessions from the API.

Related: Payment links · Browser checkout