Skip to main content
PymtHouse serves a machine-readable OpenAPI 3.0 specification and an interactive Scalar UI for every public endpoint.

Live API docs (Scalar)

Open /api/v1/docs on your PymtHouse deployment to browse and try every endpoint interactively. The Scalar UI accepts HTTP Basic auth directly in the browser.
Internal routes (/api/v1/internal/…) are for the PymtHouse dashboard’s own session and are not linked from the public Scalar UI. Use Builder routes for all integrator access.

Base URL

All API endpoints share one base URL:
OIDC endpoints live under /api/v1/oidc/…. Builder API endpoints live under /api/v1/apps/{clientId}/…. Usage API canonical paths live under /api/v1/builder/apps/{clientId}/…. Always resolve OIDC endpoint URLs from the discovery document at runtime:

Authentication

PymtHouse uses three auth modes depending on the operation:

HTTP Basic (M2M — most Builder/Usage routes)

Example:

Bearer token (machine or user JWT)

Obtain a machine token via client credentials, then use it for multiple calls:

Provider session (dashboard-only routes)

Plans, Stripe Connect, and billing mutation routes require a logged-in dashboard session. These are not callable from a backend service — use the PymtHouse dashboard UI or pass the next-auth.session-token cookie from a browser session in scripts.

Endpoint inventory

OIDC / Auth

User management

Usage API

Billing

Plans

App config


Common response patterns

Tenant boundary

M2M requests to app-scoped endpoints enforce that the authenticated M2M client belongs to the same app as the {clientId} in the URL path. Mismatches return 404 Not Found — not 401 or 403 — to prevent app id enumeration. Session and user-JWT endpoints use different tenant controls.

Wei values

All *Wei fields are decimal strings, not numbers. They may exceed Number.MAX_SAFE_INTEGER. Parse them with BigInt():

USD micros

*UsdMicros fields are integer strings where 1000000 = $1.00. These are computed once at signing time and never recomputed from the current ETH/USD rate.

Error format

Denial responses from the activation gate use RFC 9457 problem details:
Machine-readable code values: owner_payment_method_required, end_user_cap_reached, stripe_connect_required, stripe_connect_pending.