Create Job
curl --request POST \
--url https://api.example.com/api/v1/jobs \
--header 'Content-Type: application/json' \
--data '
{
"title": "<string>",
"department": "<string>",
"location": {
"type": "<string>",
"city": "<string>",
"state": "<string>",
"country": "<string>"
},
"description": "<string>",
"requirements": [
{}
],
"skills": [
{}
],
"experience_level": "<string>",
"employment_type": "<string>",
"salary": {
"min": 123,
"max": 123,
"currency": "<string>",
"period": "<string>"
},
"assessment_config": {
"auto_generate": true,
"question_count": 123,
"time_limit": 123,
"proctoring": true,
"question_types": [
{}
]
},
"publish": true
}
'import requests
url = "https://api.example.com/api/v1/jobs"
payload = {
"title": "<string>",
"department": "<string>",
"location": {
"type": "<string>",
"city": "<string>",
"state": "<string>",
"country": "<string>"
},
"description": "<string>",
"requirements": [{}],
"skills": [{}],
"experience_level": "<string>",
"employment_type": "<string>",
"salary": {
"min": 123,
"max": 123,
"currency": "<string>",
"period": "<string>"
},
"assessment_config": {
"auto_generate": True,
"question_count": 123,
"time_limit": 123,
"proctoring": True,
"question_types": [{}]
},
"publish": True
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
title: '<string>',
department: '<string>',
location: {type: '<string>', city: '<string>', state: '<string>', country: '<string>'},
description: '<string>',
requirements: [{}],
skills: [{}],
experience_level: '<string>',
employment_type: '<string>',
salary: {min: 123, max: 123, currency: '<string>', period: '<string>'},
assessment_config: {
auto_generate: true,
question_count: 123,
time_limit: 123,
proctoring: true,
question_types: [{}]
},
publish: true
})
};
fetch('https://api.example.com/api/v1/jobs', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/api/v1/jobs",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'title' => '<string>',
'department' => '<string>',
'location' => [
'type' => '<string>',
'city' => '<string>',
'state' => '<string>',
'country' => '<string>'
],
'description' => '<string>',
'requirements' => [
[
]
],
'skills' => [
[
]
],
'experience_level' => '<string>',
'employment_type' => '<string>',
'salary' => [
'min' => 123,
'max' => 123,
'currency' => '<string>',
'period' => '<string>'
],
'assessment_config' => [
'auto_generate' => true,
'question_count' => 123,
'time_limit' => 123,
'proctoring' => true,
'question_types' => [
[
]
]
],
'publish' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/api/v1/jobs"
payload := strings.NewReader("{\n \"title\": \"<string>\",\n \"department\": \"<string>\",\n \"location\": {\n \"type\": \"<string>\",\n \"city\": \"<string>\",\n \"state\": \"<string>\",\n \"country\": \"<string>\"\n },\n \"description\": \"<string>\",\n \"requirements\": [\n {}\n ],\n \"skills\": [\n {}\n ],\n \"experience_level\": \"<string>\",\n \"employment_type\": \"<string>\",\n \"salary\": {\n \"min\": 123,\n \"max\": 123,\n \"currency\": \"<string>\",\n \"period\": \"<string>\"\n },\n \"assessment_config\": {\n \"auto_generate\": true,\n \"question_count\": 123,\n \"time_limit\": 123,\n \"proctoring\": true,\n \"question_types\": [\n {}\n ]\n },\n \"publish\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/api/v1/jobs")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"<string>\",\n \"department\": \"<string>\",\n \"location\": {\n \"type\": \"<string>\",\n \"city\": \"<string>\",\n \"state\": \"<string>\",\n \"country\": \"<string>\"\n },\n \"description\": \"<string>\",\n \"requirements\": [\n {}\n ],\n \"skills\": [\n {}\n ],\n \"experience_level\": \"<string>\",\n \"employment_type\": \"<string>\",\n \"salary\": {\n \"min\": 123,\n \"max\": 123,\n \"currency\": \"<string>\",\n \"period\": \"<string>\"\n },\n \"assessment_config\": {\n \"auto_generate\": true,\n \"question_count\": 123,\n \"time_limit\": 123,\n \"proctoring\": true,\n \"question_types\": [\n {}\n ]\n },\n \"publish\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/jobs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"<string>\",\n \"department\": \"<string>\",\n \"location\": {\n \"type\": \"<string>\",\n \"city\": \"<string>\",\n \"state\": \"<string>\",\n \"country\": \"<string>\"\n },\n \"description\": \"<string>\",\n \"requirements\": [\n {}\n ],\n \"skills\": [\n {}\n ],\n \"experience_level\": \"<string>\",\n \"employment_type\": \"<string>\",\n \"salary\": {\n \"min\": 123,\n \"max\": 123,\n \"currency\": \"<string>\",\n \"period\": \"<string>\"\n },\n \"assessment_config\": {\n \"auto_generate\": true,\n \"question_count\": 123,\n \"time_limit\": 123,\n \"proctoring\": true,\n \"question_types\": [\n {}\n ]\n },\n \"publish\": true\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "<string>",
"title": "<string>",
"status": "<string>",
"assessment_id": "<string>",
"application_url": "<string>",
"created_at": "<string>",
"updated_at": "<string>"
},
"meta": {
"request_id": "<string>",
"assessment_generation_time": 123
}
}Create Job
Create a new job posting with AI-powered assessments
POST
/
api
/
v1
/
jobs
Create Job
curl --request POST \
--url https://api.example.com/api/v1/jobs \
--header 'Content-Type: application/json' \
--data '
{
"title": "<string>",
"department": "<string>",
"location": {
"type": "<string>",
"city": "<string>",
"state": "<string>",
"country": "<string>"
},
"description": "<string>",
"requirements": [
{}
],
"skills": [
{}
],
"experience_level": "<string>",
"employment_type": "<string>",
"salary": {
"min": 123,
"max": 123,
"currency": "<string>",
"period": "<string>"
},
"assessment_config": {
"auto_generate": true,
"question_count": 123,
"time_limit": 123,
"proctoring": true,
"question_types": [
{}
]
},
"publish": true
}
'import requests
url = "https://api.example.com/api/v1/jobs"
payload = {
"title": "<string>",
"department": "<string>",
"location": {
"type": "<string>",
"city": "<string>",
"state": "<string>",
"country": "<string>"
},
"description": "<string>",
"requirements": [{}],
"skills": [{}],
"experience_level": "<string>",
"employment_type": "<string>",
"salary": {
"min": 123,
"max": 123,
"currency": "<string>",
"period": "<string>"
},
"assessment_config": {
"auto_generate": True,
"question_count": 123,
"time_limit": 123,
"proctoring": True,
"question_types": [{}]
},
"publish": True
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
title: '<string>',
department: '<string>',
location: {type: '<string>', city: '<string>', state: '<string>', country: '<string>'},
description: '<string>',
requirements: [{}],
skills: [{}],
experience_level: '<string>',
employment_type: '<string>',
salary: {min: 123, max: 123, currency: '<string>', period: '<string>'},
assessment_config: {
auto_generate: true,
question_count: 123,
time_limit: 123,
proctoring: true,
question_types: [{}]
},
publish: true
})
};
fetch('https://api.example.com/api/v1/jobs', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/api/v1/jobs",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'title' => '<string>',
'department' => '<string>',
'location' => [
'type' => '<string>',
'city' => '<string>',
'state' => '<string>',
'country' => '<string>'
],
'description' => '<string>',
'requirements' => [
[
]
],
'skills' => [
[
]
],
'experience_level' => '<string>',
'employment_type' => '<string>',
'salary' => [
'min' => 123,
'max' => 123,
'currency' => '<string>',
'period' => '<string>'
],
'assessment_config' => [
'auto_generate' => true,
'question_count' => 123,
'time_limit' => 123,
'proctoring' => true,
'question_types' => [
[
]
]
],
'publish' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/api/v1/jobs"
payload := strings.NewReader("{\n \"title\": \"<string>\",\n \"department\": \"<string>\",\n \"location\": {\n \"type\": \"<string>\",\n \"city\": \"<string>\",\n \"state\": \"<string>\",\n \"country\": \"<string>\"\n },\n \"description\": \"<string>\",\n \"requirements\": [\n {}\n ],\n \"skills\": [\n {}\n ],\n \"experience_level\": \"<string>\",\n \"employment_type\": \"<string>\",\n \"salary\": {\n \"min\": 123,\n \"max\": 123,\n \"currency\": \"<string>\",\n \"period\": \"<string>\"\n },\n \"assessment_config\": {\n \"auto_generate\": true,\n \"question_count\": 123,\n \"time_limit\": 123,\n \"proctoring\": true,\n \"question_types\": [\n {}\n ]\n },\n \"publish\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/api/v1/jobs")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"<string>\",\n \"department\": \"<string>\",\n \"location\": {\n \"type\": \"<string>\",\n \"city\": \"<string>\",\n \"state\": \"<string>\",\n \"country\": \"<string>\"\n },\n \"description\": \"<string>\",\n \"requirements\": [\n {}\n ],\n \"skills\": [\n {}\n ],\n \"experience_level\": \"<string>\",\n \"employment_type\": \"<string>\",\n \"salary\": {\n \"min\": 123,\n \"max\": 123,\n \"currency\": \"<string>\",\n \"period\": \"<string>\"\n },\n \"assessment_config\": {\n \"auto_generate\": true,\n \"question_count\": 123,\n \"time_limit\": 123,\n \"proctoring\": true,\n \"question_types\": [\n {}\n ]\n },\n \"publish\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/jobs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"<string>\",\n \"department\": \"<string>\",\n \"location\": {\n \"type\": \"<string>\",\n \"city\": \"<string>\",\n \"state\": \"<string>\",\n \"country\": \"<string>\"\n },\n \"description\": \"<string>\",\n \"requirements\": [\n {}\n ],\n \"skills\": [\n {}\n ],\n \"experience_level\": \"<string>\",\n \"employment_type\": \"<string>\",\n \"salary\": {\n \"min\": 123,\n \"max\": 123,\n \"currency\": \"<string>\",\n \"period\": \"<string>\"\n },\n \"assessment_config\": {\n \"auto_generate\": true,\n \"question_count\": 123,\n \"time_limit\": 123,\n \"proctoring\": true,\n \"question_types\": [\n {}\n ]\n },\n \"publish\": true\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "<string>",
"title": "<string>",
"status": "<string>",
"assessment_id": "<string>",
"application_url": "<string>",
"created_at": "<string>",
"updated_at": "<string>"
},
"meta": {
"request_id": "<string>",
"assessment_generation_time": 123
}
}Overview
Create a new job posting that automatically generates AI-powered assessments. Jobs created via API have the same features as those created in the dashboard.Request
string
required
Job title (e.g., “Senior Software Engineer”)
string
Department name (e.g., “Engineering”, “Sales”, “Marketing”)
object
string
required
Full job description (supports Markdown)
array
List of job requirements
array
Required skills for the position
string
Experience level:
entry, mid, senior, lead, or executivestring
Employment type:
full_time, part_time, contract, or internshipobject
object
Assessment configuration
boolean
default:"false"
Publish immediately after creation
Response
object
object
Examples
curl -X POST https://api.hirepanda.com/api/v1/jobs \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Senior Software Engineer",
"department": "Engineering",
"location": {
"type": "remote",
"country": "US"
},
"description": "We are looking for a Senior Software Engineer...",
"requirements": [
"5+ years of experience",
"Strong JavaScript skills",
"React expertise"
],
"skills": ["JavaScript", "React", "Node.js", "TypeScript"],
"experience_level": "senior",
"employment_type": "full_time",
"salary": {
"min": 120000,
"max": 180000,
"currency": "USD",
"period": "yearly"
},
"assessment_config": {
"auto_generate": true,
"question_count": 10,
"time_limit": 300,
"question_types": ["ranksort", "multiple_choice"]
},
"publish": true
}'
const response = await fetch('https://api.hirepanda.com/api/v1/jobs', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
title: 'Senior Software Engineer',
department: 'Engineering',
location: {
type: 'remote',
country: 'US'
},
description: 'We are looking for a Senior Software Engineer...',
requirements: [
'5+ years of experience',
'Strong JavaScript skills',
'React expertise'
],
skills: ['JavaScript', 'React', 'Node.js', 'TypeScript'],
experience_level: 'senior',
employment_type: 'full_time',
salary: {
min: 120000,
max: 180000,
currency: 'USD',
period: 'yearly'
},
assessment_config: {
auto_generate: true,
question_count: 10,
time_limit: 300,
question_types: ['ranksort', 'multiple_choice']
},
publish: true
})
});
const job = await response.json();
import requests
response = requests.post(
'https://api.hirepanda.com/api/v1/jobs',
headers={
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
json={
'title': 'Senior Software Engineer',
'department': 'Engineering',
'location': {
'type': 'remote',
'country': 'US'
},
'description': 'We are looking for a Senior Software Engineer...',
'requirements': [
'5+ years of experience',
'Strong JavaScript skills',
'React expertise'
],
'skills': ['JavaScript', 'React', 'Node.js', 'TypeScript'],
'experience_level': 'senior',
'employment_type': 'full_time',
'salary': {
'min': 120000,
'max': 180000,
'currency': 'USD',
'period': 'yearly'
},
'assessment_config': {
'auto_generate': True,
'question_count': 10,
'time_limit': 300,
'question_types': ['ranksort', 'multiple_choice']
},
'publish': True
}
)
job = response.json()
Response Example
{
"data": {
"id": "job_abc123",
"title": "Senior Software Engineer",
"department": "Engineering",
"location": {
"type": "remote",
"country": "US"
},
"status": "active",
"assessment_id": "asmt_xyz789",
"application_url": "https://apply.hirepanda.com/abc123",
"candidate_count": 0,
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T10:30:00Z"
},
"meta": {
"request_id": "req_def456",
"assessment_generation_time": 4523
}
}
Error Responses
400 Bad Request
400 Bad Request
{
"error": {
"code": "validation_error",
"message": "Invalid request parameters",
"details": {
"title": "Title is required",
"description": "Description must be at least 100 characters"
}
}
}
401 Unauthorized
401 Unauthorized
{
"error": {
"code": "unauthorized",
"message": "Invalid or missing API key"
}
}
429 Rate Limited
429 Rate Limited
{
"error": {
"code": "rate_limited",
"message": "Too many requests",
"retry_after": 3600
}
}
Webhooks
After creating a job, you can receive webhooks for:job.created- Job successfully createdassessment.generated- AI assessment readyapplication.received- New candidate appliedassessment.completed- Candidate finished assessment
Next Steps
List Jobs
Retrieve all your jobs
Update Job
Modify job details
Get Candidates
View job applicants
Job Analytics
Track job performance
⌘I