Skip to main content
GET
Salaries
One call returns your board’s whole salary picture: an overall distribution plus breakdowns by category, job type, and location. Use it for salary widgets, market reports, or “what does this role pay” landing page copy, without pulling every job and computing the numbers yourself.
cURL

How the numbers are computed

  • Live jobs only. Active, unexpired jobs that publish salary_min or salary_max.
  • Everything is annualized. All figures are whole numbers per year: hourly x2080, daily x260, weekly x52, monthly x12, yearly as-is.
  • Suspicious periods are corrected. Imported jobs frequently arrive with every salary stamped yearly even when the value is an hourly wage. A period stamped yearly (or missing) is therefore inferred from the value’s magnitude: below 500 is treated as hourly, below 10,000 as monthly, everything else as yearly. Explicit hourly, daily, weekly, and monthly stamps are trusted as-is.
  • Implausible values are dropped. After annualizing, only figures between 10,000 and 10,000,000 count. Placeholder and corrupted values (a $1 salary, a phone number in a salary field) are excluded and counted in excluded_implausible.
  • One currency. Stats are computed in your board’s dominant currency. Jobs priced in another currency are excluded and counted in excluded_other_currency rather than silently mixed in.
  • Percentiles use midpoints. p25, median, and p75 are percentiles of each job’s annualized salary midpoint, (min + max) / 2.

Fields

string | null
Your board’s dominant salary currency. null when no live job publishes salary data (then overall is null too).
number
Live jobs on your board (active, unexpired).
number
Live jobs that publish salary data in the dominant currency. This is the sample behind overall.
number
Live salaried jobs left out because they are priced in another currency.
number
Live salaried jobs left out because their annualized pay fell outside the 10,000 to 10,000,000 plausibility window.
object
How the underlying jobs pay after period inference: counts keyed by effective period, e.g. { "yearly": 60, "hourly": 25 }.
object | null
Distribution across every salaried job: count, min, max, avg, p25, median, p75.
array
Per-category stats: id, name, and slug plus the same distribution fields. Up to 100 rows.
array
Per-job-type stats: value (e.g. full-time) plus the distribution fields. Up to 20 rows.
array
Per-location stats: value (the job’s location text, e.g. Austin, TX) plus the distribution fields. Up to 15 rows.
A group appears in a breakdown only when it has at least 3 salaried jobs, so thin samples never produce misleading numbers. Rows are ordered by count descending.
On failure the endpoint returns a 500 with { "error": { "message": "...", "code": "db_error" } }.