Rate limits
SigIndex bills by API call. Each request to a billable data endpoint counts once against your monthly cap. The cap resets at the start of each calendar month (UTC). Cap reached mid-month → return 429 RATE_LIMIT_EXCEEDED with a Retry-After header (seconds until the next reset).
Per-tier limits
| Tier | Monthly calls | Batch size | Notes |
|---|---|---|---|
| Free | 10 | — | Post-trial default. Score breakdown redacted. /area and /portfolio disabled. |
| Starter | 1,000 | 10 | 14-day Starter trial defaults here; downgrades to Free after expiry without a paid subscription. |
| Platform | 10,000 | 60 | PDF report export enabled. |
| Consulting | 50,000 | 500 | Full surface, generous batch cap. |
| Enterprise | Negotiated | 500+ | Custom limits, separate contract. Contact sales. |
Compare full pricing on /pricing.
429 response shape
Same envelope as every other error. The Retry-After header is the canonical signal — read it first, sleep, retry.
HTTP/1.1 429 Too Many Requests
Content-Type: application/json
Retry-After: 84203
{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Monthly call limit (10000) reached. Resets 2026-06-01T00:00:00Z.",
"status": 429
},
"meta": {
"request_id": "req_pT4xZ9wKvQnM",
"timestamp": "2026-05-20T14:22:08Z"
}
}Special cases
- Demo endpoint: Public
/api/v1/demo/facilityis limited to 5 requests per IP per hour. Same 429 shape,Retry-Afterin seconds. Demo response is redacted to the top-level score + active enforcement flag. - Geocode endpoint:
/api/v1/geocodeis billing-exempt — calls do not count against your monthly cap. Authenticated with Supabase JWT, intended for in-product use by the dashboard’s Search bar. - API key regeneration: Throttled to one regenerate per minute per user. Within the window, returns
429 REGENERATE_THROTTLEDwithRetry-Afterset to seconds remaining (0 < N ≤ 60). Not the same counter as the monthly billing cap. - Health endpoint:
/api/v1/healthhas no rate limit. Liveness probes are free.
Best practices
- Honor
Retry-After: Don’t poll — sleep for the indicated seconds and retry once. Exponential backoff is wasted effort when the server gave you the exact recovery window. - Use /portfolio for bulk work: One batch of 60 facilities consumes one call against your monthly cap. Per-facility loops cost 60×.
- Cache facility-detail responses locally for surfaces that render the same facility repeatedly. Compliance scores update at most once a week.