Skip to content

Refunds

A refund returns funds to the original payment method after settlement. Refunds are distinct from voids which cancel pre-settlement payments.

Create a refund

POST /pos/v1/orders/{order_id}/payments/{payment_id}/refunds

Required scopes: tilt/payments:refund

Request body

{
"amount_cents": 2500,
"reason": "customer_request"
}
FieldTypeRequiredDescription
amount_centsintegerYesAmount to refund in cents. Must be ≤ the payment amount minus already-refunded amount.
reasonstringNoReason code. One of: customer_request, duplicate, fraudulent, other.

Response

{
"refund_id": "uuid",
"payment_id": "uuid",
"order_id": "uuid",
"status": "pending",
"amount_cents": 2500,
"reason": "customer_request",
"created_at": "2024-01-16T09:00:00Z"
}

Refunds are processed asynchronously. Subscribe to the payment.refunded webhook event for completion notification.

Get a refund

GET /pos/v1/orders/{order_id}/payments/{payment_id}/refunds/{refund_id}

Required scopes: tilt/payments:read

Refund statuses

StatusDescription
pendingSubmitted to processor
approvedProcessor confirmed the refund
failedProcessor rejected the refund (see processor_message)