Rate limits
A per-key sliding window. Watch the response headers.
Pivotal applies a sliding-window rate limit per API key. The default is 60 requests per minute per live key. Test keys get 30/min. Workspaces on a paid plan get 600/min per key — open a ticket if you need more.
There is no global per-workspace cap on top of the per-key limit; create more keys (one per service is the usual pattern) if a single key is the bottleneck.
Response headers
Every API response — whether it succeeded, errored, or got throttled — carries the current bucket state:
Example:
429 responses
When the bucket is empty, Pivotal returns 429 Too Many Requests with the standard error envelope:
Retry-After tells you exactly how long to wait. Don’t parse the message — use the header.
Handling 429 in client code
Exponential backoff with jitter is the right shape. Pseudocode:
Two refinements worth adding:
- Honor
X-RateLimit-Remaining— if it’s at 1 or 2, slow yourself down before you hit zero. - Cap the retry depth — five tries is enough; beyond that something else is wrong and the call should bubble up.
Bulk operations
The API does not yet expose bulk endpoints. If you’re moving thousands of records, see Bulk operations for the recommended concurrency settings — running 4–8 in-flight requests against a 60/min bucket plus respecting X-RateLimit-Remaining is usually enough.
What does NOT count
- 401 from a missing or revoked key — rejected before the rate limiter sees it.
- The token-refresh dance for any SDK — there is no token refresh; Bearer is the whole story.
What DOES count
- Successful 2xx responses.
- 4xx responses (validation, not found, conflict) — they still spent a request slot.
- 5xx responses — same. The rate limiter doesn’t know the request “shouldn’t” have failed.
This means a buggy client looping on a 404 will burn its quota fast. Add a circuit breaker around any code that fails twice in a row against the same resource.