> ## Documentation Index
> Fetch the complete documentation index at: https://docs.hirepanda.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create Job

> Create a new job posting with AI-powered assessments

## 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

<ParamField body="title" type="string" required>
  Job title (e.g., "Senior Software Engineer")
</ParamField>

<ParamField body="department" type="string">
  Department name (e.g., "Engineering", "Sales", "Marketing")
</ParamField>

<ParamField body="location" type="object">
  Job location details

  <Expandable title="Location Object">
    <ParamField body="type" type="string" required>
      Location type: `remote`, `hybrid`, or `onsite`
    </ParamField>

    <ParamField body="city" type="string">
      City name (required for onsite/hybrid)
    </ParamField>

    <ParamField body="state" type="string">
      State/Province (required for onsite/hybrid)
    </ParamField>

    <ParamField body="country" type="string">
      Country code (ISO 3166-1 alpha-2)
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="description" type="string" required>
  Full job description (supports Markdown)
</ParamField>

<ParamField body="requirements" type="array">
  List of job requirements
</ParamField>

<ParamField body="skills" type="array">
  Required skills for the position
</ParamField>

<ParamField body="experience_level" type="string">
  Experience level: `entry`, `mid`, `senior`, `lead`, or `executive`
</ParamField>

<ParamField body="employment_type" type="string">
  Employment type: `full_time`, `part_time`, `contract`, or `internship`
</ParamField>

<ParamField body="salary" type="object">
  Salary information

  <Expandable title="Salary Object">
    <ParamField body="min" type="number">
      Minimum salary
    </ParamField>

    <ParamField body="max" type="number">
      Maximum salary
    </ParamField>

    <ParamField body="currency" type="string">
      Currency code (e.g., "USD", "EUR")
    </ParamField>

    <ParamField body="period" type="string">
      Pay period: `hourly`, `monthly`, or `yearly`
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="assessment_config" type="object">
  Assessment configuration

  <Expandable title="Assessment Config">
    <ParamField body="auto_generate" type="boolean" default="true">
      Automatically generate assessment questions
    </ParamField>

    <ParamField body="question_count" type="number" default="10">
      Number of questions (5-20)
    </ParamField>

    <ParamField body="time_limit" type="number" default="300">
      Time limit in seconds (300-1800)
    </ParamField>

    <ParamField body="proctoring" type="boolean" default="false">
      Enable anti-cheating proctoring
    </ParamField>

    <ParamField body="question_types" type="array">
      Types of questions: `ranksort`, `multiple_choice`, `scenario`
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="publish" type="boolean" default="false">
  Publish immediately after creation
</ParamField>

## Response

<ResponseField name="data" type="object">
  The created job object

  <Expandable title="Job Object">
    <ResponseField name="id" type="string">
      Unique job identifier
    </ResponseField>

    <ResponseField name="title" type="string">
      Job title
    </ResponseField>

    <ResponseField name="status" type="string">
      Job status: `draft`, `active`, `paused`, or `closed`
    </ResponseField>

    <ResponseField name="assessment_id" type="string">
      Associated assessment ID
    </ResponseField>

    <ResponseField name="application_url" type="string">
      Public URL for candidates to apply
    </ResponseField>

    <ResponseField name="created_at" type="string">
      ISO 8601 timestamp
    </ResponseField>

    <ResponseField name="updated_at" type="string">
      ISO 8601 timestamp
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="meta" type="object">
  Response metadata

  <Expandable title="Meta Object">
    <ResponseField name="request_id" type="string">
      Unique request identifier for debugging
    </ResponseField>

    <ResponseField name="assessment_generation_time" type="number">
      Time taken to generate assessment (ms)
    </ResponseField>
  </Expandable>
</ResponseField>

## Examples

<CodeGroup>
  ```bash cURL theme={null}
  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
    }'
  ```

  ```javascript Node.js theme={null}
  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();
  ```

  ```python Python theme={null}
  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()
  ```
</CodeGroup>

## Response Example

```json theme={null}
{
  "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

<AccordionGroup>
  <Accordion title="400 Bad Request">
    ```json theme={null}
    {
      "error": {
        "code": "validation_error",
        "message": "Invalid request parameters",
        "details": {
          "title": "Title is required",
          "description": "Description must be at least 100 characters"
        }
      }
    }
    ```
  </Accordion>

  <Accordion title="401 Unauthorized">
    ```json theme={null}
    {
      "error": {
        "code": "unauthorized",
        "message": "Invalid or missing API key"
      }
    }
    ```
  </Accordion>

  <Accordion title="429 Rate Limited">
    ```json theme={null}
    {
      "error": {
        "code": "rate_limited",
        "message": "Too many requests",
        "retry_after": 3600
      }
    }
    ```
  </Accordion>
</AccordionGroup>

## Webhooks

After creating a job, you can receive webhooks for:

* `job.created` - Job successfully created
* `assessment.generated` - AI assessment ready
* `application.received` - New candidate applied
* `assessment.completed` - Candidate finished assessment

[Configure webhooks →](/api-reference/webhooks/overview)

## Next Steps

<CardGroup cols={2}>
  <Card title="List Jobs" icon="list" href="/api-reference/jobs/list">
    Retrieve all your jobs
  </Card>

  <Card title="Update Job" icon="pen" href="/api-reference/jobs/update">
    Modify job details
  </Card>

  <Card title="Get Candidates" icon="users" href="/api-reference/candidates/list">
    View job applicants
  </Card>

  <Card title="Job Analytics" icon="chart-line" href="/api-reference/analytics/job-analytics">
    Track job performance
  </Card>
</CardGroup>
