Issue a refund
Refunds return funds to the customer's original payment method. You can refund the full remaining balance or a partial amount from Dashboard → Payments.
POST /v1/payments/:id/refund. Use GET /v1/payments/:id and the payment.refunded webhook to sync your app.How refunds work
Only payments in succeeded or partially_refunded can be refunded. When the full amount is returned, status becomes refunded. Timing to the customer's statement depends on their bank; your Rollo balance adjusts when the refund is accepted.
Dashboard
Open Payments, find the charge, and choose Refund. Leave the amount blank to refund everything remaining, or enter a partial amount in cents.
Confirm after a dashboard refund
Example request
GET /v1/payments/pay_01H... Authorization: Bearer rk_live_...
Example response
{
"id": "pay_01H...",
"object": "payment",
"amount": 4900,
"currency": "usd",
"status": "partially_refunded",
"fee": 339,
"net_amount": 4561,
"customer_email": "buyer@example.com",
"refunded_amount": 1500,
"created": 1723000000000,
"livemode": true
}How to handle it
Update order state from status and refunded_amount. Prefer the webhook below so you do not need to poll.
Webhook: payment.refunded
Example request
# Fired for full or partial refunds
Example response
{
"id": "evt_...",
"type": "payment.refunded",
"created": 1723100000,
"data": {
"id": "pay_01H...",
"amount_refunded": 1500,
"refunded_total": 1500,
"currency": "usd",
"status": "partially_refunded"
}
}How to handle it
amount_refunded is this refund; refunded_total is the cumulative amount returned on the payment. Revoke or reduce delivered goods for that portion. Deduplicate with the event id.
See also Payments & fees.