---
title: "Public pay-page view for an invoice payment token (unauthenticated)"
method: GET
path: "/public/invoices/{token}"
tags: ["Public"]
---

# Public pay-page view for an invoice payment token (unauthenticated)

`GET /public/invoices/{token}`

## Request

- Base URL: `https://api.medianfi.com/api/v1`
- URL: `https://api.medianfi.com/api/v1/public/invoices/{token}`
- Auth: none required

AR charge rail (Stage 2). UNAUTHENTICATED; rate-limited per-IP and per-token. Resolves the token to the pay-page view: { merchant: { name, supportEmail? }, invoice: { number, issueDate, dueDate, terms, currency, subtotalCents, taxCents, totalCents, amountPaidCents, amountDueCents, status: open|partially_paid|paid, lines }, methods: { card: { available, feeMode, feeCents, amountToChargeCents }, bankTransfer: { available, details } } }. bankTransfer.details is the FULL (unmasked) structured bank block — the payer needs it to push an ACH/wire — and is non-null only when bank transfer is enabled AND the payer-required fields (holder, bank, routing, account) are all present. UNIFORM-404 SEMANTICS: an unknown/blank token, a draft/void/uncollectible invoice, a closed AR/AP surface, or a non-allowlisted/non-active company ALL return the same 404 shape so the endpoint never leaks whether a token, company, or invoice exists.

## Response `200`

PublicInvoiceView (see description for shape)

## Other responses

- `404`: Uniform not-found — identical for every rejection branch (no enumeration oracle)
- `429`: Rate limited (per-IP or per-token)

---

[API](https://skmtc.dev/medianfi/apis/median-api.md) · [All operations](https://skmtc.dev/medianfi/apis/median-api/llms.txt) · [OpenAPI document](https://skmtc.dev/medianfi/apis/median-api/revisions/20090ea32b0d?raw)
