---
title: "Last N paid Stripe invoices for the customer"
method: GET
path: "/api/me/billing/invoices"
tags: ["me"]
---

# Last N paid Stripe invoices for the customer

`GET /api/me/billing/invoices`

## Request

- Base URL: `https://api.signalraven.ai`
- URL: `https://api.signalraven.ai/api/me/billing/invoices`
- Auth: none declared

Admin-only. Proxies stripe.invoices.list (status=paid). Each row carries the Stripe-hosted view URL + direct PDF URL — both gated by the URL token itself, no portal auth needed for click-through.

## Query parameters

- `limit` string

## Response `200`

Invoice list

- BillingInvoicesResponse
  - `invoices` BillingInvoice[], required
    - `id` string, required: Stripe invoice id, e.g. "in_1Q...".
    - `number` string, nullable, required: Stripe-issued invoice number, e.g. "AB1234-001". May be null on draft.
    - `createdAt` string, date-time, required
    - `amountPaid` integer, required: Cents actually charged.
    - `currency` string, required: ISO 4217 code, e.g. "usd".
    - `periodStart` string, date-time, nullable, required
    - `periodEnd` string, date-time, nullable, required
    - `hostedInvoiceUrl` string, uri, nullable, required: Stripe-hosted invoice page. Read-only view + download button. URL gates access by its own token — no portal auth needed on click-through.
    - `pdfUrl` string, uri, nullable, required: Direct PDF download URL (Stripe-hosted).
    - `billingReason` string, nullable, required: Stripe billing reason — useful for distinguishing subscription_cycle vs subscription_create vs manual.
  - `hasMore` boolean, required

## Other responses

- `401`: Not authenticated
- `403`: Not admin

---

[API](https://skmtc.dev/signalraven/apis/zygnal-api.md) · [All operations](https://skmtc.dev/signalraven/apis/zygnal-api/llms.txt) · [OpenAPI document](https://skmtc.dev/signalraven/apis/zygnal-api/revisions/36e1d9b9d604?raw)
