Get started/Plans & Rate Limits

    Get started

    Plans & Rate Limits

    API access comes in three plans: Starter, Power User and Business. They differ in two ways: how many requests you can make, and which datasets you can read. They do not differ in what a scan can do. Every plan runs the full scanner on every timeframe, universe and filter category, with no delay and no cap on results.

    Prices are on API pricing.

    Request limits

    PlanPer minutePer hourPer day
    Starter305005,000
    Power User602,00020,000
    Business1205,00050,000

    How requests are counted:

    • Per account, per endpoint. Each endpoint has its own counters, shared by all of your tokens. Running 30 scans in a minute on Starter doesn't use up the minute's budget for /api/v2/stocks/search-securities, and a second token doesn't add capacity.
    • All three windows apply at once. A request must fit under the minute, hour and day limits.
    • MCP tools count separately. Each MCP tool has its own counters at the same limits, independent of the REST endpoints.
    • Windows are fixed. A window opens with your first request to an endpoint and resets a full minute, hour or day later, however many requests you make in between. A request refused with 429 doesn't move the reset, so retrying doesn't lock you out for longer, but it can't succeed before the reset either. The 429 carries a Retry-After header with the seconds to wait, and its message gives the reset time.

    Live usage per token is under Account → API Usage.

    Rate-limit headers

    Every response to an API-token request carries these headers:

    HeaderMeaning
    RateLimit-LimitThe request limit of the window closest to running out.
    RateLimit-RemainingRequests left in that window after this one.
    RateLimit-ResetSeconds until that window resets. It's a number of seconds, not a timestamp.
    RateLimit-PolicyEvery window that applies to the endpoint, as limit;w=seconds, for example 30;w=60, 500;w=3600, 5000;w=86400.
    Retry-AfterOnly on a 429: seconds to wait before retrying.

    "Closest to running out" means the window with the fewest requests left. On a 429 it's the window that refused the request.

    http
    HTTP/1.1 200 OKRateLimit-Limit: 30RateLimit-Remaining: 27RateLimit-Reset: 41RateLimit-Policy: 30;w=60, 500;w=3600, 5000;w=86400

    When RateLimit-Remaining reaches 0, the next request to that endpoint gets a 429 until RateLimit-Reset seconds have passed. The AI credit budget below is separate: its 429 is a JSON body with a resetAt time, and it has no Retry-After header.

    Staying inside the limits

    • Scan once, then enrich. One scan returns every match. Enrich the matches with a single batched call (most data endpoints take a tickers list) instead of one call per ticker.
    • Cache reference data. The scan catalog, sectors, industries, themes and countries change rarely. Fetch them once a day.
    • Throttle loops. On Starter, one request every 2 seconds to any one endpoint stays under the per-minute limit.
    • Don't re-run to poll. An identical scan within two minutes may be answered from cache ("cached": true, window set by cache_ttl_seconds), and it still counts as a request. To follow a scan through the day, save it and read its alerts instead.

    AI credits

    Natural-language scanning (POST /api/v2/scan/natural, POST /api/v2/scan/refine, and the natural_scan and refine_payload MCP tools) runs a language model, so it also draws on a daily AI credit budget:

    PlanAI credits per day
    Starter45,000
    Power User180,000
    Business900,000
    • Credits are weighted by the model work a request needs, so a long or complicated description costs more than a short one.
    • The budget is shared by the REST endpoints and the MCP tools, and is separate from the AI allowance you use in the scanr.ai app.
    • It resets at 00:00 UTC.
    • A request that starts under budget completes even if it crosses it. The next one gets a 429 with "code": "api_ai_quota_exceeded" and the reset time (see Errors).

    Running a scan (POST /api/v2/scan) uses no AI credits, including a scan of a payload the AI generated. Generate a payload once and run it as often as you like.

    Endpoints by plan

    Each endpoint requires a minimum plan. A token below it gets 403 with the plan it needs.

    AreaEndpointsPlan
    ScanningPOST /scan, /scan/natural, /scan/refine, GET /scan/instructions, /scan/universe-themes, /scan/universe-countries, /scan/metrics-popularityStarter
    Saved scansPOST /scan/save-filters, /scan/rename-saved-filter, /scan/myscans, /scan/myscans/scans-for-ticker, /scan/paginated-scan-events, GET /scan/myscans/scan-historyStarter
    ReferenceGET /misc/market-status, /stocks/search-securities, /stocks/sectors, /stocks/industries, /stocks/ticker-types, /stocks/hot-tickersStarter
    SignalsPOST /stocks/relative-strength, /stocks/get-stock-indicators, /stocks/get-chart-patterns, GET /stocks/peersPower User
    Concept researchGET /stocks/concept-research/relate, /stocks/concept-research/findPower User
    ETFsGET /stocks/etf/{ticker}/holdings, /stocks/etf/{ticker}/holdings/breakdownPower User
    Technical indicatorsPOST /technicals/technical/*, including /technicals/technical/bulkPower User
    Scan performance/scan/myscans/*-performance*, /scan/myscans/*top-n*, /scan/myscans/ticker-trade-outcomesPower User
    Zones & themesPOST /stocks/get-supply-demand-zones, GET /stocks/themes, /stocks/themes/performance/*Business

    Paths are relative to https://scanr.ai/api/v2.

    Regime indicators are Business-only

    The relative-strength and stock-indicator endpoints also return regime fields (trend_efficiency, regime_extension, regime_divergence, regime_divergence_pct, group_strength, market_strength, market_efficiency). On a Business token they hold real values. On Power User they are null and named in the response's withheld_fields.

    Scan limits

    These hold on every plan:

    LimitValue
    Filter rows per payload200
    Request body1 MiB
    Results per scanUnlimited: every match is returned
    Timeframes, universes, filter categoriesAll