1. Request a link
POST /portal/auth/request is public (no API key). Call it from your
app when a customer clicks “Manage billing”, or let the customer enter
their email on a page you host:
The response is identical whether or not the email belongs to a customer —
this prevents email enumeration. In development (
APP_ENV=development) the
response also includes a _dev_link so you can click through without a
mailbox.2. Verify the token
The emailed link points at your portal with a one-time token. Exchanging it starts a 7-day session and sets theportal_session cookie:
/portal/api/* call is authenticated by the
portal_session cookie (browsers send it automatically):
Flow
Security
- Single-use tokens with a short expiry — a link works once.
- Sessions last 7 days;
POST /portal/api/logoutends one early. - Enumeration-safe request endpoint (always a positive response).
Email branding (from-name, logo, subject) is a dashboard setting under
Settings → Portal, not an API field — there is no
/v1/settings/portal endpoint.Next Steps
Self-Service
What a signed-in customer can do: invoices, card updates, mandates,
disputes, gifts.