UTC --:--:--
Docs·Getting started·Plans & pricing

Plans & pricing

Four tiers, one engine. The numbers below are the source-of-truth contract: rate-limiter caps and Stripe metered overage rates derive from the same data.

Plan tiers

Each tier sets a monthly quota included in the canone + an overage rate per 1,000 calls past quota. Overage is billed via Stripe metered usage (one event per scored request).

TierMonthly feeQuota includedOverageDaily cap
FreeFree1,000 / monthHard cap50 / day
Starter€49 / mo50,000 / month€1.50 / 1k calls5,000 / day
Pro€249 / mo500,000 / month€0.80 / 1k calls50,000 / day
ScaleCustomUnlimitedContractedNone

Overage billing

Past the monthly quota, every scored request hits Stripe metered billing with a graduated tier (first N at €0, then the per-1k rate). Free is hard-capped: once the 1,000 calls included are spent, the API returns 429 RATE_LIMITED until the next month rolls over. No surprise bills on Free.

Want to forecast your monthly bill? Open the usage dashboard in your tenant portal; it surfaces your current spend vs the included quota in real time.

Recommend-spot meter

POST /v1/recommend-spot bills on a separate meter from scoring: one call fans out to multiple internal spot scores, so it's priced independently:

TierIncluded / monthOverageDaily cap
Free20 / day for testing · not billedHard cap (no overage)20 / day
Starter1,500 / month€7.50 per 1,000 over quota500 / day
Pro5,000 / month€4.00 per 1,000 over quota5,000 / day
ScaleUnlimitedContracted ceilingNone

Free has no Stripe overage SKU for recommend: the daily safety cap is the only ceiling, and it's never billed. Radius and topK caps per plan are documented on the recommend-spot reference.

Daily safety cap

Independent of the monthly quota, every tier has a per-day safety cap that catches runaway-loop bugs before they melt your bill. Hitting it returns 429 RATE_LIMITED until 00:00 UTC. The cap is set generously above what 1/30th of the monthly quota would imply: burst days are fine, infinite loops aren't.

LLM token budget (Anthropic BYOK)

The intelligence endpoints, /v1/decision's reasoning narrative, and /v1/score/explain-counterfactual's natural_language block are open on every plan, including Free: they run on your own Anthropic key, not a Goable-managed one. Set it via PUT /v1/tenant/llm-key from any plan; full walkthrough at Bring your own Anthropic key. Without a key, these surfaces degrade to a deterministic template (or, for the three standalone intelligence endpoints, return 503 INTELLIGENCE_UNAVAILABLE); they never gate on plan.

  • Every plan: a flat 500,000 tokens / month spend guard by default, once a key is set. Roughly 500–1,000 explain calls or 100–200 briefings, depending on slot count and locale. This isn't a plan perk; it's a runaway-loop guard on your own Anthropic bill, not Goable's.
  • Briefing slot cap still scales with plan (a genuine request-shape limit, unrelated to the key/budget): 12 slots on Free/Starter, 24 on Pro, 96 on Scale.

Budget resets the 1st of each month UTC. Past quota the API returns 429 LLM_BUDGET_EXCEEDED until the reset. The usage dashboard surfaces remaining tokens alongside the API call count.

Endpoint unlocks

Higher tiers unlock additional surface area. A 402 PAYMENT_REQUIRED or 403 PLAN_UPGRADE_REQUIRED response means the endpoint exists but your tenant's plan doesn't include it.

Some higher-tier surfaces are still maturing: climate projections and parametric underwriting are research-stage, and coverage for historical and recommend-spot varies by region. The list below describes plan gating, not a guarantee that every surface is generally available; each endpoint's own reference states its current status.

Free
  • POST /v1/score
  • POST /v1/score/series
  • POST /v1/score/multi
  • POST /v1/score/explain-counterfactual (analytical blocks always on; natural_language needs your own Anthropic key)
  • POST /v1/intelligence/explain + briefing + edge-case (needs your own Anthropic key)
  • POST /v1/decision (needs your own Anthropic key for the reasoning narrative; the score + personalization blend work regardless)
  • PUT/GET/DELETE /v1/tenant/llm-key (set/rotate/remove your Anthropic key)
  • POST /v1/recommend-spot (25km × top-5, no personalization)
  • POST /v1/score/:id/outcome + POST /v1/outcomes (needs the outcomes:write scope on a live key, no plan gate)
  • Station registry: POST/GET/PATCH /v1/observations/stations
Starter
  • Everything in Free
  • POST /v1/recommend-spot (50km × top-10, still no personalization)
Pro
  • Everything in Starter
  • POST /v1/score/historical (ERA5 reanalysis, up to 20 years)
  • POST /v1/score/portfolio (up to 10 spots)
  • POST /v1/observations (submit readings; station registry itself is free-tier)
  • POST /v1/recommend-spot (200km × top-20, personalization unlocked)
  • Probabilistic ensemble scoring (30 members)
  • Stormglass priority chain (consensus blending)
  • Premium multi-model consensus: a premium partner model as a 3rd skill-weighted forecast opinion (added where the premium partner model is available; otherwise the score transparently falls back to the base consensus)
Scale
  • Everything in Pro
  • POST /v1/score/portfolio up to 50 spots
  • POST /v1/score/historical unlimited years
  • POST /v1/projections (CMIP6 + CORDEX climate)
  • POST /v1/projections/portfolio + adaptation-report
  • POST /v1/recommend-spot (1000km × top-50)
  • POST /v1/underwriting/quote + policy/bind + policy/:id/evaluate (parametric; policy/:id/settle is platform_admin-only regardless of plan)
  • Probabilistic ensemble scoring (50 members)
  • Dedicated tenant catalog + private profiles

Upgrading

Upgrade from the tenant portal at console.goable.io/portal/billing. Stripe Checkout handles card collection; you're on the new plan within seconds of payment confirmation. Downgrades and card management flow through the Stripe Customer Portal, reachable from the same page.

Billing happens entirely through the tenant portal. There is no tenant-callable upgrade endpoint on the public API; plan changes are an operator decision, not programmatic. Same for the Customer Portal: you open it from the console, then Stripe takes over.