Public Jobs API no key required
A public, key-less job-board feed for the roles you publish from HR → Recruitment. It's a plain GET you can curl, drop into your own website, or hand to a job aggregator or no-code tool to poll — modelled on the boards you already integrate with (Greenhouse, Lever, Ashby). Two endpoints: list the open roles, and fetch one role with its full description.
No authentication. These are public GETs — no API key, no token, no CORS gymnastics. Responses are briefly cached so aggregators and CDNs can poll them politely.
Base URL
https://bgbavxtjlbvgplozizxu.supabase.co/functions/v1/hr-careers
Endpoints
| Request | Returns |
|---|---|
GET ?slug=<company> | { company, count, jobs: [ … ] } — every currently-open role. |
GET ?slug=<company>&job=<job-slug> | { company, job: { … } } — one role, plus its description and requirements. |
slug is your workspace's slug (the same one in your careers-page URL) and is required.
Example
| Call |
|---|
curl "https://bgbavxtjlbvgplozizxu.supabase.co/functions/v1/hr-careers?slug=acme" |
curl "https://bgbavxtjlbvgplozizxu.supabase.co/functions/v1/hr-careers?slug=acme&job=senior-installer" |
Response fields
company
| Field | What it is |
|---|---|
name, slug | Your company name and board slug. |
website | Your website, if set. |
logo_url | Your logo, if set — handy for rendering the board. |
Each job
| Field | What it is |
|---|---|
id, slug, title | Identity of the posting (slug is what you pass back as &job=). |
department | The department name (flattened to a plain string). |
location, location_type, remote | Where the role is based and whether it's remote. |
employment_type, level | e.g. full-time / part-time, and seniority. |
salary_min, salary_max, currency | Salary range where published. |
compensation, compensation_note | Free-form compensation detail. |
published_at, closes_at, status | Publication window and state. |
absolute_url | A direct link to the posting on the careers page — link straight to it from your site or the aggregator. |
updated_at | Last change — use it to poll incrementally instead of re-reading everything. |
description, requirements | Single-job response only — the full body copy. |
What's published (and what isn't)
- Only live roles. A posting appears only while it is open and not past its close date — the same visibility rule as your public careers page. Closed roles simply disappear from the feed.
- Jobs only, deliberately. The feed carries no UI concerns (no bot-check keys, no apply-form config) — that's noise for an integrator. To let people apply, link them to
absolute_url, which opens the real posting with its apply form.
Errors
| Status | When |
|---|---|
400 slug is required | You didn't pass ?slug=. |
404 not found | No company matches that slug. |
404 This position is no longer open. | The requested job has closed or isn't published. |
Typical use: render your open roles on your own marketing site by fetching the list endpoint at build time (or client-side), and link each card to its absolute_url. Aggregators can poll the same URL and use updated_at to pick up changes. Create and manage the postings themselves in HR → Recruitment.