Skip to Content
Checkout

Checkout

The Checkout API has two halves: public endpoints that a customer’s browser uses to pay a payment link (no auth), and authenticated endpoints you use to create and manage those links.

Public checkout

Identified by a payment reference, these endpoints require no authentication and are rate-limited per IP.

EndpointDescription
GET /api/checkout/:referenceGet checkout details
POST /api/checkout/:reference/bank-transferStart a bank-transfer payment
GET /api/checkout/:reference/check-paymentCheck whether payment completed
GET /api/checkout/:reference/eventsPayment timeline events
POST /api/checkout/:reference/refreshRefresh an expired payment link
POST /api/checkout/:reference/cancelCancel an unpaid checkout

A business can select one or more checkout virtual account providers in Sales settings. Selected providers are shown at checkout, and Cloove randomly chooses one when generating a new virtual account. Existing active payment sessions keep their current provider. If the business has no eligible selection, checkout uses the workspace default for compatibility.

Creating and managing payment links is done from your dashboard session (JWT + RBAC), under the /api/payment-links prefix.

Building an integration with an API key instead of a dashboard session? Use /v1/payment-links - the same feature, scoped by payment_links:read / payment_links:write.

MethodEndpointDescription
GET/api/payment-linksList payment links
POST/api/payment-linksCreate a payment link
POST/api/payment-links/batch-salesCreate links for multiple sales at once
GET/api/payment-links/:idGet a payment link
PATCH/api/payment-links/:idUpdate a payment link
DELETE/api/payment-links/:idDelete a payment link
POST/api/payment-links/walletCreate a wallet deposit link
POST/api/payment-links/wallet/dynamicCreate a dynamic wallet deposit link
GET/api/payment-links/walletGet wallet link configuration
POST /api/payment-links
{ "targetType": "SALE", "targetId": "60dd38ab-85f1-4e7c-9f63-7c6072199918", "description": "Invoice INV-2026-001", "expiresAt": "2026-08-01T00:00:00.000Z", "redirectUrl": "https://merchant.example/orders/INV-2026-001" }

redirectUrl is optional and must be an absolute HTTP or HTTPS URL. After a terminal outcome, the hosted checkout adds payment_status (paid, cancelled, or expired) and payment_reference before redirecting the payer. Existing query parameters are preserved.

Listen for payment.received webhooks to know the moment a checkout is paid, instead of polling check-payment.

Last updated on