Plans and limits | Salary Data API
Plans and limitsWhat each plan reads, its calls a second and its allowance, and the headers that count them.
Each plan has an allowance of calls (a day for the free key, a month for the others) and a number of calls a second. Over the allowance, calls are refused with quota_exceeded: nothing is ever billed beyond the plan.
| Plan | Calls | Per second | Periods | Adds |
|---|---|---|---|---|
| Free key | 50 a day | 1 | the latest | |
| Starter | 10,000 a month | 5 | the latest 3 years | breakdowns |
| Pro | 100,000 a month | 10 | full history | breakdowns, US dollars |
| Analyst | 500,000 a month | 20 | full history | breakdowns, US dollars, one role across countries, pay gaps, MCP |
The headers on every answer
| X-RateLimit-Limit | Calls a second on this plan |
| X-RateLimit-Remaining | Calls left in this second |
| X-RateLimit-Reset | When this second ends (Unix seconds) |
| X-Quota-Limit | The day's or month's allowance |
| X-Quota-Remaining | Calls left in it |
| X-Quota-Reset | When it starts again (Unix seconds) |
| Retry-After | On a 429: seconds to wait |
What a smaller plan sees
An endpoint above the plan answers upgrade_required, naming the plan that has it. Asking a plan for something it does not include (a breakdown on the free key, periods before its first year) does the same. A field the plan does not include, such as value_usd below Pro, comes back as null with a note in meta, so code written on one plan keeps working on the next.
GET /v1/usage shows your plan, your calls today and this month, and when the allowance starts again. It never counts. Every plan in full on pricing.