Skip to Content
Errors and rate limits

Errors and rate limits

Errors

Every error returns a JSON body with the same fields:

{ "message": "Rate limit exceeded for this API key", "error": "...", "timestamp": "2026-10-23T10:15:00.000Z", "statusCode": 429 }

error is a short name for the error type. Use statusCode to decide what to do, and message to log what happened.

StatusWhenmessage
400A query parameter is invalid, for example an unknown period, a currency that is not a 3-letter code, or fromYear later than toYearThe message names the parameter
401The x-api-key header is missing or does not match a keyInvalid or missing API key
401The key has been disabledAPI key is disabled
401The key has passed its expiry dateAPI key has expired
404No company matches the country and tickerCompany not found
429The key has sent more requests than its limit in the current minuteRate limit exceeded for this API key

A 401 means the key needs attention. Check the key with the Vitati360 team. Retrying the same request will not succeed.

Rate limits

Each API key has a limit on the number of requests it can send per minute. The default is 60. The team sets a different limit when the key is issued.

  • The limit counts requests per key, per minute.
  • A request over the limit returns 429. Wait until the next minute, then retry.
  • A request with a missing, disabled, or expired key returns 401 and does not count toward the limit.
  • A request for an unknown company returns 404 and does count toward the limit.

If you need a higher limit, ask the Vitati360 team.

Caching

Responses are marked cacheable for 5 minutes, with stale responses allowed for up to a day while they refresh:

Cache-Control: public, max-age=300, stale-while-revalidate=86400

Browsers and shared caches can reuse a response for 5 minutes. Use this when you build your own cache on top of the API.

Compression

Responses are stored compressed. Send Accept-Encoding: gzip and the response arrives compressed. Requests without that header receive plain JSON. Both return the same data.

curl --compressed -H "x-api-key: YOUR_API_KEY" \ "https://api.vitati360.com/proxy/external/v1/company/qa/qnbk/financials"