Docs

Billing & wallet

Subscription model, wallet ledger, programmatic top-ups, and refund policy.

Billing

Hangar combines a flat monthly subscription with pay-as-you-go LLM tokens out of a wallet. The wallet is dollar-precise and atomic.

Subscription

Subscriptions cover the runtime instance (Fly Machine), channel routing, skill execution, persistence, and observability.

  • Tiers are listed at /pricing and the machine-readable copy at /pricing.md.
  • The provider is configurable: Stripe (default), LemonSqueezy, or Polar. Adapters live under lib/billing/.
  • Cancellation is at period end — you keep access until the current cycle ends.

Wallet

LLM token usage is billed pay-as-you-go from a wallet:

  • Every account starts with a small wallet credit on signup.
  • Top up at POST /api/wallet/topup (or via the dashboard). The body is { "amountCents": 1000 } for $10. The response is a hosted checkout URL.
  • Charges are atomic cents-precision deductions. The /api/llm/proxy handler debits the wallet before calling the upstream provider, refunds on failure, and writes a row to wallet_transactions with the model, prompt-tokens, completion-tokens, and the resolved provider cost.
  • We do not mark up provider tokens. The wallet pays exactly what OpenAI / Anthropic / Google / OpenRouter charge.

Wallet semantics

  • Wallet hits zero ⇒ /api/llm/proxy returns 402 wallet-empty. No call is made upstream.
  • Top-up amount lands in the wallet on the billing webhook, not when the user clicks "pay". A delayed webhook means a delayed credit.
  • Wallet balance is fully refundable on cancellation — email support and we credit the original payment method.

Programmatic top-ups

curl -X POST https://hangar.so/api/wallet/topup \
  -H "Authorization: Bearer oss_..." \
  -H "Content-Type: application/json" \
  -d '{"amountCents": 1000}'

Response:

{
  "url": "https://checkout.stripe.com/..."
}

The user opens the URL to complete the payment. Hangar never sees card details — Stripe / LemonSqueezy / Polar handle the form, we get the webhook.

Refunds

  • Subscription refunds: prorated for the unused portion of the current period on cancellation.
  • Wallet refunds: full balance, unconditional, by request via support email.
  • Provider chargebacks: handled by the billing provider per their policy. Hangar reverses the credited wallet amount on receipt of a chargeback webhook.
Billing & wallet — Hangar