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

TierMonthly callsBatch sizeNotes
Free10Post-trial default. Score breakdown redacted. /area and /portfolio disabled.
Starter1,0001014-day Starter trial defaults here; downgrades to Free after expiry without a paid subscription.
Platform10,00060PDF report export enabled.
Consulting50,000500Full surface, generous batch cap.
EnterpriseNegotiated500+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/facility is limited to 5 requests per IP per hour. Same 429 shape, Retry-After in seconds. Demo response is redacted to the top-level score + active enforcement flag.
  • Geocode endpoint: /api/v1/geocode is 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_THROTTLED with Retry-After set to seconds remaining (0 < N ≤ 60). Not the same counter as the monthly billing cap.
  • Health endpoint: /api/v1/health has 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.