portfolIQ
Documentation

Rate limits & errors

Quota per tier and error format.

Rate limits & errors

Quotas by tier

Quotas are enforced per hour (not per month). The window resets at the top of each hour UTC.

TierRequests per hourDaily approximate
Free14~336/day
Starter278~6,672/day
Growth1,389~33,336/day
EnterpriseCustom SLACustom SLA

Rate limit headers

Every /v1/* response includes:

HeaderDescription
X-RateLimit-LimitHourly quota for your tier
X-RateLimit-RemainingRequests remaining in the current hour window
X-RateLimit-ResetUNIX timestamp of the end of the current hour window

Error format

All errors return structured JSON:

{
  "error": "rate_limit_exceeded",
  "message": "You have exceeded your hourly quota of 14 requests.",
  "retry_after": 1748736000,
  "upgrade_url": "https://portfoliq.io/pricing"
}

401 — Unauthorized

{
  "error": "unauthorized",
  "message": "API key required"
}

403 — Forbidden (scope gate)

{
  "error": "forbidden",
  "message": "This endpoint requires the 'fundamentals:read' scope.",
  "required_scope": "fundamentals:read",
  "upgrade_url": "https://portfoliq.io/pricing"
}

HTTP status codes

CodeMeaning
200 OKSuccess
401 UnauthorizedMissing or invalid API key
403 ForbiddenValid key, insufficient tier scope
404 Not FoundAsset or resource does not exist
429 Too Many RequestsHourly rate limit exceeded
500 Internal Server ErrorAPI error — contact support
503 Service UnavailablePlanned maintenance or upstream outage

Not financial advice. Not a fatwa. Methodology disclosed.