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 developers.kula.ai

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 Examples page 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

GET /v1/job-boards/job-posts

One role, with its full description

GET /v1/job-boards/job-posts/{id}

The fields that role's application form needs

GET /v1/job-boards/job-posts/{id}/form

Upload a CV, cover letter or photo

POST /v1/job-boards/attachments

Submit the application

POST /v1/job-boards/job-posts/{id}/apply

Departments, as a nested tree

GET /v1/job-boards/departments

Offices, with city and country

GET /v1/job-boards/offices

Suggestion lists for form fields — companies, industries, locations, institutions, disciplines, degrees

GET /v1/job-boards/autocomplete/...

Payload shapes, parameters and error codes live in the developer documentation 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 compensation in 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 support@kula.ai or use the in-app chat.