HoodGrow reads Robinhood Chain (chain id 4663) stock-token contracts directly: live price, ERC-8056 corporate-action adjusted supply (so numbers stay correct through stock splits, not just raw token balances), and both pending (on-chain) and historical (official Robinhood ledger) corporate actions. A companion Base-mainnet (chain id 8453) surface covers the pre-launch B20 stock-token registry and a $BNKR price quote used by HoodGrow's own payment flows.
Authentication
Every priced endpoint accepts any of three ways in, decided per request — there is no mode you "pick" in advance, and they're tried in this order:
-
Authorization: Bearer <token>— a free self-serve key (40 requests/day, no payment, see/builders) or a paid Builder key (300 requests/minute, no daily cap, plus webhooks). When present and valid, the full response is served for free. -
Prepaid credits — three
X-HoodGrow-Credit-*headers spending down a balance bought once via x402 (see "Prepaid credits" below). Cheaper per call once you're past the initial bundle purchase, since it's an off-chain signature check, not a fresh on-chain settlement every time. -
x402 — send none of the above and the endpoint responds
402 Payment Requiredwith a machine-readable challenge (see below); pay it and resubmit with aPAYMENT-SIGNATUREheader to get the real response. No signup, no API key, one on-chain settlement per call.
If none of the three apply (and, for a couple of endpoints, if x402 isn't configured on this
deployment at all), you get a bare 401.
/api/mcp is the one exception: it requires a bearer token (free or paid key) on every call —
neither prepaid credits nor x402 apply to MCP tool calls.
The x402 challenge (402 Payment Required)
The response body for a 402 is {} — the real payload rides in a response header,
PAYMENT-REQUIRED, base64-encoded JSON shaped like:
{
"x402Version": 2,
"error": "Payment required",
"resource": { "url": "...", "description": "...", "mimeType": "application/json" },
"accepts": [{
"scheme": "exact",
"network": "eip155:8453",
"amount": "100000",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"payTo": "<treasury address>",
"maxTimeoutSeconds": 300,
"extra": { "name": "USD Coin", "version": "2" }
}]
}
amount is atomic USDC (6 decimals) as a string. network is Base mainnet
(eip155:8453) in production; a deployment without live payment facilitator credentials falls
back to Base Sepolia (eip155:84532) for testing. Resubmit the original request with a
PAYMENT-SIGNATURE: <base64 payment payload> header; on success you get your normal response
plus a PAYMENT-RESPONSE header (the settlement receipt). See the
x402 spec or the hoodgrow-ts/hoodgrow-py/hoodgrow-mcp SDKs, which
handle this loop for you.
Prepaid credits
Buy a bundle once via x402 (POST /api/agent/credits/purchase?bundle=<id> — 10/50/200 USD
bundles, each with a bonus: $10 → $11 credit, $50 → $60, $200 → $260), then spend it down over
many calls afterward without a fresh on-chain settlement each time. Every priced GET endpoint
accepts it via three request headers sent together:
X-HoodGrow-Credit-Wallet: the wallet spending its balanceX-HoodGrow-Credit-Timestamp: unix seconds, must be within 60s of the server's clock-
X-HoodGrow-Credit-Signature: an EIP-191personal_signsignature over`HoodGrow credit spend\nmethod: <METHOD>\npath: <pathname>\ntimestamp: <timestamp>`, binding the signature to exactly this method+path+timestamp so it can never be replayed against a different (differently priced) endpoint or reused after the freshness window.
Debits the same price as that endpoint's own x402 price — a credit spend and an x402 payment
for the same call always cost exactly the same. An empty/insufficient balance gets 402 with
{ "error": "insufficient credit balance", "balanceUsd": ..., "requiredUsd": ..., "topUp": "POST /api/agent/credits/purchase" }. Check your balance for free (no charge) via GET /api/agent/credits/balance using the same three headers.
Credit-funded webhooks are also possible without a Builder subscription:
POST /api/agent/credits/webhook registers a delivery URL for free — nothing is charged for
having a webhook registered. Each event that actually fires is billed $0.15 at delivery time
(deliberately priced above every per-call GET, since a push does more for you than any single
poll); automatic delivery retries never re-charge, and if the balance can't cover an event at
send time, that one delivery is simply skipped (no charge, no retry queued).
Rate limits
Every endpoint enforces a flat per-IP limit (shown per operation below) on top of whatever your
key's own limit is. A 429 includes Retry-After, X-RateLimit-Limit, and
X-RateLimit-Remaining headers. A free key that has used its 40 requests for the UTC day gets a
dedicated 429 explaining exactly that, with Retry-After set to seconds until UTC midnight.
Errors
Every non-x402 JSON error response across this API is the same one-field shape:
{ "error": "<human-readable message>" } — there is no code or nested error object anywhere.
More
- Full docs and pricing: https://www.hoodgrow.com/api-access
- Free/paid key signup: https://www.hoodgrow.com/builders
-
SDKs:
hoodgrow-ts(npm),hoodgrow-py(PyPI),hoodgrow-mcp(npm, also usable directly by any MCP-speaking agent via/api/mcp)