Docs: How it works
Get started

How it works

One key, one wallet, and the discover, inspect, run loop behind every call.

RouterGrowth is the OpenRouter for growth: one API that routes growth data calls (SEO, enrichment, company signals, social, ads) across curated providers. One key, one prepaid wallet, pay per call. No subscription, no seats.

The loop

Every integration, human or agent, runs the same three-step loop:

  1. Discover. POST /v1/discover with a plain-language job description ("find a verified email for a person") returns matching capabilities with status and starting price. Free, never executes a paid call.
  2. Inspect. POST /v1/inspect returns a capability's input schema, output fields, the providers behind it, the exact versioned price and the billing conditions (for example: unmatched lookups are not billed).
  3. Run. POST /v1/run executes it. The price you saw at inspect time is the price you pay; nothing bills without a reserved quote.

Accounts, keys and the wallet

  • An organization owns everything: keys, wallet, runs, connections.
  • API keys come in two environments: rg_test_ (sandbox) and rg_live_ (production). Keys are hashed at rest and the raw key is shown exactly once, at creation. Mint and revoke via /v1/api-keys or the dashboard.
  • The wallet holds prepaid USD credits, accounted in integer microdollars on an immutable ledger. Every reserve, settle, release, top-up and refund is a ledger entry you can read back via /v1/wallet/transactions.

Reserve, settle, release

A run never charges more than it quoted:

  1. Before the provider call, the maximum billable amount is reserved against your balance. Insufficient funds fail fast with insufficient_balance, before any provider is touched.
  2. On success the reservation settles to the actual charge (which can be lower, never higher).
  3. On failure, timeout or an unbilled no-match, the reservation is released in full.

routing.max_cost adds your own cap on top: any offer above it is excluded before the call.

Routing and waterfall failover

Set routing.provider to auto (default) and pick a strategy: cheapest, fastest, highest_success_rate or best_value (default). Or pin a specific provider by slug. Every response carries a routing_reason explaining the decision.

On auto routing, a provider error, timeout or unbilled no-match falls through to the next-best provider automatically, up to 3 attempts. Only the provider that delivers is charged, and every attempt is listed in the response's attempts array. Disable with routing.allow_fallback: false. A pinned provider never falls back.

Sandbox and production

The sandbox (rg_test_ keys) runs the full loop, quote, reserve, settle, with providers in mock mode returning clearly-labeled simulated data, so you can build the whole integration before spending a cent. Force outcomes for testing by including nomatch, fail or timeout in any input string.

In production, routing only considers providers with a live adapter: a paid call is never served simulated data, and capabilities without a live provider return provider_not_available until one is wired.

Bring your own key

Already under contract with a provider? Connect that provider's API key and calls to it route through your key instead of the platform's. BYOK calls are not metered by RouterGrowth.

Where to next

Reading this as an agent? This page as markdown: /docs/how-it-works.md · every page: /docs/llms.txt