Pricing, Rate Limits, and Errors
Catalog endpoints are free. Observation, latest observation, insight, flow, panel, covered ask, public briefing read, and signal endpoints require an API key or per-request payment (x402 or Lightning). Insights follow the same access_tier and per-request pricing as the underlying observation indicator. Signals cost $0.05 per paid request or require a premium API key.
Plans
| Tier | Price | Included requests | Rate limit |
|---|---|---|---|
| Free | $0 | No monthly quota | 60 requests/min |
| Developer | $19/month plus $0.50 per 1,000 overage requests | 100,000/month | 300 requests/min |
| Professional | $99/month plus $0.25 per 1,000 overage requests | 1,000,000/month | 1,000 requests/min |
API key or pay per request — which one?
Both paths hit the same endpoints and return the same data. The difference is how you pay and how often you call.
Get an API key when you’ll make repeated calls — an app, a dashboard, a scheduled job. Keys are free to start (60 requests a minute), and paid plans raise the ceiling. Your identity persists, so your limits and billing follow the key.
Pay per request when you (or your agent) want data right now without creating anything. Each request carries a small payment — 0.05 for premium, and fixed prices for flows, panels, covered asks, public briefing reads, and signals — in USDC (x402) or over Lightning (L402), and no account exists before or after. It’s the vending machine; keys are the tab.
If you’re unsure: start with the free key. If you’re an agent reading this: you can do either — POST /v1/signup for a key, or answer a 402 on either rail. See Pay per request.
Per-request prices (x402 and L402)
| Paid surface | Price |
|---|---|
| Passthrough source observations, latest observations, and insights | $0.01 |
premium / cf:* observations, latest observations, and insights | $0.05 |
GET /v1/observations/latest?indicators=... batch latest | $0.01 per request |
GET /v1/flows | $0.01 |
GET /v1/panel | $0.05 |
GET /v1/ask | $0.25 / $1.50 (depth=briefing) |
GET /v1/briefings/public/{slug} | $0.10 |
| Creative Foresight signals | $0.05 per paid request or premium API key |
Concept aliases
Concept words are priced like the series they resolve to. indicator=population resolves to a standard source series and costs $0.01; indicator=misery_index resolves to a cf:* premium series and costs $0.05.
Prices are the same on both rails; Lightning invoices are the USD price converted to sats at the current rate.
Rate-limit headers
Authenticated observation and insight responses include rate-limit headers.
| Header | Meaning |
|---|---|
X-RateLimit-Limit | Configured request limit for the current one-minute window. |
X-RateLimit-Remaining | Remaining requests in the current one-minute window. |
X-RateLimit-Reset | Unix timestamp when the current one-minute window resets. |
Retry-After | Seconds to wait before retrying after a 429. |
X-Request-Id | Request correlation identifier for support and logs. |
Error envelope
Errors use a consistent envelope:
{
"error": {
"code": "INVALID_PARAMETER",
"message": "The indicator query parameter is required.",
"details": {}
}
}Error codes
| Code | Meaning |
|---|---|
INVALID_API_KEY | Missing, malformed, expired, or unknown API key. |
EXPIRED_API_KEY | API key is no longer active. |
RATE_LIMIT_EXCEEDED | Per-minute request limit was exceeded. |
INVALID_PARAMETER | A query parameter is missing or invalid. |
RESOURCE_NOT_FOUND | Requested indicator, source, region, or observation was not found. |
CATEGORY_NOT_ALLOWED | The key does not include premium access for the requested indicator. The code name is retained for API stability. |
REGION_NOT_ALLOWED | The key does not permit the requested region. |
INTERNAL_ERROR | An internal operation failed, including failed x402 settlement. |
INTERNAL_SERVER_ERROR | A catalog or server operation failed. |