# Analytics
Source: https://docs.jobkit.io/analytics
GET /analytics.json
The analytics data for the job board
Requires admin authentication
```json Response theme={"system"}
{
"events_per_day": {
"2025-01-10": 16,
"2025-01-09": 90,
"2025-01-08": 72,
"2025-01-07": 54,
"2025-01-06": 60
},
"top_paths": {
"/": 35,
"/jobs/1": 15,
"/jobs/2": 14,
"/users/sign_in": 12,
"/jobs/3": 7,
"/jobs/4": 5
},
"top_countries": {
"United States": 30,
"Germany": 22,
"France": 15,
"Denmark": 5
},
"top_sources": {
"google.com": 10,
"x.com": 6
},
"jobs": 2,
"subscribers": 1,
"users": 2
}
```
# Authentication
Source: https://docs.jobkit.io/authentication
The API uses Basic HTTP Authentication to authenticate requests.
Authenticate each request by providing your user encoded email and password in an Authorization header:
```
Authorization: Basic base64(email:password)
```
You can learn more about [Basic HTTP Authentication](https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication).
```bash cURL theme={"system"}
curl --request GET \
--url https://elixir.jobkit.io/jobs.json \
--header 'Authorization: Basic cGFzc3dvcmQ6ZW1haWw'
```
```json 200 theme={"system"}
[
{
"id": 1,
"title": "Job title",
"description": "Job description in Markdown format",
"location": "Worldwide",
"arrangement": "remote",
"salary": "100000",
"salary_currency": "USD",
"salary_period": "yearly",
"company": "Company LLC",
"company_website": "https://www.company.com",
"application_type": "email",
"application_email": "email@company.com",
"term": {
"id": 1,
"name": "Full-time"
},
"category": {
"id": 1,
"name": "Engineering"
},
"plan": {
"id": 1,
"name": "Basic",
"price": 0,
"period": 30,
"highlight": false,
"badge": false,
"pin": false
},
"logo": "https://job.board.com/files/.../1.png",
"url": "https://job.board.com/jobs/1.json",
"preview_image_url": "https://job.board.com/jobs/1.png",
"created_at": "2025-01-10T18:21:59+00:00"
},
...
]
```
```json 401 theme={"system"}
{
"error": "Invalid Email or password."
}
```
Please keep your email and password secure! Change them if you think they are compromised.
If your integration does not require administrator access, it's a good idea to create a separate user on your job board to authenticate the API requests.
Admin users can read, create, update and delete any resource on the board. Some resources will return extra data when authenticated as administrator or the owner of that resource.
# Create category
Source: https://docs.jobkit.io/categories/create
POST /categories.json
Create a new job category
Requires admin authentication
The name of the category
```json Response theme={"system"}
{
"id": 123,
"name": ""
}
```
# Delete category
Source: https://docs.jobkit.io/categories/delete
DELETE /categories/{id}.json
Delete a category with the given ID and all related jobs
Requires admin authentication
All jobs related to the deleted category will be deleted as well
The id of the category to delete
```json Response theme={"system"}
{
"message": "Category was successfully removed."
}
```
# List categories
Source: https://docs.jobkit.io/categories/list
GET /categories.json
The list of all job categories
Requires user authentication
```json Response theme={"system"}
[
{
"id": 1,
"name": "Engineering"
},
{
"id": 2,
"name": "Design"
}
]
```
# Update category
Source: https://docs.jobkit.io/categories/update
PUT /categories/{id}.json
Update a category with the given ID
Requires admin authentication
The id of the category to update
The new name of the category
```json Response theme={"system"}
{
"id": 123,
"name": ""
}
```
# Introduction
Source: https://docs.jobkit.io/introduction
The JobKit API allows you to integrate your job board with external services, automate tasks and create custom workflows.
The REST API is accessible over HTTPS only and is designed to have predictable, resource-oriented URLs and to use HTTP response codes to indicate API errors. It accepts JSON or form-encoded request and returns JSON-encoded responses.
All API endpoints are accessible on your job board web address - your custom domain or your `subdomain.jobkit.io`.
Read further to learn how to authenticate, make requests and receive responses.
# Create job
Source: https://docs.jobkit.io/jobs/create
POST /jobs.json
Create a new job post
Requires user authentication
The job title, maximum 64 characters
The job description in Markdown format
The job location, e.g. Worldwide
The job salary, can be empty if not specified
The job salary currency in ISO format, required when `salary` is specified
The job salary period, should be either `hourly`, `daily`, `weekly`, `monthly` or `yearly`
The job arrangement, should be either `remote`, `onsite` or `hybrid`
The id of the job category
The id of the job term
The name of the hiring company
The URL of the hiring company website
The job application type, should be either `url` or `email`
The job application URL, required if `application_type` is `url`
The job application email, required if `application_type` is `email`
The job logo image file, maximum 5MB
The id of the job payment plan
```json Response theme={"system"}
{
"id": 2,
"title": "Job title",
"description": "Job description in Markdown format",
"location": "Worldwide",
"arrangement": "remote",
"salary": "120000",
"salary_currency": "USD",
"salary_period": "yearly",
"company": "Company LLC",
"company_website": "https://www.company.com",
"application_type": "url",
"application_url": "https://www.company.com/application",
"term": {
"id": 1,
"name": "Full-time"
},
"category": {
"id": 1,
"name": "Engineering"
},
"plan": {
"id": 1,
"name": "Basic",
"price": 0,
"period": 30,
"highlight": false,
"badge": false,
"pin": false
},
"logo": "https://job.board.com/files/.../2.png",
"url": "https://job.board.com/jobs/2.json",
"preview_image_url": "https://job.board.com/jobs/2.png",
"created_at": "2025-01-10T18:21:59+00:00"
}
```
# Delete job
Source: https://docs.jobkit.io/jobs/delete
DELETE /jobs/{id}.json
Delete a job post
Requires user authentication
The id of the job to delete
```json Response theme={"system"}
{
"message": "Job successfully deleted."
}
```
# Get job
Source: https://docs.jobkit.io/jobs/get
GET /jobs/{id}.json
Get the details of a job post
The id of the job
```json Response theme={"system"}
{
"id": 1,
"title": "Job title",
"description": "Job description in Markdown format",
"location": "Worldwide",
"arrangement": "remote",
"salary": "100000",
"salary_currency": "USD",
"salary_period": "yearly",
"company": "Company LLC",
"company_website": "https://www.company.com",
"application_type": "email",
"application_email": "email@company.com",
"term": {
"id": 1,
"name": "Full-time"
},
"category": {
"id": 1,
"name": "Engineering"
},
"plan": {
"id": 1,
"name": "Basic",
"price": 0,
"period": 30,
"highlight": false,
"badge": false,
"pin": false
},
"logo": "https://job.board.com/files/.../1.png",
"url": "https://job.board.com/jobs/1.json",
"preview_image_url": "https://job.board.com/jobs/1.png",
"created_at": "2025-01-10T18:21:59+00:00"
}
```
# List jobs
Source: https://docs.jobkit.io/jobs/list
GET /jobs.json
The list of all jobs accessible by the authenticated user
The search query to filter the list of jobs
The term id to filter the list of jobs
The category id to filter the list of jobs
```json Response theme={"system"}
[
{
"id": 1,
"title": "Job title",
"description": "Job description in Markdown format",
"location": "Worldwide",
"arrangement": "remote",
"salary": "100000",
"salary_currency": "USD",
"salary_period": "yearly",
"company": "Company LLC",
"company_website": "https://www.company.com",
"application_type": "email",
"application_email": "email@company.com",
"term": {
"id": 1,
"name": "Full-time"
},
"category": {
"id": 1,
"name": "Engineering"
},
"plan": {
"id": 1,
"name": "Basic",
"price": 0,
"period": 30,
"highlight": false,
"badge": false,
"pin": false
},
"logo": "https://job.board.com/files/.../1.png",
"url": "https://job.board.com/jobs/1.json",
"preview_image_url": "https://job.board.com/jobs/1.png",
"created_at": "2025-01-10T18:21:59+00:00"
},
{
"id": 2,
"title": "Job title",
"description": "Job description in Markdown format",
"location": "Worldwide",
"arrangement": "remote",
"salary": "120000",
"salary_currency": "USD",
"salary_period": "yearly",
"company": "Company LLC",
"company_website": "https://www.company.com",
"application_type": "url",
"application_url": "https://www.company.com/application",
"term": {
"id": 1,
"name": "Full-time"
},
"category": {
"id": 1,
"name": "Engineering"
},
"plan": {
"id": 1,
"name": "Basic",
"price": 0,
"period": 30,
"highlight": false,
"badge": false,
"pin": false
},
"logo": "https://job.board.com/files/.../2.png",
"url": "https://job.board.com/jobs/2.json",
"preview_image_url": "https://job.board.com/jobs/2.png",
"created_at": "2025-01-10T18:21:59+00:00"
}
]
```
# Update job
Source: https://docs.jobkit.io/jobs/update
PUT /jobs/{id}.json
Update a job post with the given ID
Requires user authentication
The id of the job to update
The job title, maximum 64 characters
The job description in Markdown format
The job location, e.g. Worldwide
The job salary, can be empty if not specified
The job salary currency in ISO format, required when `salary` is specified
The job salary period, should be either `hourly`, `daily`, `weekly`, `monthly` or `yearly`
The job arrangement, should be either `remote`, `onsite` or `hybrid`
The id of the job category
The id of the job term
The name of the hiring company
The URL of the hiring company website
The job application type, should be either `url` or `email`
The job application URL, required if `application_type` is `url`
The job application email, required if `application_type` is `email`
The job logo image file, maximum 5MB
```json Response theme={"system"}
{
"id": 2,
"title": "Job title",
"description": "Job description in Markdown format",
"location": "Worldwide",
"arrangement": "remote",
"salary": "120000",
"salary_currency": "USD",
"salary_period": "yearly",
"company": "Company LLC",
"company_website": "https://www.company.com",
"application_type": "url",
"application_url": "https://www.company.com/application",
"term": {
"id": 1,
"name": "Full-time"
},
"category": {
"id": 1,
"name": "Engineering"
},
"plan": {
"id": 1,
"name": "Basic",
"price": 0,
"period": 30,
"highlight": false,
"badge": false,
"pin": false
},
"logo": "https://job.board.com/files/.../2.png",
"url": "https://job.board.com/jobs/2.json",
"preview_image_url": "https://job.board.com/jobs/2.png",
"created_at": "2025-01-10T18:21:59+00:00"
}
```
# Archive plan
Source: https://docs.jobkit.io/plans/archive
PUT /plans/{id}/archive.json
Archive a plan with the given ID
Requires admin authentication
The plan will be hidden in the future. Existing jobs will NOT be affected
The id of the plan to archive
```json Response theme={"system"}
{
"message": "Plan successfully archived."
}
```
# Create plan
Source: https://docs.jobkit.io/plans/create
POST /plans.json
Create a new payment plan
Requires admin authentication
The name of the plan, should be 3-32 characters
The price of a job in this plan, can be set to 0
The period of the plan in days, should be between 1 and 90
Whether the jobs in this plan will be highlighted
Whether the jobs in this plan will have a badge displayed
Whether the jobs in this plan will be pinned to the top of the list
```json Response theme={"system"}
{
"id": 3,
"name": "Featured",
"price": 99,
"period": 30,
"highlight": true,
"badge": true,
"pin": true
}
```
# List plans
Source: https://docs.jobkit.io/plans/list
GET /plans.json
The list of all active payment plans
Requires user authentication
```json Response theme={"system"}
[
{
"id": 1,
"name": "Basic",
"price": 0,
"period": 30,
"highlight": false,
"badge": false,
"pin": false
},
{
"id": 2,
"name": "Highlighted",
"price": 49,
"period": 30,
"highlight": true,
"badge": false,
"pin": false
},
{
"id": 3,
"name": "Featured",
"price": 99,
"period": 30,
"highlight": true,
"badge": true,
"pin": true
}
]
```
# Update plan
Source: https://docs.jobkit.io/plans/update
PUT /plans/{id}.json
Update a payment plan with the given ID
Requires admin authentication
The id of the plan to update
The name of the plan, should be 3-32 characters
The price of a job in this plan, can be set to 0
The period of the plan in days, should be between 1 and 90
Whether the jobs in this plan will be highlighted
Whether the jobs in this plan will have a badge displayed
Whether the jobs in this plan will be pinned to the top of the list
```json Response theme={"system"}
{
"id": 3,
"name": "Featured",
"price": 99,
"period": 30,
"highlight": true,
"badge": true,
"pin": true
}
```
# Subscribers
Source: https://docs.jobkit.io/subscribers
GET /subscribers.json
The list of all email subsribers
Requires admin authentication
```json Response theme={"system"}
[
{
"id": 1,
"email": "subscriber@test.com",
"email_confirmed": true,
"created_at": "2025-01-09T18:21:59+00:00",
"updated_at": "2025-01-09T18:21:59+00:00"
}
]
```
# Create term
Source: https://docs.jobkit.io/terms/create
POST /terms.json
Create a new job term
Requires admin authentication
The name of the category
```json Response theme={"system"}
{
"id": 123,
"name": ""
}
```
# Delete term
Source: https://docs.jobkit.io/terms/delete
DELETE /terms/{id}.json
Delete a term with the given ID and all related jobs
Requires admin authentication
All jobs related to the deleted term will be deleted as well
The id of the term to update
```json Response theme={"system"}
{
"message": "Term was successfully removed."
}
```
# List terms
Source: https://docs.jobkit.io/terms/list
GET /terms.json
The list of all job terms
Requires user authentication
```json Response theme={"system"}
[
{
"id": 1,
"name": "Full-time"
},
{
"id": 2,
"name": "Part-time"
}
]
```
# Update term
Source: https://docs.jobkit.io/terms/update
PUT /terms/{id}.json
Update a job term with the given ID
Requires admin authentication
The id of the term to update
The new name of the term
```json Response theme={"system"}
{
"id": 123,
"name": ""
}
```
# Users
Source: https://docs.jobkit.io/users
GET /users.json
The list of all registered users
Requires admin authentication
```json Response theme={"system"}
[
{
"id": 1,
"email": "admin@test.com",
"role": "admin",
"created_at": "2025-01-09T18:21:59+00:00",
"updated_at": "2025-01-09T18:21:59+00:00"
},
{
"id": 2,
"email": "user@test.com",
"role": "user",
"created_at": "2025-01-09T18:21:59+00:00",
"updated_at": "2025-01-09T18:21:59+00:00"
}
]
```
# Webhooks
Source: https://docs.jobkit.io/webhooks
A "webhook" is a HTTP request to a specified URL made when certain event occurs. If the JobKit API is a "pull" interface, webhooks are the "push" interface.
You can define the webhook URL in your job board settings page.
When a new job is **published**, a `POST` HTTP request will be made to that URL, carrying a JSON payload that looks like this:
```JSON theme={"system"}
{
"title": "Job title",
"description": "Job description in Markdown format",
"location": "Worldwide",
"arrangement": "remote",
"salary": "100000",
"salary_currency": "USD",
"salary_period": "yearly",
"company": "Company LLC",
"company_website": "https://www.company.com",
"application_type": "email",
"application_email": "email@company.com",
"created_at": "2026-01-10T16:16:11.126Z",
"published_at": "2026-01-10T16:16:11.127Z",
"expires_at": "2026-03-09T16:12:07.347Z",
"term": {
"id": 1,
"name": "Full-time"
},
"category": {
"id": 1,
"name": "Engineering"
},
"plan": {
"name": "Basic",
"price": 0,
"period": 30,
"highlight": false,
"badge": false,
"pin": false
},
"user": {
"email": "user@company.com",
"created_at": "2026-01-10T12:16:11.126Z",
"role": "user",
"jobs_count": 5
},
"url": "https://job.board.com/jobs/1.json",
"preview_image_url": "https://job.board.com/jobs/1.png",
"logo": "https://job.board.com/files/.../1.png",
}
```
The receiving URL should return an appropriate HTTP response code, e.g.
* `200` for success
* `4xx` for client errors
* `5xx` for server errors
Webhook requests will be retried **up to 5 times** until successfully received.
Make sure your webhook URL is secure, so you don't leak user data!
### Example use cases
* Post a notification on Slack, Discord and/or other communities
* Post a social media post on LinkedIn, X, Facebook, etc.
* Analyze/transform the published data and send an email notification
* Trigger an AI agent workflow
### Automation tools
There are many tools you can use to receive the webhook and trigger different workflows. Here are just a few for your reference:
* [Zapier](https://zapier.com)
* [Pipedream](https://pipedream.com)
* [Make](https://www.make.com)
* [Trigger.dev](https://trigger.dev)
* [n8n](https://n8n.io)
* [Integrately](https://integrately.com)