Building your own careers page on the Job Boards API
Last updated: September 9, 2026
The Job Boards API lets you list your open roles on your own website instead of sending candidates to a Kula-hosted page. This article covers the four ways to do it, what an admin sets up in Kula, and the limits worth knowing before your developer starts.
Who can do this: Super Admin, Admin — anyone with the Manage API tokens permission creates the key. Building the page itself is a developer's job.
Where to find it: Settings → Organization → API management, and the developer documentation at
Four ways to put your jobs on your own site
You don't have to build everything. The four options differ in how much of the candidate journey you own — pick the lightest one that gets you what you need.
Option | You build | Kula handles | API work |
|---|---|---|---|
Hosted career portal | Nothing — you link to it | The whole portal: listings, job details, application form | None |
Linked job listings | The list of roles on your site | Job details and the application form, on your Kula career page | Least |
Embedded apply | The list and the job details on your site | The application form, opened in an overlay on your page | Medium |
Native apply form | Everything — list, job details, and the form | Storing and processing the application | Most |
Each option is demonstrated with live data on the in the developer documentation.
If you only want your roles on your own domain and don't need to own the apply experience, linked job listings gets you there with very little work.
What the Job Boards API gives you
Every request goes to https://api.kula.ai.
What you want | Endpoint |
|---|---|
Your published roles, as a list |
|
One role, with its full description |
|
The fields that role's application form needs |
|
Upload a CV, cover letter or photo |
|
Submit the application |
|
Departments, as a nested tree |
|
Offices, with city and country |
|
Suggestion lists for form fields — companies, industries, locations, institutions, disciplines, degrees |
|
Payload shapes, parameters and error codes live in the rather than here, so there's one version of them.
Give the key only what it needs
Create a Job board key, not a Private key — a Job board key can only reach the endpoints above. When you create it, choose Custom and tick only the grants your integration uses. There's a Job board / careers site starting template that pre-selects a sensible set.
Grant | Covers | You need it for |
|---|---|---|
Read job posts and application forms | Listing posts, post details, form fields | Every option |
Submit applications | Submitting an application, uploading files | Native apply form only |
Read departments and offices | The department tree and office list | Filters on your listing page |
Read reference data | Company, industry, location, institution, discipline and degree lookups | A native form with type-ahead fields |
If a key calls something it wasn't granted, the request is rejected with a 403 error naming the missing grant. You can add that grant under Settings → Organization → API management and retry — the key keeps working, and doesn't need rotating. Keys created before grants existed are unrestricted and keep working unchanged.

For the steps to create and hand over a key, see Generating and managing API keys.
Which of your jobs appear in the API
A job post is returned by the API only when all three are true:
The job post is published
The job post is listed
Its visibility includes external — either external, or internal and external
Internal-only postings never appear. This is the same rule the Kula-hosted career page uses, so if a role shows there but not through the API, the cause is almost always caching on your side rather than the job's settings.
Good to know
An account can hold 5 API keys at most. If you need more, contact support — raising the limit is on the roadmap.
Attachments must be PDF or DOCX, except a photo field, which takes JPEG or PNG. The cap is 20 MB per file, and the filename must be under 255 characters.
The list endpoint returns 20 roles per page by default, and 100 at most per page. Page through it rather than asking for everything at once.
The job description is only on the single-post endpoint. The list endpoint leaves it out to stay fast, so fetch the detail when a candidate opens a role.
Compensation appears only when it's switched on for that job. If a role has no
compensationin the response, check the job's own settings before treating it as an API problem.Your job pages and Kula's are both indexable by search engines. If you host your own job pages and also have a Kula career page, both carry the same job description at different URLs, and Google may rank Kula's instead of yours. There is no canonical-URL or noindex setting today — this is a known gap that engineering is tracking.
You can turn off your Kula-hosted career page once your own page is live. It isn't a self-serve setting; ask support to disable it.
The rate limit is published in the developer documentation. Check it there rather than assuming — see the note below on which figure is current.
Need help? If you have questions or need assistance, reach out to us at or use the in-app chat.