Checkout Links
Reusable hosted checkout URLs for products, campaigns, and no-code payment flows
Checkout links are reusable hosted payment URLs. They are the simplest way to publish a purchase flow without building your own checkout page.
The Dashboard list reports loaded checkout links. If links or their product details cannot load, use the corresponding retry button. Previously loaded links may remain visible with a warning; a failed read does not mean you have no links.
Best For
- Product sales from landing pages
- Email and SMS campaigns
- QR codes for in-person sales or printed materials
- No-code payment collection from the dashboard
How Checkout Links Work
- You create a checkout link in RevKeen.
- RevKeen generates a public checkout URL for that link.
- The customer opens the hosted checkout page and pays.
- RevKeen creates or updates the downstream billing objects for the purchase.
The exact public URL format can vary by environment and branded domain. Copy the link RevKeen generates instead of constructing the URL yourself.
Create a Checkout Link in the Dashboard
- Go to Dashboard > Products > Checkout Links.
- Click New checkout link.
- Choose what the link offers: a collection (new products appear on the link automatically) or specific products picked by hand.
- Optionally preselect what starts in the customer's cart with Add in the cart preview — the customer adds or removes the rest. At most one subscription can start in the cart.
- Choose the checkout presentation you want RevKeen to use for the hosted flow (direct checkout, or multi-item review when Cart is installed).
- Configure optional behavior such as success URL, cancel URL, shipping collection, discounts, or expiry.
- Save the link and copy the generated public URL.
What You Can Configure
| Capability | Supported |
|---|---|
| One or more linked products | Yes |
| Ad hoc line items | Yes |
| Success redirect | Yes |
| Cancel redirect | Yes |
| Shipping collection | Yes |
| Promotion codes | Yes |
| Tax behavior | Yes |
| Expiry timestamp | Yes |
| Metadata | Yes |
| Link status management | Yes |
| Hosted display mode selection | Yes |
| Pay with inherit or thin override | Yes — default is the merchant Pay with setting. Optional Card only or Include Direct Debit. |
Success URL placeholders
A success URL can include placeholders. RevKeen replaces them when it sends the buyer back to your site after payment.
| Placeholder | Replaced with |
|---|---|
{CHECKOUT_ID} | The checkout ID |
{TRANSACTION_ID} | The transaction ID |
{PAYMENT_ID} | The payment ID |
{CUSTOMER_ID} | The customer ID |
{AMOUNT} | The amount charged, in minor units (for example, pence) |
{CURRENCY} | The currency code |
{PORTAL_URL} | A link to the customer portal |
{CHECKOUT_STATUS_TOKEN} | A token that can only read this checkout's status |
None of these prove that a payment was made: anyone can type them into a URL. To show a confirmed state on your thank-you page, call:
curl "https://api.revkeen.com/public/checkout-status/$STATUS_TOKEN"It returns { "status": "pending" | "complete" | "failed" | "expired" } and nothing else. The token expires 24 hours after payment. An unknown or expired token returns 404. Each IP address and each token can make 10 requests a minute.
The RevKeen thank-you element does this for you when its success URL includes rk_status={CHECKOUT_STATUS_TOKEN}.
Link Modes
Checkout links support different billing use cases:
| Mode | Use when |
|---|---|
custom | You want a general hosted payment link |
invoice | You want the link tied to a specific invoice |
subscription | You want the link tied to a subscription flow |
API Example
If you want to create links programmatically, use the payment-links API.
curl -X POST "https://api.revkeen.com/v2/payment-links" \
-H "x-api-key: $REVKEEN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Starter plan",
"mode": "custom",
"line_items": [
{
"price": "00000000-0000-0000-0000-000000000000",
"quantity": 1
}
],
"success_url": "https://example.com/success",
"cancel_url": "https://example.com/cancel",
"allow_promotion_codes": true
}'Who can create and change links
Each kind of caller is checked a different way:
| Caller | Create | Update, activate, deactivate, expire, archive | What is checked |
|---|---|---|---|
| Team member in the dashboard | Yes | Yes | Their role: Owner, Admin, Finance or Developer |
| Secret API key | Yes | Yes | The key's payment_links:write (or payment_links:*) scope |
| RevKeen Framer plugin | Yes | No | The member's current role, and the payment_links:write scope they granted. Amounts must come from an existing price |
| Other OAuth apps, the CLI and MCP clients | No | No | Refused with 403 |
An API key is checked against its scope, not against the current role of the team member who created it. Revoke a key when the person or system using it no longer needs to manage links.
Reserved metadata key
metadata.created_via is reserved for RevKeen. It records where a link was created, and RevKeen sets it only when a link is created through one of RevKeen's own apps.
If you send created_via in metadata when creating or updating a link, RevKeen silently drops it. The request still succeeds, and the rest of your metadata is stored. An update also cannot change or remove a created_via value that RevKeen set.
Billing schedule
Checkout links inherit the product billing schedule. There is no per-link schedule override. Set the cadence on the product (Configure Billing Schedule). Optional minimum commitment on the link does not replace that template.
To use a different schedule for one sale, create an invoice and turn on Customize for this invoice. That stores sale-time terms for that invoice only. The subscription created from the sale is then the runtime snapshot.
Status Lifecycle
Checkout links can move through the following states:
| Status | Meaning |
|---|---|
draft | Created but not yet active for customers |
active | Live and usable |
expired | No longer usable because the link expired |
completed | Used for a completed one-time flow |
For operational management, RevKeen also supports active, inactive, and archived status transitions on the management endpoints.
Important Notes
- Checkout links are designed to be reused. If you need a single checkout created per user action, use a checkout session instead.
- Payment methods inherit Settings → Payments. A link can pin Card only or Include Direct Debit. Payers see Direct Debit, not Bank Debit.
- If you need per-session method control such as card versus in-store, use the checkout-session API.
- A link offering a collection that is turned off for checkout links, deleted, or empty shows an unavailable state to customers. Turn the collection back on or point the link somewhere else.
- One subscription per cart: adding a subscription to the starting cart replaces any other subscription there. Usage products show in the preview but are billed later.
Related
- Checkout Sessions -- One-off API-created checkout flows
- Embed -- Current display mode and embed limitations
Owner: david · Reviewed 7 Sep 2026