Developers
Build with OneATS
Show your open jobs on your website, read them from the public jobs API, or hand job boards an XML feed.
Your company key
Every snippet on this page needs your company key. Company admins can find ready-made snippets, with the key already filled in, under Settings → Website Integration in the portal.
The key identifies your company’s public job listings only. It cannot read candidates or change anything. Still, treat it as you would any identifier you don’t want misused, and contact [email protected] if you need it rotated.
JavaScript widget Recommended
The widget renders your open jobs inside your page, with tabs for jobs and internships, filters and pagination. It follows your page’s layout and uses your brand colour.
<!-- 1. Add a container where jobs should appear -->
<div id="oneats-career-widget" data-key="YOUR_COMPANY_KEY" data-theme="#2563EB"></div>
<!-- 2. Include the widget script before </body> -->
<script src="https://candidate.oneats.co/widget/oneats-embed.js" async></script>data-key— your company key (required).data-theme— a hex brand colour for buttons and highlights (optional).- The container can also be any element with a
data-oneats-widgetattribute.
iframe embed
If your website builder doesn’t allow scripts, embed the hosted job list in an iframe instead.
<iframe src="https://candidate.oneats.co/job-list/YOUR_COMPANY_KEY" width="100%" height="800"
frameborder="0" style="border:none;border-radius:12px;overflow:hidden;"></iframe>Public jobs API
Read your open jobs as JSON to build a fully custom careers page. No authentication is needed; only active, public jobs are returned.
GET /api/v1/candidate/jobrole/list-jobs/{key}
page— page number, starting at 1 (default 1).limit— jobs per page (default 9).department— filter by department title.position— filter by job title.
curl "https://api.oneats.co/api/v1/candidate/jobrole/list-jobs/YOUR_COMPANY_KEY?page=1&limit=9"const res = await fetch(
"https://api.oneats.co/api/v1/candidate/jobrole/list-jobs/YOUR_COMPANY_KEY?page=1&limit=9"
);
const { data } = await res.json();
for (const job of data.allRole) {
console.log(job.title, job.locations, `https://candidate.oneats.co/jobs/${job.slug}`);
}Response (abridged):
{
"success": true,
"data": {
"company": { "companyName": "…", "slug": "…", "logoUrl": "…", "colorCode": "#0d51c9", … },
"allRole": [ { "title": "…", "slug": "…", "locations": […], "empType": "…",
"isRemote": false, "department": { "title": "…" }, … } ],
"jobRole": [ … ], // jobs only
"internshipRole": [ … ], // internships only
"allRoleOpening": 32, "jobRoleOpening": 17, "internshipOpening": 15,
"departments": [ … ], "positions": [ … ], "locations": [ … ],
"page": 1, "limit": 9, "totalPages": 4
}
}Link each job to https://candidate.oneats.co/jobs/{slug} so candidates apply through OneATS and the application is recorded against your company.
XML job feeds
OneATS publishes a feed of your open jobs in the formats Indeed and LinkedIn read. Feeds refresh every 15 minutes and include only open jobs. Find your feed URLs under Settings → Job Channels & XML Feeds.
https://api.oneats.co/feeds/YOUR_FEED_TOKEN/indeed.xml
https://api.oneats.co/feeds/YOUR_FEED_TOKEN/linkedin.xmlSource tracking
Applications are tagged with where they came from. Jobs opened from the widget, your careers page or a distribution channel carry a src parameter, and standard utm_source, utm_medium and utm_campaign parameters are recorded too. If you link to OneATS job pages from your own campaigns, add UTM parameters and they’ll appear in your source reports.
Need something the API doesn’t cover?
Tell us what you’re building — request an integration.