Create Payment Links
This recipe shows how to create and manage payment links using the current Payment Links REST API.
Prerequisites
- Site is premium.
- Site is published.
- Site is set up to accept payments (Wix Payments onboarding completed).
- App has payment-link permissions.
- Wix Stores is installed if you plan to charge for catalog products.
Required APIs
Overview
Payment links are created at:
POST https://www.wixapis.com/payment-links/v1/payment-links
Use one of these payment-link types:
ECOM: charge for custom or catalog line items.ECOM_ORDER: collect payment for an existing unpaid eCommerce order.
Step 1: Retrieve product details (optional)
If you plan to use catalog items, fetch the product first.
Examples:
- Catalog V1:
GET https://www.wixapis.com/stores/v1/products/{productId} - Catalog V1 query:
POST https://www.wixapis.com/stores/v1/products/query
{
"query": {
"paging": {
"limit": 50,
"offset": 0
}
}
}Step 2: Create an ECOM payment link with custom line items
{
"paymentLink": {
"title": "Business Listing Fee",
"description": "One-time listing fee",
"currency": "USD",
"type": "ECOM",
"ecomPaymentLink": {
"lineItems": [
{
"type": "CUSTOM",
"customItem": {
"name": "Listing Fee",
"quantity": 1,
"price": "200.00"
}
}
]
}
}
}Step 3: Create an ECOM payment link with catalog items
{
"paymentLink": {
"title": "Product Payment",
"currency": "USD",
"type": "ECOM",
"ecomPaymentLink": {
"lineItems": [
{
"type": "CATALOG",
"catalogItem": {
"quantity": 1,
"catalogReference": {
"appId": "215238eb-22a5-4c36-9e7b-e7c08025e04e",
"catalogItemId": "PRODUCT_ID",
"options": {
"variantId": "VARIANT_ID"
}
}
}
}
]
}
}
}Step 4: Create an ECOM_ORDER payment link for an existing order
{
"paymentLink": {
"title": "Order Balance",
"currency": "USD",
"type": "ECOM_ORDER",
"paymentsLimit": 1,
"ecomOrderPaymentLink": {
"orderId": "ORDER_ID",
"amount": "50"
}
}
}Step 5: Send payment link to recipients
Use:
POST https://www.wixapis.com/payment-links/v1/payment-links/{paymentLinkId}/send
Request body:
{
"paymentLinkId": "PAYMENT_LINK_ID",
"recipients": [
{
"contactId": "CONTACT_ID",
"sendMethods": ["EMAIL_METHOD"]
}
]
}Step 6: Query and manage payment links
Query:
POST https://www.wixapis.com/payment-links/v1/payment-links/query
{
"query": {
"filter": {
"status": "ACTIVE"
},
"cursorPaging": {
"limit": 50
}
}
}Get one:
GET https://www.wixapis.com/payment-links/v1/payment-links/{paymentLinkId}
Deactivate:
POST https://www.wixapis.com/payment-links/v1/payment-links/{paymentLinkId}/deactivate
Activate:
POST https://www.wixapis.com/payment-links/v1/payment-links/{paymentLinkId}/activate
Delete (only when no payments were received):
DELETE https://www.wixapis.com/payment-links/v1/payment-links/{paymentLinkId}
Payment Link Statuses
| Status | Description |
|---|---|
ACTIVE |
Link is active and can receive payments |
INACTIVE |
Link is inactive and cannot receive payments |
PAID |
Payment has been completed |
EXPIRED |
Link has passed its expiration date |
Common Errors
| Error Code | Meaning |
|---|---|
UNPUBLISHED_SITE |
Site must be published before creating payment links |
MISSING_ACCEPT_PAYMENTS |
Site is not set up to accept payments |
FAILED_TO_INSTALL_ECOM |
Required eCommerce capability is missing |
RECIPIENT_NOT_FOUND |
Provided recipient contact does not exist |
ORDER_NOT_FOUND |
Provided order ID does not exist |
INVALID_PAYMENTS_LIMIT_FOR_ECOM_ORDER_PAYMENT_LINK |
ECOM_ORDER links require paymentsLimit: 1 |
Best Practices
- Validate prerequisites first (premium, published, payments enabled).
- Use
ECOMfor line-item collection andECOM_ORDERfor existing unpaid orders. - Use IDs from real entities (products, variants, contacts, orders).
- Keep currency aligned with your business/order currency rules.
- Persist payment-link IDs and monitor status via query/get methods.