#Hosted checkout & payment links
Two low/zero-code ways to collect a card payment on a PlutoPay-hosted page, so you never build or host a card form yourself.
#Hosted checkout
Create a checkout session, then redirect the customer to the returned url. They pay on the PlutoPay-hosted page and return to your success_url.
POST /v1/checkout/sessions
| Field | Type | Required | Description |
|---|---|---|---|
amount |
integer | ✔ | Cents. Minimum 50. |
currency |
string | Defaults to your account currency. | |
description |
string | ||
customer_email |
string | Prefill the customer's email. | |
customer_name |
string | ||
success_url / cancel_url |
string | Where to send the customer after paying / canceling. | |
payment_method_types |
array | Any of card, apple_pay, google_pay. |
|
collect_email / collect_name / collect_phone / collect_address |
boolean | Fields to collect on the page. | |
expires_in |
integer | Seconds until expiry (5 min – 24 h). | |
metadata |
object |
curl https://plutopayus.com/api/v1/checkout/sessions \
-H "Authorization: Bearer sk_test_your_key_here" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: checkout_1001" \
-d '{ "amount": 4750, "currency": "usd", "description": "Order #1001",
"success_url": "https://your-site.com/thanks",
"cancel_url": "https://your-site.com/cart" }'
#Response 201
{
"data": {
"id": "019c8044-…",
"reference": "cs_9Yx2Kq…",
"url": "https://plutopayus.com/pay/cs_9Yx2Kq…",
"amount": 4750,
"currency": "usd",
"status": "open",
"expires_at": "2026-07-05T14:42:03+00:00",
"transaction_id": "019c8044-…"
}
}
Redirect the customer to data.url. Fulfill the order on the payment.succeeded webhook — don't rely on the browser returning to success_url. Retrieve a session anytime with GET /v1/checkout/sessions/{id}.
#Payment links
A payment link is a long-lived, shareable hosted-checkout URL — no website required.
POST /v1/payment-links
| Field | Type | Required | Description |
|---|---|---|---|
amount |
integer | ✔ | Cents. Minimum 50. |
currency |
string | Defaults to your account currency. | |
description |
string | ||
customer_email |
string | Prefill the customer's email. | |
success_url / cancel_url |
string | Redirect targets. | |
expires_in |
integer | Seconds until expiry. Min 5 min, max 90 days. | |
metadata |
object |
curl https://plutopayus.com/api/v1/payment-links \
-H "Authorization: Bearer sk_test_your_key_here" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: link_1001" \
-d '{ "amount": 4750, "currency": "usd", "description": "Invoice #1001",
"customer_email": "customer@example.com" }'
#Response 201
{
"data": {
"id": "019c8044-…",
"reference": "pl_9Yx2Kq…",
"url": "https://plutopayus.com/pay/pl_9Yx2Kq…",
"amount": 4750,
"currency": "USD",
"status": "open",
"is_test": true,
"expires_at": "2026-07-12T14:12:03+00:00",
"created_at": "2026-07-05T14:12:03+00:00"
}
}
Share data.url. Manage links with:
GET /v1/payment-links/{id} # id or reference (pl_…)
GET /v1/payment-links?limit=20
DELETE /v1/payment-links/{id} # deactivate
Want customers to stay on your own branded page instead of a hosted one? Use Elements — create a payment, then mount the Payment Element on your checkout.