Ad-hoc pricing
Charge a custom amount without attaching a catalog price. Pass amount, currency, and optionally plan type when creating a Checkout Session. You can also attach a per-session merchant_fee (name + percent and/or fixed cents) without enabling Settings → Fees.
When to use it
Quotes, usage-based invoices, donations, and negotiated deals fit ad-hoc pricing. Prefer catalog prices when the same SKU is reused.
One-time ad-hoc charge
Example request
POST /v1/checkout_sessions
Authorization: Bearer rk_live_...
Content-Type: application/json
{
"mode": "payment",
"amount": 12500,
"currency": "usd",
"success_url": "https://example.com/thanks",
"cancel_url": "https://example.com/cancel"
}Example response
{
"id": "cs_...",
"object": "checkout_session",
"amount": 12500,
"currency": "usd",
"status": "open",
"mode": "live",
"plan_type": "one_time",
"url": "https://rollopayments.com/pay/cs_...",
"expires_at": 1723014400000,
"livemode": true
}How to handle it
Redirect to url. Fulfill on payment.succeeded. Fee pass-through and deposit limits still apply. Individual accounts cannot accept $1,000+ per payment.
Ad-hoc with platform fee
Example request
POST /v1/checkout_sessions
Authorization: Bearer rk_live_...
Content-Type: application/json
{
"mode": "payment",
"amount": 12500,
"currency": "usd",
"success_url": "https://example.com/thanks",
"merchant_fee": {
"name": "Handling",
"percent": 2,
"amount": 50
}
}Example response
{
"id": "cs_...",
"object": "checkout_session",
"amount": 13050,
"currency": "usd",
"status": "open",
"mode": "live",
"plan_type": "one_time",
"url": "https://rollopayments.com/pay/cs_...",
"merchant_fee": { "label": "Handling", "amount": 300 },
"expires_at": 1723014400000,
"livemode": true
}How to handle it
name and label are interchangeable. Settings does not need to be enabled. See Payments & fees and Checkout.
Recurring ad-hoc
Example request
POST /v1/checkout_sessions
Authorization: Bearer rk_live_...
Content-Type: application/json
{
"mode": "subscription",
"amount": 9900,
"currency": "usd",
"interval": "month",
"success_url": "https://example.com/welcome",
"merchant_fee": { "label": "Platform fee", "percent": 3 }
}Example response
{
"id": "cs_...",
"object": "checkout_session",
"amount": 10347,
"currency": "usd",
"status": "open",
"mode": "live",
"plan_type": "recurring",
"url": "https://rollopayments.com/pay/cs_...",
"merchant_fee": { "label": "Platform fee", "amount": 297 },
"expires_at": 1723014400000,
"livemode": true
}How to handle it
On success Rollo creates a subscription (and an internal price). The merchant_fee sticks on renewals. Provision on subscription.created like any other plan — see Subscriptions.