Skip to main content
Refunds in Float are asynchronous refund requests: you submit one via the API, Float reviews and processes it against the shopper’s instalment plan, and the request moves through a small state machine until it completes.

Creating a refund

  • checkout_id — the data.id returned when you created the checkout.
  • amount — cents to refund. Anything from 1 cent up to the remaining refundable amount; partial refunds are supported, and you can issue multiple partial refunds until the original amount is exhausted.
Response:
Store the refund request id and track it with GET /api/refunds/:id.

Refund lifecycle

Refunds are not instant: approval and processing can take up to a business day. Reflect requested/pending as “refund in progress” in your admin UI rather than assuming completion.

Constraints

  • 100-day window — the purchase date is day 0; day 100 can still be refunded, day 101 cannot. Later attempts return 422 with "Orders can only be refunded within 100 days of the purchase date."
  • Same-day refunds — if your integration has automatic refund approval enabled, refunds can’t be requested on the day of purchase (the ledger entry must settle first): 422 with "Order can't be refunded on the day of purchase." Resubmit after 10:00 (your local time) the next day. Integrations with manual review can submit immediately — the request just waits in review.
Additional rules:
  • The checkout must be successful.
  • The sum of all refunds for a checkout can’t exceed the original amount (422 if it would).
  • Refunds are processed toward the shopper’s instalment plan — remaining instalments are reduced or already-collected amounts returned. You don’t need to care which; Float handles the split.

Cancelling vs refunding

There is no separate “void” or “cancel payment” API. If a shopper cancels before paying, the checkout simply ends cancelled and no money moves. Once a checkout is successful, use a refund.

Common errors