Job feed API
Pull HireOnChain's most recent open jobs into your own board with one authenticated GET. Free for partner boards. In return, every job you show links back to its HireOnChain page.
Get a key
Message @0xHireOnChain with your board's name and URL. You get one secret key, tied to your board's name. Keep it on your server. The feed is not built for browser calls, and a key shipped in page JavaScript will be revoked.
Send it on every request:
Authorization: Bearer <your key>List open jobs
GET https://api.hireonchain.io/feed/v1/jobsOpen jobs, newest first. Closed, paused and expired jobs are never included.
| Query param | Meaning |
|---|---|
limit | 1 to 100. Default 50. |
since | ISO 8601 date. Only jobs posted at or after it. |
cursor | The next_cursor from the previous page. Opaque; pass it back unchanged. |
curl "https://api.hireonchain.io/feed/v1/jobs?limit=50" \
-H "Authorization: Bearer $HOC_FEED_KEY"{
"data": [
{
"id": "3f6c1a9e-8b2d-4c71-9e0a-5d4b7f2e1c88",
"slug": "senior-solidity-engineer-nova-labs",
"url": "https://hireonchain.io/apply?id=3f6c…&native=true&utm_source=yourboard&utm_medium=job_feed",
"status": "open",
"source": "posted",
"title": "Senior Solidity Engineer",
"company": {
"name": "Nova Labs",
"logo_url": "https://…/logo.png",
"url": "https://novalabs.xyz",
"verified": true
},
"location": { "raw": "Remote (EU)", "city": null, "region": null, "country": null, "remote": true },
"employment_type": "full_time",
"seniority": "senior",
"comp": { "min": 180000, "max": 230000, "currency": "USD", "period": "year", "equity": true, "raw": null },
"tags": ["solidity", "evm", "defi"],
"chains": ["ethereum"],
"description": {
"format": "structured",
"summary": "…",
"sections": [{ "heading": "About the role", "body_md": "…" }],
"responsibilities": ["…"],
"requirements": ["…"],
"nice_to_have": [],
"benefits": [],
"raw_text": "…",
"raw_html": null,
"normalizer_version": "…"
},
"apply": { "type": "internal", "url": null },
"posted_at": "2026-10-11T14:02:11.000Z",
"updated_at": "2026-10-11T14:02:11.000Z",
"closes_at": null
}
],
"next_cursor": "MjAyNi0xMC0xMVQxNDowMjoxMS4wMDBafDNmNmMxYTll…"
}Fields you will use most
id: stable. Use it as your primary key.url: the job's HireOnChain page, already tagged with your board. Link to this.description.format: when it isstructured, rendersummary,sectionsand the lists. When it israw, those are empty andraw_textholds the full description.comp:min/maxare numbers incurrencyperperiod. Any of them can benull.apply:internaljobs are applied to on HireOnChain.externaljobs carry the employer's own apply link.
Remove closed jobs
GET https://api.hireonchain.io/feed/v1/jobs/closed?since=2026-10-01T00:00:00ZIDs of jobs that closed since since, as { "data": [{ "id", "closed_at" }] }. It looks back 30 days at most. Delete these from your board.
Keeping in sync
// Run every 15–60 minutes.
const H = { Authorization: `Bearer ${process.env.HOC_FEED_KEY}` };
// 1. New and current jobs since your last run (page until next_cursor is null)
let cursor = null;
do {
const qs = new URLSearchParams({ limit: "100", since: lastRunIso });
if (cursor) qs.set("cursor", cursor);
const page = await fetch(`https://api.hireonchain.io/feed/v1/jobs?${qs}`, { headers: H }).then(r => r.json());
for (const job of page.data) upsert(job); // key on job.id
cursor = page.next_cursor;
} while (cursor);
// 2. Take down anything we closed
const closed = await fetch(`https://api.hireonchain.io/feed/v1/jobs/closed?since=${lastRunIso}`, { headers: H }).then(r => r.json());
for (const { id } of closed.data) remove(id);Responses may be cached for up to 5 minutes, so polling more often than that gains nothing.
Errors and limits
| Status | Meaning |
|---|---|
401 | Missing or invalid key. |
400 | Malformed since or cursor. |
429 | Over 60 requests a minute for your key. Wait for the Retry-After header's seconds. |
Terms
- Every job you display links to its
url, unmodified. - Show “via HireOnChain” on the listing or the page that carries the feed.
- Don't edit a job's title, company or compensation, and don't resell the feed.
- We can rotate or revoke a key at any time. We'll message you first unless the key has leaked.
Run a board?
Partner access is free. Tell us where the jobs will appear.
Request a feed key