---
title: "Refund a purchase"
method: POST
path: "/v1/admin/billing/refunds"
tags: ["Admin"]
---

# Refund a purchase

`POST /v1/admin/billing/refunds`

## Request

- Base URL: `https://api.lizzflix.xyz` (the document declares no server; this is the origin it was published from)
- URL: `https://api.lizzflix.xyz/v1/admin/billing/refunds`
- Auth: none declared

## Request body

- AdminRefundBody
  - `purchaseId` string, required
  - `amountCents` integer
  - `clawBackCredits` boolean, required
  - `reason` string, required

## Response `201`

Refunded

- object
  - `refund` BillingRefund, required
    - `id` string, required
    - `kind` 'withdrawal' | 'admin', required
    - `purchaseKind` 'topup' | 'plan', required
    - `purchaseId` string, nullable, required
    - `status` 'pending' | 'succeeded' | 'failed', required
    - `refundCents` number, required
    - `amountPaidCents` number, nullable, required
    - `currency` string, nullable, required
    - `providedShare` number, nullable, required
    - `clawedBackCredits` number, required
    - `reason` string, nullable, required
    - `createdAt` string, required
    - `completedAt` string, nullable, required

## Other responses

- `400`: Invalid request
- `401`: Unauthorized
- `403`: Forbidden
- `404`: No such purchase
- `409`: The purchase has already been refunded (by any path: withdrawal, admin refund, account closure)
- `502`: Stripe refused (nothing changed), or reason refund_pending: Stripe has not confirmed it yet

---

[API](https://skmtc.dev/lizzflix/apis/lizzflix-api.md) · [All operations](https://skmtc.dev/lizzflix/apis/lizzflix-api/llms.txt) · [OpenAPI document](https://skmtc.dev/lizzflix/apis/lizzflix-api/revisions/4536ce9d80ff?raw)
