Headers
Responses to authenticated requests, including a per-minute429, report the key’s current per-minute window:
A few roster sync responses carry no
X-RateLimit-* headers: 411 and 413, and a 409 or 429 refusal of a sync body larger than 100 KB, which is refused before the key’s window is read. On a 429 for the hourly sync budget, the headers still describe the per-minute window; Retry-After is the value to follow.
When you exceed the limit
The API returns429 Too Many Requests with a Retry-After header in seconds:
Retry-After seconds before the next request. Do not retry in a tight loop: requests made while limited do not succeed.
Roster sync limits
PUT /v1/employees/sync writes thousands of rows, so it has two extra limits on top of the per-minute one:
A
409 means another sync of your company is still running, or the platform is briefly busy with other syncs. It is not counted against your hourly budget. Retry after the delay.
Staying within the limit
Cache on your server
Cache on your server
Leaderboards are cached by TeamBuilder for up to 30 seconds, and stats and catalogue data change slowly. Serve your pages from your own cache and refresh it on a timer, instead of calling the API on every page view. See Leaderboards: refresh cadence.
Use the biggest page
Use the biggest page
Walk lists with
limit=100. A full walk then costs one request per 100 items.Prefer one grouped call
Prefer one grouped call
For an overview of all departments, one
GET /v1/leaderboard/by-department call replaces a filtered leaderboard call per department.Watch the headers
Watch the headers
Slow down when
X-RateLimit-Remaining runs low, rather than waiting for a 429.Higher limits
If your integration genuinely needs more, for example a large company’s nightly export, email contact@teambuilder.ge with the key’s purpose and expected volume. Limits can be raised per key.A separate per-IP ceiling protects the API before authentication. It is far above what any single key can use, so a well-behaved integration never meets it; if many keys share one egress IP and do hit it, the response is the same
429 with Retry-After.