Skip to content
Dashboard
Menu Account API · Billing

Account API

Billing

Two plans: Pro at $4/mo and Team at $19/mo — what they unlock is in Limits & plans. Subscriptions run through Stripe; these three routes are all there is to integrate.

Where you stand

GET

/billing/me

hp_ key or ID token

The account’s current plan and subscription state. plan reads free whenever there’s no active subscription, even if one existed before.

json200 OK
{
  "accountId": "9f1c2c4e-7b2a-4f5e-a1d3-2c8b51b6f0aa",
  "plan": "pro",
  "activeSubscription": true,
  "currentPeriodEnd": "2026-07-12T00:00:00.000Z",
  "cancelAt": null,
  "portalAvailable": true
}

Subscribe

POST

/billing/checkout

hp_ key or ID token

Creates a Stripe Checkout session for "pro" or "team" and returns the URL to redirect to. If the account already has an active subscription, alreadySubscribed comes back true instead of double-charging you.

bash
curl -X POST https://hurl.page/billing/checkout \
  -H "Authorization: Bearer hp_QffDmo0…" \
  -H "Content-Type: application/json" \
  -d '{"plan": "pro"}'
json200 OK
{
  "url": "https://checkout.stripe.com/c/pay/cs_live_…",
  "alreadySubscribed": false
}

Manage or cancel

POST

/billing/portal

hp_ key or ID token

Returns a Stripe customer-portal URL — invoices, payment method, plan changes and cancellation all live there.

bash
curl -X POST https://hurl.page/billing/portal -H "Authorization: Bearer hp_QffDmo0…"
# → { "url": "https://billing.stripe.com/p/session/…" }

If billing is ever down

When the payments backend is unreachable, keyed accounts fail open to paid limits until it recovers. An outage on our side is never your problem — deploys keep working.