{"openapi":"3.1.0","info":{"title":"alder public read API","version":"1.1.0","summary":"Open tech jobs, company hiring trends, posted salaries and market signals as JSON.","description":"Read-only job intelligence for people and AI assistants: open tech roles, company hiring pulse (daily series), posted pay percentiles, US H-1B/PERM filings and UK/NL sponsor registers. No personal data. Free tier without a key: 100 requests a day per IP, cached 5 to 15 minutes. With an API key (Authorization: Bearer alk_..., created in your profile) the key's own daily quota applies. List endpoints use opaque cursors (next_cursor). Every response carries ETag (send If-None-Match for a 304), citation URLs to alder pages, and attribution terms: cite the page and the date read. The same data is available to assistants over MCP at https://alderhq.app/mcp.","termsOfService":"https://alderhq.app/terms"},"servers":[{"url":"https://alderhq.app/api/v1"}],"externalDocs":{"url":"https://alderhq.app/developers","description":"Developer docs, MCP setup and limits"},"paths":{"/jobs":{"get":{"operationId":"searchJobs","summary":"Search open roles","tags":["jobs"],"parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":120},"description":"Free text over title and skills"},{"name":"role","in":"query","required":false,"schema":{"type":"string"},"description":"Role slug (software-engineer, backend-engineer, frontend-developer, full-stack-developer, mobile-developer, data-engineer, machine-learning-engineer, devops-engineer, security-engineer, qa-engineer, engineering-manager, product-manager, product-designer, data-scientist) or role family key (frontend, backend, fullstack, mobile, ml, data, devops, security, qa, em, software, product, design, analytics)"},{"name":"country","in":"query","required":false,"schema":{"type":"string","pattern":"^[A-Za-z]{2}$"},"description":"ISO 3166 alpha-2 code of where the person is based: only roles they can get from there"},{"name":"remote","in":"query","required":false,"schema":{"type":"boolean"},"description":"Remote roles only"},{"name":"company","in":"query","required":false,"schema":{"type":"string"},"description":"Company id, name or domain"},{"name":"seniority","in":"query","required":false,"schema":{"type":"string","enum":["intern","junior","mid","senior","staff","principal","manager","director"]}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":25},"description":"Page size, default 10"},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"next_cursor of the previous page. Opaque."}],"responses":{"200":{"description":"A page of roles, newest first","headers":{"ETag":{"schema":{"type":"string"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobList"}}}},"304":{"description":"Not modified (If-None-Match matched the ETag)"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/jobs/{id}":{"get":{"operationId":"getJob","summary":"One job","tags":["jobs"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"alder job id or /jobs/ URL"}],"responses":{"200":{"description":"The job with pay and sponsorship intel","headers":{"ETag":{"schema":{"type":"string"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"304":{"description":"Not modified (If-None-Match matched the ETag)"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/companies/{id}":{"get":{"operationId":"getCompany","summary":"Company profile and hiring pulse","tags":["companies"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Company id, name or domain"}],"responses":{"200":{"description":"Open roles, 30/90-day openings and closings, signals","headers":{"ETag":{"schema":{"type":"string"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"304":{"description":"Not modified (If-None-Match matched the ETag)"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/companies/{id}/pay":{"get":{"operationId":"getCompanyPay","summary":"Company pay","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Company id"}],"responses":{"200":{"description":"Posted-pay bands and H-1B offered wages","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/companies/{id}/visa":{"get":{"operationId":"getCompanyVisa","summary":"Company visa sponsorship","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Company id"}],"responses":{"200":{"description":"Sponsor register entries and H-1B/PERM filing counts","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/events":{"get":{"operationId":"listEvents","summary":"Event feed (API key)","security":[{"apiKey":[]}],"description":"Typed job and company events, newest first, each with evidence, window, previous and new values, confidence, method_version and basis. Daily quota per key; see /developers.","parameters":[{"name":"company","in":"query","required":false,"schema":{"type":"string"},"description":"Company id(s), comma separated, up to 20"},{"name":"type","in":"query","required":false,"schema":{"type":"string"},"description":"Event type(s), comma separated, or job / company: job.opened, job.updated, job.closed, job.reposted, job.reopened, job.salary_added, job.salary_changed, company.hiring_spike, company.hiring_contraction, company.new_department, company.geographic_expansion, company.compensation_shift"},{"name":"since","in":"query","required":false,"schema":{"type":"string"},"description":"ISO date or time, or epoch ms. Default: the last 7 days"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"next_cursor of the previous page"}],"responses":{"200":{"description":"A page of events and next_cursor"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/market/{name}":{"get":{"operationId":"marketInsight","summary":"Market insight","description":"open_by_family: Open roles per role family, all locations. open_by_country: Countries with the most open roles tied to them. remote_share: Share of live roles that are remote, optionally for one role family and level. market_heatmap: Live roles by role family and level. fresh_counts: Roles first seen today, in 24 hours and in 7 days, and roles taken down in 7 days. top_hiring: Companies with the most new postings in the last 30 days. pay_band: Posted-pay band (p25, median, p75) for a role family, optionally a level and a country or metro. skill_demand: Skills listed most often by live roles, optionally for one role family and level. country_count: Open roles a person based in a country can get (tied to it, or remote and open to it). arrival_by_hour: Median roles first seen per hour of the day (IST). insight: A precomputed market insight by key (remote_reach, posting_week, role_age, junior_gap, concentration, pay_transparency, pay_bands, skill_pay, skill_stacks, hiring_momentum, market_size)","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","enum":["open_by_family","open_by_country","remote_share","market_heatmap","fresh_counts","top_hiring","pay_band","skill_demand","country_count","arrival_by_hour","insight"]}},{"name":"key","in":"query","required":false,"schema":{"type":"string","enum":["market_size","remote_reach","remote_reach:tech","posting_week","role_age:tech","junior_gap:tech","concentration:tech","pay_transparency","pay_bands","skill_pay","skill_stacks:tech","hiring_momentum"]},"description":"insight only: the bundle key"},{"name":"role_family","in":"query","required":false,"schema":{"type":"string","enum":["frontend","backend","fullstack","mobile","ml","data","devops","security","qa","em","software","product","design","analytics"]}},{"name":"seniority","in":"query","required":false,"schema":{"type":"string","enum":["intern","junior","mid","senior","staff","principal","manager","director"]}},{"name":"geo","in":"query","required":false,"schema":{"type":"string"},"description":"ISO country code or metro key (pay_band)"},{"name":"country","in":"query","required":false,"schema":{"type":"string"},"description":"ISO country code (country_count)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":3,"maximum":20}},{"name":"remote_only","in":"query","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Rows and summary values","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/companies/{id}/jobs":{"get":{"operationId":"listCompanyJobs","summary":"A company's open roles","tags":["companies"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Company id, name or domain"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50},"description":"Page size, default 25"},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"next_cursor of the previous page. Opaque."}],"responses":{"200":{"description":"A page of open roles, newest first","headers":{"ETag":{"schema":{"type":"string"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobList"}}}},"304":{"description":"Not modified (If-None-Match matched the ETag)"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/companies/{id}/hiring":{"get":{"operationId":"getCompanyHiring","summary":"Daily hiring series","tags":["companies"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Company id, name or domain"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","minimum":7,"maximum":365},"description":"Days of series, default 90"}],"responses":{"200":{"description":"Open roles, opened and closed per day, plus trend","headers":{"ETag":{"schema":{"type":"string"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"304":{"description":"Not modified (If-None-Match matched the ETag)"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/salaries":{"get":{"operationId":"getSalaries","summary":"Posted-pay benchmark","tags":["salaries"],"description":"p25, median and p75 of pay ranges advertised on live listings, per level, annualised in the original currency. Needs at least 3 listings per band.","parameters":[{"name":"role","in":"query","required":true,"schema":{"type":"string"},"description":"Role slug or role family key"},{"name":"geo","in":"query","required":false,"schema":{"type":"string"},"description":"ISO country code or metro key (nyc, london, ...). Default: all locations"},{"name":"seniority","in":"query","required":false,"schema":{"type":"string","enum":["intern","junior","mid","senior","staff","principal","manager","director"]}}],"responses":{"200":{"description":"Pay bands","headers":{"ETag":{"schema":{"type":"string"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"304":{"description":"Not modified (If-None-Match matched the ETag)"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/signals":{"get":{"operationId":"getSignals","summary":"Market signals","tags":["market"],"description":"Open roles, openings and closings by role family, and the companies opening most roles.","responses":{"200":{"description":"Market signals","headers":{"ETag":{"schema":{"type":"string"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"304":{"description":"Not modified (If-None-Match matched the ETag)"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}}},"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"A key from your account settings (alk_...)"}},"schemas":{"Envelope":{"type":"object","required":["data","attribution"],"properties":{"data":{"description":"The result"},"next_cursor":{"type":["string","null"]},"citations":{"type":"array","items":{"type":"string","format":"uri"},"description":"alder pages that back the data: cite them"},"attribution":{"type":"object","required":["source","url","terms"],"properties":{"source":{"type":"string"},"url":{"type":"string","format":"uri"},"terms":{"type":"string"}}}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"},"hint":{"type":"string"},"limit":{"type":"integer"}}},"Job":{"type":"object","required":["id","title","company","url"],"properties":{"id":{"type":"string"},"title":{"type":"string"},"company":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string","format":"uri"}}},"location":{"type":["string","null"]},"workplace":{"type":"string"},"country":{"type":["string","null"]},"seniority":{"type":"string"},"role_family":{"type":"string"},"posted_at":{"type":["string","null"],"format":"date-time"},"status":{"type":"string","enum":["open","removed"]},"pay":{"type":["object","null"],"properties":{"min":{"type":["number","null"]},"max":{"type":["number","null"]},"currency":{"type":["string","null"]},"period":{"type":"string"}}},"url":{"type":"string","format":"uri"}}},"JobList":{"allOf":[{"$ref":"#/components/schemas/Envelope"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Job"}}}}]}},"responses":{"Error":{"description":"Error. 429 carries Retry-After and X-RateLimit-* headers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"security":[{},{"apiKey":[]}],"tags":[{"name":"jobs"},{"name":"companies"},{"name":"salaries"},{"name":"market"}]}