Billing API

Plans, prices, checkout links, the budget cap and the subscription. 11 ops: get_pricing, get_account, get_billing, create_checkout_link, subscribe, cancel_subscription, resume_subscription, set_budget_cap, claim_checkout, create_billing_portal_link, get_billing_link.

Plans, prices, checkout links, the budget cap and the subscription.

get_pricing

readno credential needed

Get pricing · POST /api/v1/get_pricing · scope billing:read or GET …?input=

The plans (Free, Starter, Growth, Scale, Enterprise): price {monthly, yearly} in USD, included messages and AI replies a month, limits (live numbers, WhatsApp accounts, members, agents, history days; null is unlimited), features, overage rates and the default budget cap, a checkout_url per paid plan, and how_to_buy. Meta's own message fees are billed by Meta to the customer's WABA at cost and are not part of these prices. The same document as GET /api/v1/pricing; needs no credential (REST, the catalog MCP server at /api/mcp/catalog, `wabi pricing`). Call before recommending or buying a plan.

curl -X POST https://getwabi.dev/api/v1/get_pricing \  -H "Authorization: Bearer wabi_…"

Get account · POST /api/v1/get_account · scope billing:read or GET …?input=

Who this credential acts for and what it may use: the organization, your role in it (viewer, member, admin, owner) and whether you are a person, an OAuth client or an API key (acting_as, with the key's scopes), the plan in force (status, interval, renewal or end date, budget cap), usage this period against every limit (messages, AI replies, live numbers, members, agents) with what remains and the overage so far, and next_tier: what the next plan adds, its price and a checkout_url. Same data as GET /api/v1/account and `wabi account`. Call before a bulk send or when a human asks about plan or usage.

curl -X POST https://getwabi.dev/api/v1/get_account \  -H "Authorization: Bearer wabi_…"

Get billing · POST /api/v1/get_billing · scope billing:read or GET …?input=

This organization's plan, subscription status, renewal or end date, budget cap, whether a card is saved (so subscribe can charge it), and usage this period against the plan (messages, AI replies, numbers, members, agents, overage so far). Pass refresh: true right after a human finished a checkout to pull the latest state from Stripe.

curl -X POST https://getwabi.dev/api/v1/get_billing \  -H "Authorization: Bearer wabi_…"

subscribe

writeowner or admin

Subscribe · POST /api/v1/subscribe · scope billing:write

Start or change this organization's paid plan in one call, charging the card already saved for the organization. Only after a human approved this plan and price: confirm must be true. Without a saved card (or if the card needs the human, e.g. 3-D Secure) nothing is charged and it returns status checkout_required with a checkout_url for a human to finish. A plan change is prorated and invoiced immediately. Returns {status: subscribed | changed | unchanged | checkout_required, billing}.

curl -X POST https://getwabi.dev/api/v1/subscribe \  -H "Authorization: Bearer wabi_…" \  -H "Content-Type: application/json" \  -d '{"plan":"starter","confirm":false}'

cancel_subscription

writeowner or admin

Cancel subscription · POST /api/v1/cancel_subscription · scope billing:write

Cancel the paid plan at the end of the current period (no refund; the plan stays until then, then the organization is on Free). Only when a human asked: confirm must be true. resume_subscription undoes it before the period ends.

curl -X POST https://getwabi.dev/api/v1/cancel_subscription \  -H "Authorization: Bearer wabi_…" \  -H "Content-Type: application/json" \  -d '{"confirm":false}'

resume_subscription

writeowner or admin

Resume subscription · POST /api/v1/resume_subscription · scope billing:write

Undo a cancellation that has not taken effect yet, so the plan renews as before. Nothing is charged until the normal renewal date.

curl -X POST https://getwabi.dev/api/v1/resume_subscription \  -H "Authorization: Bearer wabi_…"

set_budget_cap

writeowner or admin

Set budget cap · POST /api/v1/set_budget_cap · scope billing:write

Set this organization's monthly overage budget cap in US dollars: usage past the plan's allowance is billed up to this amount, then non-critical sends (campaigns, bulk sends) stop until the next period. null restores the default (2x the plan price). Free has no overage and ignores it. Owners and admins; a human decision, so only when asked.

curl -X POST https://getwabi.dev/api/v1/set_budget_cap \  -H "Authorization: Bearer wabi_…" \  -H "Content-Type: application/json" \  -d '{"amount":0}'

claim_checkout

writeowner or admin

Claim checkout · POST /api/v1/claim_checkout · scope billing:write

Attach a checkout paid before signup (create_checkout_link without a credential) to this organization, by its session_id (cs_…). Usually automatic: returning from Stripe, or signing up with the email used at checkout, claims it. Call it when a human paid first and the plan has not appeared. Returns {outcome: claimed | already_yours, billing}.

curl -X POST https://getwabi.dev/api/v1/claim_checkout \  -H "Authorization: Bearer wabi_…" \  -H "Content-Type: application/json" \  -d '{"session_id":"session_id"}'