Skip to main content
POST
/
v1
/
billing
/
invoices
/
:id
/
void
curl -X POST https://gpuoutlet.ai/v1/billing/invoices/inv_01H.../void \
  --cookie "sid=$SID"
{ "ok": true }
Voiding an invoice cancels it on both our side AND on Stripe’s. The user no longer owes the money. Use sparingly — almost every case should be a refund on the original charge, not a void of a fresh invoice.
This endpoint is admin-gated in production. Today it accepts any authenticated user (TODO before mainline launch), but the route should not be called by end-user flows.
id
string
required
Invoice id (inv_…). Must belong to the authenticated user.
ok
boolean
Always true on success.
curl -X POST https://gpuoutlet.ai/v1/billing/invoices/inv_01H.../void \
  --cookie "sid=$SID"
{ "ok": true }

What happens

  1. Try to void the Stripe-side invoice first (best-effort; only succeeds while the Stripe invoice is still open).
  2. Update our local row to status='void', voidedAt=now.
  3. Append an InvoiceEvent row recording the transition.
Voiding does NOT credit the wallet. If the user already paid an invoice and needs the money returned, use a Stripe refund instead (out-of-band today; a self-serve refund endpoint may ship later).