---
title: "List one-time (app-OTP) payments for a developer-owned app"
method: GET
path: "/apps/{appUuid}/payments"
---

# List one-time (app-OTP) payments for a developer-owned app

`GET /apps/{appUuid}/payments`

Owner-only. Returns one-time payments across all buyers for an app the authenticated developer owns; gated on app ownership. Distinct from `/payments/me` (`read:self`) by design — collapsing them would expose every customer's payments to a buyer token.

## Path parameters

- `appUuid` string, uuid, required

## Query parameters

- `limit` integer — Number of results to return (default 50, max 100).
- `cursor` string — Opaque cursor for the next page, from a prior response.

## Headers

- `X-Fanvue-API-Version` string, required

## Response `200`

List of one-time payments for the app

- object
  - `data` object[], required
    - `uuid` string, required — Horizon purchase identifier.
    - `appUuid` string, required — UUID of the app the purchase belongs to.
    - `buyerUuid` string, required — UUID of the purchasing Fanvue user.
    - `planUuid` string, required — UUID of the purchased pricing plan / item.
    - `invoiceNumber` string, nullable, required — Fanvue invoice number. Use as the idempotency key for fulfilment. Null for purchases that settled before reconciliation was enabled, or not yet settled.
    - `billingReferenceId` string, required — The `appotp_…` reference minted at checkout.
    - `clientReferenceId` string, required — Merchant-supplied reference passed at checkout via `?client_reference_id=`; empty string when unset.
    - `status` 'pending' | 'completed' | 'failed' | 'refunded' | 'expired', required — Lifecycle status of the one-time purchase.
    - `amount` number, required — Amount in minor currency units, snapshotted at checkout.
    - `currency` string, required — ISO currency code.
    - `externalPaymentId` string, required — Provider payment id; empty string until completed.
    - `createdAt` string, date-time, required — When the purchase was created.
    - `updatedAt` string, date-time, required — When the purchase was last updated.
  - `nextCursor` string, nullable, required — Cursor for the next page, or null if none.

## Other responses

- `400` — Bad Request - API version not supported OR validation failed OR invalid UUID
- `401` — Unauthorized Response
- `403` — Unauthorized Response
- `404` — App not found / not owned, or payment not found
- `410` — API version no longer supported (sunset)
- `429` — Too many requests - rate limit exceeded
- `502` — Failed to load payments from upstream
- `503` — Developer API upstream is not configured

---

[API](https://skmtc.net/fanvue/apis/fanvue-api.md) · [All operations](https://skmtc.net/fanvue/apis/fanvue-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/fanvue/fanvue-api/revisions/c5ddcd5c7e72/schema)
