Create and manage job descriptions programmatically.
Create a new job description.
POST /api/v1/jobs
Headers:
Authorization: Bearer rz_live_...
Content-Type: application/json
Body:
{
"title": "Senior Frontend Developer",
"department": "Engineering",
"location": "Remote",
"description": "We are looking for an experienced Frontend Developer to join our team...",
"requirements": "5+ years of experience with React, TypeScript, and modern web technologies...",
"interview_goals": {
"goals": [
{ "category": "technical_competency", "priority": "high" },
{ "category": "problem_solving", "priority": "high" },
{ "category": "communication", "priority": "medium" }
],
"customGoals": ["Experience with React performance optimization"],
"additionalContext": "Candidate will be working on our customer-facing dashboard"
}
}
Parameters:
| Field | Type | Required | Description |
|---|---|---|---|
title | string | Yes | Job title |
department | string | No | Department or team name |
location | string | No | Job location (e.g., "Remote", "San Francisco") |
description | string | Yes | Full job description |
requirements | string | No | Job requirements and qualifications |
status | string | No | Job status: "active" (default), "draft", "archived" |
interview_goals | object | No | Interview goals configuration for AI question generation |
Interview Goals Object:
| Field | Type | Description |
|---|---|---|
goals | array | Array of goal objects with category and priority |
customGoals | array | Array of custom goal strings |
additionalContext | string | Free-form context for question generation |
Goal Categories:
technical_competency - Technical knowledge, coding ability, and tool proficiencyproblem_solving - Analytical thinking and approach to challengescommunication - Verbal and written communication skillsleadership - Leadership potential and management skillsculture_fit - Alignment with company values and team dynamicsdomain_expertise - Industry-specific knowledge and experiencecollaboration - Teamwork abilities and cross-functional experienceadaptability - Flexibility and ability to learn new thingsmotivation - Career goals and drive for the rolePriority Levels: high, medium, low
201 Created:
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"title": "Senior Frontend Developer",
"department": "Engineering",
"location": "Remote",
"description": "We are looking for...",
"requirements": "5+ years of experience...",
"status": "active",
"interview_goals": {
"goals": [
{ "category": "technical_competency", "priority": "high" },
{ "category": "problem_solving", "priority": "high" }
],
"customGoals": [],
"additionalContext": null
},
"questions_generated": true,
"question_count": 12,
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T10:30:00Z"
}
Response fields:
id: Unique job identifier (UUID)interview_goals: Interview goals configuration (if set)questions_generated: Whether interview questions have been generatedquestion_count: Number of questions generatedcreated_at: ISO 8601 timestampupdated_at: ISO 8601 timestampcurl -X POST https://rz-app-omega.vercel.app/api/v1/jobs \
-H "Authorization: Bearer rz_live_..." \
-H "Content-Type: application/json" \
-d '{
"title": "Senior Frontend Developer",
"department": "Engineering",
"location": "Remote",
"description": "We are looking for an experienced Frontend Developer...",
"requirements": "5+ years with React, TypeScript..."
}'
const response = await fetch('https://rz-app-omega.vercel.app/api/v1/jobs', {
method: 'POST',
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
title: 'Senior Frontend Developer',
department: 'Engineering',
location: 'Remote',
description: 'We are looking for an experienced Frontend Developer...',
requirements: '5+ years with React, TypeScript...'
})
});
const job = await response.json();
console.log('Job created:', job.id);
400 Bad Request - Invalid parameters:
{
"error": {
"type": "validation_error",
"message": "Validation failed",
"details": {
"title": "Title is required",
"description": "Description must be at least 50 characters"
}
}
}
401 Unauthorized - Invalid API key:
{
"error": {
"type": "authentication_error",
"message": "Invalid API key"
}
}
403 Forbidden - No Connectivity Package:
{
"error": {
"type": "permission_error",
"message": "Connectivity Package subscription required for API access"
}
}
Retrieve a list of all jobs.
GET /api/v1/jobs
Headers:
Authorization: Bearer rz_live_...
Query Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
limit | integer | 20 | Number of results (max: 100) |
cursor | string | - | Pagination cursor from previous response |
status | string | - | Filter by status: "active", "draft", "archived" |
200 OK:
{
"data": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"title": "Senior Frontend Developer",
"department": "Engineering",
"location": "Remote",
"status": "active",
"question_count": 12,
"interview_count": 5,
"created_at": "2024-01-15T10:30:00Z"
},
{
"id": "660f9511-f30c-52e5-b827-557766551111",
"title": "Product Manager",
"department": "Product",
"location": "San Francisco",
"status": "active",
"question_count": 10,
"interview_count": 3,
"created_at": "2024-01-14T15:20:00Z"
}
],
"pagination": {
"next_cursor": "eyJpZCI6IjY2MGY5NTExIn0=",
"has_more": true
}
}
# Get first page
curl https://rz-app-omega.vercel.app/api/v1/jobs?limit=20 \
-H "Authorization: Bearer rz_live_..."
# Get next page
curl https://rz-app-omega.vercel.app/api/v1/jobs?limit=20&cursor=eyJpZCI6IjY2MGY5NTExIn0= \
-H "Authorization: Bearer rz_live_..."
# Filter by status
curl https://rz-app-omega.vercel.app/api/v1/jobs?status=active \
-H "Authorization: Bearer rz_live_..."
Retrieve details for a specific job.
GET /api/v1/jobs/:id
Headers:
Authorization: Bearer rz_live_...
Path Parameters:
id: Job UUID200 OK:
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"title": "Senior Frontend Developer",
"department": "Engineering",
"location": "Remote",
"description": "We are looking for an experienced Frontend Developer to join our team...",
"requirements": "5+ years of experience with React, TypeScript, and modern web technologies...",
"status": "active",
"questions": [
{
"id": "770g0622-g41d-63f6-c938-668877662222",
"question_text": "Describe your experience with React hooks and when you would use them.",
"question_type": "technical",
"time_limit_seconds": 180,
"order": 0
},
{
"id": "880h1733-h52e-74g7-d049-779988773333",
"question_text": "Tell me about a time when you had to optimize a slow-performing web application.",
"question_type": "experience",
"time_limit_seconds": 180,
"order": 1
}
],
"question_count": 12,
"interview_count": 5,
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T10:30:00Z"
}
curl https://rz-app-omega.vercel.app/api/v1/jobs/550e8400-e29b-41d4-a716-446655440000 \
-H "Authorization: Bearer rz_live_..."
404 Not Found - Job doesn't exist:
{
"error": {
"type": "resource_not_found",
"message": "Job not found"
}
}
For better AI-generated questions:
Example of a good description:
{
"title": "Senior Backend Engineer - Payments",
"department": "Engineering",
"description": "Join our payments team to build and scale our transaction processing infrastructure. You'll work on high-throughput systems processing millions of transactions daily, collaborate with product and design teams, and mentor junior engineers.",
"requirements": "5+ years backend development with Python or Go. Experience with PostgreSQL, Redis, message queues (RabbitMQ/Kafka). Familiarity with payment processing, PCI compliance, and distributed systems. Strong API design skills."
}
Instead of creating duplicate jobs:
Workflow example:
// When job is posted in your ATS
async function onJobPosted(atsJob) {
// Create job in ROUND0
const job = await createROUND0Job({
title: atsJob.title,
department: atsJob.department,
location: atsJob.location,
description: atsJob.description,
requirements: atsJob.requirements
});
// Store mapping in your database
await db.jobMappings.create({
ats_job_id: atsJob.id,
round0_job_id: job.id
});
return job;
}