Limits & Quotas
Information about rate limits and monthly usage quotas.
To ensure fair usage and service stability, the Index Alpha API enforces the following limits:
Data Coverage
- Data is available from 2025-01-01 for both the Regular Market (RG) and Negotiated Market (NG).
- Requests with a
fromdate before 2025-01-01 are rejected with a400error. - Date range: a single request may span at most 366 days (
fromtoto). - Batch size: at most 50 tickers per batch request.
- Older data may be available on the Enterprise plan; contact support at @neon_scale for access.
Rate Limit
Rate limits depend on your current plan:
- Free Plan: 10 requests per minute.
- Starter Plan: 120 requests per minute.
- Professional Plan: 300 requests per minute.
- Advanced Plan: 500 requests per minute.
- Enterprise Plan: Custom rate limits based on your agreement.
If you exceed these limits, the API returns a 429 Too Many Requests error. The response headers (X-RateLimit-*) provide real-time status of your remaining window.
Monthly Quota
Your account has a shared monthly limit across all API keys under it:
- Free Plan: 5 requests per day.
- Starter Plan: 25,000 requests per month.
- Professional Plan: 100,000 requests per month.
- Advanced Plan: 250,000 requests per month.
- Enterprise Plan: Custom usage limits based on your agreement.
Multi-month plans
Starter and Professional are also available as 3-month and 6-month subscriptions at ~17% off the monthly rate. The monthly quota resets every 30 days for the duration of the period:
| Plan | Period | Monthly quota (resets every 30 days) |
|---|---|---|
| Starter 3M | 90 days | 25,000 requests |
| Starter 6M | 180 days | 25,000 requests |
| Professional 3M | 90 days | 100,000 requests |
| Professional 6M | 180 days | 100,000 requests |
| Advanced 3M | 90 days | 250,000 requests |
| Advanced 6M | 180 days | 250,000 requests |
For example, a Starter 3M subscription receives 25,000 requests for days 1-30, another 25,000 for days 31-60, and another 25,000 for days 61-90. Unused quota does not roll over to the next window. Re-buying the plan at any time extends your active period; your monthly quota still resets on your 30-day cycle.
- Check Usage: Use the
/usageendpoint to see both key-level and account-level usage. - Reset: Quotas reset automatically at the start of each 30-day cycle.
How usage is counted
Your quota counter is incremented synchronously on each successful (HTTP 200) API call. Errors (400, 403, 500) are not counted.
| Endpoint | Quota cost per call |
|---|---|
GET /stocks/broker-summary | 1 unit per request |
POST /stocks/broker-summary/batch | 1 unit per ticker - a batch of 50 tickers costs 50 units |
GET /foreign-flow | 1 unit per request |
POST /foreign-flow/batch | 1 unit per ticker - a batch of 50 tickers costs 50 units |
GET /usage | 0 units - free |
GET /news | 1 unit per request |
Checking your usage with GET /usage is always free and never consumes quota.
For example, a single batch call with 50 tickers consumes 50 units from your monthly quota - the same as 50 individual single-ticker calls.
Repeated identical requests within a short window (30 seconds) may be served from cache. Cached responses still count against your quota - every successful request consumes quota exactly once, whether or not it was served from cache. Only requests rejected with an error are free.
The MCP endpoint uses a dedicated, auto-provisioned key for your account. It does not count toward your plan's key limit and is shown in the dashboard under "MCP Access".
The counter is incremented atomically in the database. If your account is at the limit, the request is rejected before any other work is done - no partial charges, no overages.
What happens when you hit your limit
Two different limits can block a request. Each returns a different error:
| Situation | HTTP status | Header to watch |
|---|---|---|
| Rate limit - too many requests per minute | 429 Too Many Requests | X-RateLimit-Remaining |
| Monthly quota - the cycle's request allowance is used up | 403 Forbidden | X-Monthly-Remaining |
Monthly quota exhausted
When your account reaches its monthly quota, subsequent API calls return:
{
"detail": "Account monthly API limit exceeded"
}with X-Monthly-Remaining: 0. The X-Monthly-Reset response header on every call shows the timestamp of your next quota reset.
You can track your remaining quota in real time via the X-Monthly-Remaining response header on every API call, or check the /usage endpoint.
Your options
Upgrade to a higher tier - Higher-tier plans come with larger quotas and faster rate limits. You can upgrade to any tier and any duration (1, 3, or 6 months) immediately: you pay the new plan's price minus the unused value of your current period, and your quota and period restart at the new duration. See the pricing page or contact sales for Enterprise options.
Wait for the next window - Your quota resets automatically at the start of each 30-day window. On a 3M/6M plan this happens before your period ends, so you can simply wait. On a monthly plan your period and your quota cycle end together, so renewing first is required to keep access. Check your reset date on the dashboard.
Custom offers - If an admin has assigned a custom offer to your account (with higher limits), it appears on the pricing page after you sign in.
Renewing your plan
Renewal is about keeping your account active, not refilling your quota. Paying for the same plan again extends your active period by its duration; your monthly quota still resets only on your 30-day cycle. If you have used up this cycle's quota, renewing will not grant more requests - upgrade instead, or wait for the next window.
For example, a Professional subscriber renews 10 days before their period ends:
Plan: Professional
Price paid: Rp350,000
Renewal on: day 20 of the current 30-day cycle
What changes: periodEnd extends by 30 days
Quota: unchanged - still 100,000, resets at the cycle boundaryRenewals cannot make your total active period exceed 180 days from now. If your current period already extends near 6 months, renewing will be rejected — please renew closer to expiry.
Plan Upgrades
Upgrading applies immediately to any tier and any duration (1, 3, or 6 months). You pay the new plan's full price minus the unused value of your current period - your remaining days are credited at your current plan's daily rate - and your quota and period restart at the new duration. Your current periodEnd is not preserved on an upgrade.
Upgrade Example
Starting package:
Plan: Starter 3M
Price paid: Rp500,000
Period: Jan 1 → Apr 1 (90 days)
Remaining days at upgrade: 45
Quota: 25,000 per 30-day cycleUpgrade event:
Upgrade to: Professional 3M
Price: Rp875,000 / 90 days
Daily rate Starter 3M: 500,000 / 90 = Rp5,556
Unused Starter value: 5,556 × 45 ≈ Rp250,000
Charge: 875,000 − 250,000 ≈ Rp625,000 (rounded down to the nearest Rp1,000)After upgrade:
Plan: Professional 3M
Rate limit: 300 req/min
Quota: 100,000 per 30-day cycle (fresh)
period: fresh 90 days from todayYour unused Starter value is credited toward the new plan's price; you pay the difference and start a fresh period at the new duration. Downgrades are not allowed during an active subscription period.
Custom Plans
Custom plans are private offers assigned to your account. If you receive a custom offer, it appears on the pricing page after you sign in.
If your custom offer is recurring, the next payment offer is created automatically after you pay. It appears on the pricing page immediately, so you can purchase it early to extend your validity period without waiting for the active custom period to end.
For example, a recurring 30-day custom offer works like this:
May 2: You pay Custom 100K for 30 days.
May 2 to June 1: Your Custom 100K subscription is active.
May 2: The next Custom 100K payment offer appears automatically.
May 10: You pay the next offer early.
June 1 to July 1: The early payment extends your Custom 100K validity for the next 30-day period.