Skip to main content
Owners and admins can manage billing. Owner/admin reads sync the latest Stripe customer and subscription state before returning the billing overview. If Stripe sync or customer lookup fails, the endpoint returns 502 with Stripe billing sync failed instead of serving stale local billing state.

Endpoints

MethodEndpointDescription
GET/api/orgs/{id}/billingGet plan, status, usage, limits, and subscription summary
POST/api/orgs/{id}/billing/checkoutStart a self-serve Stripe billing flow
POST/api/orgs/{id}/billing/portalCreate Stripe Billing Portal Session

Checkout

Use the checkout endpoint to select a self-serve plan. New subscribers receive a Stripe Checkout URL. Existing subscribers with an active, trialing, or past-due subscription receive a Stripe Billing Portal update-confirmation URL for the selected plan, so Atoll updates the current subscription instead of creating another one. Current self-serve prices:
PlanPriceBilling interval
Starter$19Monthly
Team$49Monthly
Pro$99Monthly
{
  "plan": "starter"
}
or:
{
  "plan": "team"
}
or:
{
  "plan": "pro"
}

Plan limit errors

Creation endpoints can return:
{
  "error": "Plan limit reached",
  "code": "PLAN_LIMIT_REACHED",
  "resource": "activeProjects",
  "plan": "free",
  "limit": 2,
  "usage": 2
}
Plan-limited resources include:
  • Humans
  • Agents/integrations
  • Active projects
  • Active issues
Current enforced limits:
PlanHumansAgents/integrationsActive projectsActive issues
Free221100
Starter333250
Team1010101,000
Pro2525255,000
EnterpriseUnlimitedUnlimitedUnlimitedUnlimited

Local development

The app uses Stripe environment variables for billing:
STRIPE_SECRET_KEY
STRIPE_WEBHOOK_SECRET
STRIPE_PRICE_STARTER_MONTHLY
STRIPE_PRICE_TEAM_MONTHLY
STRIPE_PRICE_PRO_MONTHLY
NEXT_PUBLIC_APP_URL