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 from date before 2025-01-01 are rejected with a 400 error.
  • Date range: a single request may span at most 366 days (from to to).
  • 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:

PlanPeriodMonthly quota (resets every 30 days)
Starter 3M90 days25,000 requests
Starter 6M180 days25,000 requests
Professional 3M90 days100,000 requests
Professional 6M180 days100,000 requests
Advanced 3M90 days250,000 requests
Advanced 6M180 days250,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 /usage endpoint 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.

EndpointQuota cost per call
GET /stocks/broker-summary1 unit per request
POST /stocks/broker-summary/batch1 unit per ticker - a batch of 50 tickers costs 50 units
GET /foreign-flow1 unit per request
POST /foreign-flow/batch1 unit per ticker - a batch of 50 tickers costs 50 units
GET /usage0 units - free
GET /news1 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:

SituationHTTP statusHeader to watch
Rate limit - too many requests per minute429 Too Many RequestsX-RateLimit-Remaining
Monthly quota - the cycle's request allowance is used up403 ForbiddenX-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 boundary

Renewals 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 cycle

Upgrade 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 today

Your 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.

On this page