ZapAPI Docs
Get StartedConceptsAI GatewayGuidesPayment GatewaySDKAPI ReferenceResources
Guides

Subscription Plans

The four ZapAPI subscription tiers — one plan covers the whole platform, paid in sats.

One subscription covers the whole platform — not just the API. A user pays one sats invoice per period and unlocks a tier across every product: Payments API, Address Marketplace, App Directory, wallet, bio pages and merchant tools.

ProductFree tierPremium tiers unlock
Payments API (invoices, webhooks, providers, projects)1k calls/mohigher quotas, retention, projects, connections
Address Marketplace1 free address on zapapi.appextra addresses, provider discounts, priority search
App Directory1 listing, organic rankmore listings, monthly boost, featured eligibility
Wallet + bio + merchant toolsbasic limitsmore wallets, more links, custom bio themes

Pricing philosophy: flat subscription in sats (our native unit), capability-based not usage-based. No cut of payments ever — that's the marketplace trust story, and we don't break it anywhere.


2. The four tiers (sats/month, annual = 10× monthly ≈ 17% off)

2. The four tiers (sats/month, annual = 10× monthly ≈ 17% off)

FreeZap (consumer)Pro (builder)Business (team)
Price02,100 sats/mo (~$2)21,000 sats/mo (~$19)69,000 sats/mo (~$63)
Annual—21,000 sats/yr210,000 sats/yr690,000 sats/yr
Anchor—Primal $7 / Alby $3 — we undercutour old $19, repriced in satsour old $79, repriced

2.1 Free — "get started, stay forever"

  • API: 1,000 calls/mo, 1 project, 1 provider connection, 7-day logs
  • Addresses: 1 free you@zapapi.app
  • Directory: 1 app listing (organic rank, no boosts bundled)
  • Wallet: 1 wallet
  • Merchant: 5 payment links, 1 bio page, 1 creator plan
  • Community support

2.2 Zap — 2,100 sats/mo — "the consumer upgrade" (Primal-killer)

Everything in Free, plus:

  • Addresses: 3 first-party addresses on zapapi.app + 5% discount on any provider domain (discount funded by us — we rebate the buyer from plan revenue; providers still get 100% of their price)
  • Directory: 3 app listings + 1 free boost/mo (1k sats value) (does not roll over)
  • Wallet: 3 wallets
  • Merchant: 25 payment links, 3 bio pages, 3 creator plans
  • API: 5,000 calls/mo (incidental API use — Zap is not for builders)
  • Zap badge on your directory listings + bio page

2.3 Pro — 21,000 sats/mo — "the builder tier" (our old $19)

Everything in Zap, plus:

  • API: 100k calls/mo, 10 projects, 5 provider connections, 30-day logs, webhook replay, custom webhook secrets, advanced analytics
  • Addresses: 10 first-party addresses + 10% provider-domain discount
  • Directory: 10 listings + 1 free 5k boost/mo + featured-review fast lane
  • Wallet: 10 wallets
  • Merchant: unlimited payment links, 10 bio pages, 10 creator plans, paid bio links enabled
  • Priority support

2.4 Business — 69,000 sats/mo — "teams & high volume" (our old $79)

Everything in Pro, plus:

  • API: 1M calls/mo, unlimited projects, unlimited connections, 90-day logs, audit logs, team access (RBAC seats × 5), SLA
  • Addresses: unlimited first-party + 20% provider-domain discount + reserved premium names pool
  • Directory: unlimited listings + 1 free 20k boost/mo
  • Wallet: 25 wallets
  • 24/7 support, custom integrations

2.5 Enterprise (not self-serve)

Custom SLA, dedicated instance, SSO — contact. Not in the sats flow.


3. Payment flow (sats-only, reuses creator-plans patterns)

User picks tier BillingService.createCheckout(tier, period: month|year)
 invoice minted on the PLATFORM wallet (ZapAPI revenue — same place as
 directory boosts and marketplace commission, via LNBITS_PLATFORM_* keys)
 buyer pays (wallet balance "Pay now" OR external QR)
 settlement detected (poll on read + 5-min cron sweeper, same pattern
 as marketplace orders and directory boosts)
 SubscriptionPlan row: status active, currentPeriodEnd = now + period
 entitlements effective immediately

Renewal: 24h before currentPeriodEnd, we create the next period's invoice and email/toast the user. No auto-charge in v1 (user pays each period manually — honest, no dark patterns). If unpaid at expiry: graceUntil = +3 days, then tier reverts to free. Paid boosts/addresses/ listings already owned NEVER get revoked — entitlements only gate new creations and new renewals.

Annual: one invoice for 10× monthly price (12 months of service).


4. Data model

UserPlan (new entity — REPLACES the dead `subscriptions` Stripe skeleton)
 id, userId (unique),
 tier: 'free' | 'zap' | 'pro' | 'business',
 status: 'active' | 'expired' | 'cancelled',
 billingPeriod: 'month' | 'year' (null for free),
 currentPeriodStart, currentPeriodEnd, graceUntil,
 createdAt, updatedAt

PlanInvoice (per period, audit trail)
 id, userId, tier, period: 'month'|'year',
 amountSats, paymentHash, bolt11,
 status: 'pending' | 'paid' | 'expired',
 periodStart, periodEnd (what this payment buys),
 createdAt, paidAt

The existing subscriptions table (Stripe skeleton, unused) gets dropped; billing.controller's unauthenticated updatePlan is removed and replaced by the checkout flow below.


5. Entitlement checks (where the plan actually bites)

One resolver, PlansService.getEntitlements(userId), returning an object with: tier, apiQuota, maxProjects, maxConnections, logRetentionDays, firstPartyAddresses, providerDiscountPct, directoryListings, freeBoostSatsPerMonth, maxWallets, maxPaymentLinks, maxBioPages, maxCreatorPlans and teamSeats.

Enforcement points (incremental, not big-bang):

  1. Claim address (LnurlModule) — count first-party claims vs tier cap
  2. Directory submit — count active listings vs cap; monthly free-boost credit auto-applies at boost checkout (first N sats free per month)
  3. Marketplace checkout — apply providerDiscountPct at reservation: provider still gets their FULL price; we mint the buyer a reduced invoice and cover the delta from the platform wallet (documented as "plan rebate" on the order)
  4. Wallet create — wallet count cap
  5. API keys guard (later phase) — monthly API quota via UsageService (needs the usage interceptor wired — separate track)

Everything else keeps working as free until its enforcement lands.


6. API surface

GET /plans the 4 tiers + features (public)
GET /billing/plan my current plan + entitlements + usage
POST /billing/checkout { tier, period } { invoice, planInvoice }
POST /billing/invoices/:id/check poll settlement activate
GET /billing/invoices my payment history
POST /billing/cancel cancel renewal (keeps tier till period end)

Dashboard: /dashboard/billing rebuilt around the tiers (current plan, entitlement usage bars, upgrade buttons with sats prices, invoice history, "Pay now from wallet" + QR flows). Landing /pricing section reads the same /plans endpoint — one source of truth, no more hardcoded drift.


7. Rollout

  1. Phase 1 (this doc): entities + checkout + settlement + plan resolver + billing UI + landing pricing from API. Enforcement: claims + directory listings + boost credit + provider discount.
  2. Phase 2: renewal reminder emails, annual invoices, grace cron.
  3. Phase 3: API quota enforcement (usage interceptor + monthly windows), team seats UI, premium names pool.

On this page