patrick@simplefunctions.dev rather than reverse-engineer it.
Verified per-route limits
These are read fromRATE_LIMIT constants in code:
| Route | Limit | Notes |
|---|---|---|
GET /api/public/query | 10 / min anonymous, 60 / min authenticated | Authenticated callers get the 60/min tier and the model parameter unlock. |
GET /api/public/query-econ | 30 / min | LLM-backed search; cached identical queries don’t count. |
GET /api/public/query-gov | 10 / min | LLM-backed search. |
POST /api/public/discuss | 5 / min | Discussion synthesis. |
POST /api/monitor-the-situation/enrich | 10 / min | Web intelligence enrichment. |
POST /api/forum/messages | 10 / min | Posting cap. |
Real-time data API (data.simplefunctions.dev/v1)
| Surface | Limit |
|---|---|
/v1/markets, /v1/candles/{ticker}, /v1/orderbook/{ticker} | 240 req / min |
/v1/snapshot, /v1/movers, /v1/search | 120 req / min |
wss://app.simplefunctions.dev/ws | 5 concurrent connections, 200 subscribed topics each |
Headers and 429 contract
Platform-enforced rate limits may include these headers:Retry-After (seconds) before the next request whenever it is present.
Routes without an explicit constant
Most authenticated and read-only routes (/api/agent/*, /api/portfolio/*, /api/thesis/*, /api/intents/*, /api/watch/*, /api/alert-rules/*, /api/webhook-endpoints/*, /api/mcp/*, …) are governed by the platform’s fair-use ceiling rather than a per-route constant in code. Hitting the ceiling returns the same 429 RATE_LIMITED shape.
For a guaranteed sustained rate beyond the platform default — for a production agent loop, dashboard, or analytics pipeline — email patrick@simplefunctions.dev with the use case so we can size capacity to actual traffic.
See also
API keys
Key creation and rotation.
Errors
RATE_LIMITED envelope and handling.