# Authentication
Source: https://ai-recruiter.micro1.ai/api-reference/getting-started/authentication

Use the micro1 dashboard to get your API key.

### Using the API Key

Once you have generated your API key, you need to include it in the header of each API request. The API key is passed in the header using the following format:

```bash theme={null}
x-api-key: YOUR_API_KEY
```

**Example Request**

Here is an example of how to include the API key in a cURL request:

```Bash theme={null}
curl -X GET https://public.api.micro1.ai/interview \
-H "x-api-key: YOUR_API_KEY"
```

**Header Details**

* Header Name: x-api-key

* Header Value: YOUR\_API\_KEY
  Replace YOUR\_API\_KEY with the actual API key you generated from the client portal.

**Error Handling**

If your API key is missing, invalid, or expired, the API will respond with an error. Below are common HTTP status codes related to authentication:

* **401 Unauthorized**: The request was made without a valid API key or the key was incorrect.

* **403 Forbidden**: The API key does not have the necessary permissions to access the requested resource.

**Example Error Response**

```JSON theme={null}
{
  "status": false,
  "message": "Unauthorized: API key is missing or invalid."
}
```


# Introduction
Source: https://ai-recruiter.micro1.ai/api-reference/getting-started/introduction

micro1's AI Recruiter API allows you to generate custom conversational interviews based on the skills you’d like to test. You call the API with the skills & more details about the role you’re hiring for, receive an interview link, and invite candidates.

The candidate then goes through a conversational interview and a coding exercise (if they're an engineer). After they finish, you will receive reports on how they did. The report will include an AI rating per skill, a description of that rating, soft skills rating, proctoring score, and more.

Use our AI Recruiter to interview 100x more candidates at 1/10th the cost per interview.

Any questions? reach us at [support@micro1.ai](mailto:support@micro1.ai), we'll respond within 6 hours max.

## Base URL

```bash theme={null}
https://public.api.micro1.ai
```


# Event types
Source: https://ai-recruiter.micro1.ai/api-reference/getting-started/webhooks/examples

List of supported event types and their payload.

### `interview.started`

Occurs whenever an **interview is started**.

<Accordion title="Sample Request Body">
  ```json theme={null}
  {
    "event": "interview.started",
    "data": {
      "candidate_id": "123a4567-e89b-12d3-a456-426614174000",
      "candidate_name": "John Doe",
      "candidate_email_id": "john.doe@micro1.ai",
      "job_id": "123b4567-e89b-12d3-a456-426614174000",
      "job_name": "Backend Developer",
      "ats_job_id": "JOB123TEST",
      "ats_job_application_id": null,
      "interview_id": "123c4567-e89b-12d3-a456-426614174000",
      "interview_name": "Backend Developer Interview",
      "date_started": "2024-01-01 10:00:00"
    }
  }
  ```
</Accordion>

### `interview_report.created`

Occurs whenever an **interview report is successfully generated**.

<Accordion title="Sample Request Body">
  ```json theme={null}
  {
    "event": "interview_report.created",
    "data": {
      "report_id": "h0gqkAcaDJ",
      "interview_id": "123e4567-e89b-12d3-a456-426614174000",
      "session_id": "123e4567-e89b-12d3-a456-426614174000",
      "interview_name": "Full Stack Engineer Interview",
      "candidate_id": "123e4567-e89b-12d3-a456-426614174000",
      "job_applicant_id": "123e4567-e89b-12d3-a456-426614174000",
      "ats_job_application_id": "ABCD1234",
      "ats_job_id": "ABCD1234",
      "candidate_name": "John Doe",
      "candidate_email_id": "john.doe@micro1.ai",
      "report_date": "2024-01-01",
      "report_url": "https://micro1.ai/report/h0gqkAcaDJ.pdf",
      "interview_recording_url": "https://micro1.ai/interview/h0gqkAcaDJ.m3u8",
      "proctoring_score": 85,
      "ai_match_score": 85,
      "proctoring_violations": [
        {
          "type": "tab_switch",
          "value": "3",
          "description": "3 tab switches detected, indicating multitasking or external searches."
        }
      ],
      "interview_transcript": [
        {
          "timestamp": 100,
          "role": "interviewer",
          "content": "Can you tell me about yourself?"
        }
      ],
      "technical_skills_evaluation": [
        {
          "skill": "React.js",
          "ai_evaluation": {
            "feedback": "Candidate has demonstrated a solid understanding of optimizing FastAPI performance.",
            "rating": "Senior"
          },
          "timestamp": 100
        }
      ],
      "soft_skills_evaluation": [
        {
          "skill": "Overall",
          "ai_evaluation": {
            "feedback": "Candidate demonstrated clear and organized thoughts throughout the interview, effectively addressing each question with relevant examples and explanations",
            "rating": "B1",
            "sub_score": {
              "vocabulary": "Candidate demonstrated a good vocabulary.",
              "grammar": "Candidate demonstrated a good grammar.",
              "critical_thinking": "Candidate demonstrated a good critical thinking."
            }
          }
        }
      ],
      "coding_skills_evaluation": {
        "feedback": "The candidate has demonstrated a good understanding of the problem",
        "rating": "Senior"
      },
      "custom_exercise_evaluation": {
        "feedback": "The candidate displayed a strong grasp of the custom exercise requirements and solved the problem effectively.",
        "rating": "Senior"
      },
      "custom_question_evaluation": [
        {
          "question_text": "Are you willing to relocate?",
          "answer_text": "Yes, I am willing to relocate",
          "ai_evaluation": {
            "feedback": "Candidate is willing to relocate with a 20% chance",
            "rating": "Great Answer"
          }
        }
      ],
      "date_created": "2021-01-01 00:00:00",
      "date_modified": "2021-01-01 00:00:00",
      "status": "active"
    }
  }
  ```
</Accordion>

### `interview_recording.completed`

Occurs whenever the **interview recording is successfully processed and available**.

<Accordion title="Sample Request Body">
  ```json theme={null}
  {
    "event": "interview_recording.completed",
    "data": {
      "report_id": "ABCD1234",
      "candidate_id": "123e4567-e89b-12d3-a456-426614174000",
      "interview_recording_url": "https://url_to_interview_recording.m3u8",
      "interview_recording_player_url": "https://zara.micro1.ai/ai-interview-videos/ABCDXYZ"
    }
  }
  ```
</Accordion>

### `interview_webcam_recording.completed`

Occurs whenever the **interview webcam recording is successfully processed and available**.

<Accordion title="Sample Request Body">
  ```json theme={null}
  {
    "event": "interview_webcam_recording.completed",
    "data": {
      "report_id": "ABCD1234",
      "candidate_id": "123e4567-e89b-12d3-a456-426614174000",
      "interview_webcam_recording_url": "https://url_to_interview_webcam_recording.m3u8",
      "interview_webcam_recording_player_url": "https://zara.micro1.ai/ai-interview-videos/ABCDXYZ"
    }
  }
  ```
</Accordion>

### `proctoring_score.completed`

Occurs whenever the **proctoring score is successfully calculated**.

<Accordion title="Sample Request Body">
  ```json theme={null}
  {
    "event": "proctoring_score.completed",
    "data": {
      "report_id": "ABCD1234",
      "candidate_id": "123e4567-e89b-12d3-a456-426614174000",
      "proctoring_score": 85
    }
  }
  ```
</Accordion>

### `applicant.created`

Occurs whenever the **a new applicant is created**.

<Accordion title="Sample Request Body">
  ```json theme={null}
  {
    "event": "applicant.created",
    "data": {
      "resume_score": "99.99",
      "ats_job_application_id": "TEST123",
      "ats_job_id": "TESTJOBID456",
      "micro1_job_id": "123a4567-e89b-12d3-a456-426614174000",
      "email_id": "john.doe@test.com",
      "micro1_job_application_id": "123b4567-e89b-12d3-a456-426614174000",
      "candidate_id": "123c4567-e89b-12d3-a456-426614174000",
      "candidate_name": "John Doe",
      "job_name": "Test Engineer",
      "stage": "Test Stage",
      "date_created": "2099-12-31 23:55:00",
      "date_modified": "2100-01-01 00:00:00",
      "resume_url": "https://example.com/john-doe-resume.pdf"
    }
  }
  ```
</Accordion>

### `applicant.invited`

Occurs whenever the **an applicant is invited to an interview**.

<Accordion title="Sample Request Body">
  ```json theme={null}
  {
    "event": "applicant.invited",
    "data": {
      "resume_score": "99.99",
      "ats_job_application_id": "TEST123",
      "ats_job_id": "TESTJOBID456",
      "micro1_job_id": "123a4567-e89b-12d3-a456-426614174000",
      "email_id": "john.doe@test.com",
      "micro1_job_application_id": "123b4567-e89b-12d3-a456-426614174000",
      "candidate_id": "123c4567-e89b-12d3-a456-426614174000",
      "candidate_name": "John Doe",
      "job_name": "Test Engineer",
      "stage": "Test Stage",
      "date_created": "2099-12-31 23:55:00",
      "date_modified": "2100-01-01 00:00:00",
      "resume_url": "https://example.com/john-doe-resume.pdf"
    }
  }
  ```
</Accordion>

### `applicant.updated`

Occurs whenever the **an applicant is updated**.

<Accordion title="Sample Request Body">
  ```json theme={null}
  {
    "event": "applicant.updated",
    "data": {
      "resume_score": "99.99",
      "ats_job_application_id": "TEST123",
      "ats_job_id": "TESTJOBID456",
      "micro1_job_id": "123a4567-e89b-12d3-a456-426614174000",
      "email_id": "john.doe@test.com",
      "micro1_job_application_id": "123b4567-e89b-12d3-a456-426614174000",
      "candidate_id": "123c4567-e89b-12d3-a456-426614174000",
      "candidate_name": "John Doe",
      "job_name": "Test Engineer",
      "stage": "Test Stage",
      "date_created": "2099-12-31 23:55:00",
      "date_modified": "2100-01-01 00:00:00",
      "resume_url": "https://example.com/john-doe-resume.pdf"
    }
  }
  ```
</Accordion>

### `applicant.completed`

Occurs whenever the **applicant's resume is successfully processed and resume score is generated**.

<Accordion title="Sample Request Body">
  ```json theme={null}
  {
    "event": "applicant.completed",
    "data": {
      "resume_score": "99.99",
      "ats_job_application_id": "TEST123",
      "ats_job_id": "TESTJOBID456",
      "micro1_job_id": "123a4567-e89b-12d3-a456-426614174000",
      "email_id": "john.doe@test.com",
      "micro1_job_application_id": "123b4567-e89b-12d3-a456-426614174000",
      "candidate_id": "123c4567-e89b-12d3-a456-426614174000",
      "candidate_name": "John Doe",
      "job_name": "Test Engineer",
      "stage": "Test Stage",
      "date_created": "2099-12-31 23:55:00",
      "date_modified": "2100-01-01 00:00:00",
      "resume_url": "https://example.com/john-doe-resume.pdf"
    }
  }
  ```
</Accordion>


# Introduction
Source: https://ai-recruiter.micro1.ai/api-reference/getting-started/webhooks/introductions

Webhooks allow you to receive real-time notifications when specific events occur in your micro1 account. This enables you to automatically trigger actions in your systems based on these events.

## Webhook Structure

All webhook payloads follow this general structure:

```json theme={null}
{
  "event": "event.type",
  "data": {
    // Event-specific data
  }
}
```

## Common Fields

| Field   | Type   | Description                                            |
| ------- | ------ | ------------------------------------------------------ |
| `event` | string | The type of event that triggered the webhook           |
| `data`  | object | Event-specific payload containing relevant information |

## Available Events

Here are the events you can subscribe to:

### Interview Events

* `interview_report.created` - Triggered when a new interview report is created
* `interview_recording.completed` - Triggered when an interview recording is completed
* `interview_webcam_recording.completed` - Triggered when an interview webcam recording is completed
* `proctoring_score.completed` - Triggered when a proctoring score is calculated
* `applicant.created` - Triggered when a new applicant is created
* `applicant.updated` - Triggered when an applicant is updated
* `applicant.invited` - Triggered when an applicant is invited
* `interview.started` - Triggered when an interview is started
* `applicant.completed` - Triggered when an applicant's resume score is generated
* `interview.completed` - Triggered when an interview is completed (same as `interview_recording.completed`)


# Get all completed reports
Source: https://ai-recruiter.micro1.ai/api-reference/interview-reports/get-all-completed-reports

/openapi.json get /interview/reports
This endpoint retrieves reports for candidates who have completed their AI interviews. You can filter the reports by Interview ID, Candidate ID or Report ID.



# Get interview recording
Source: https://ai-recruiter.micro1.ai/api-reference/interview-reports/get-interview-recording

/openapi.json get /interview/recording
Returns interview recording data for a completed report. Requires report_id; resolves session from your account and proxies the internal recording service response, including any Set-Cookie headers from that service.



# Create a new interview
Source: https://ai-recruiter.micro1.ai/api-reference/interview/create-a-new-interview

/openapi.json post /interview
This endpoint creates a new interview, returns a unique interview ID and a corresponding interview URL. You can send this URL to candidates, add it to a job post or alternatively, use the invite candidate endpoint to send invitations for the interview.



# Create a new interview (custom questions)
Source: https://ai-recruiter.micro1.ai/api-reference/interview/create-a-new-interview-custom-questions

/openapi.json post /custom/interview
This endpoint creates a new interview with only custom questions, returns a unique interview ID and a corresponding interview URL. You can send this URL to candidates, add it to a job post or alternatively, use the invite candidate endpoint to send invitations for the interview.



# Delete an interview
Source: https://ai-recruiter.micro1.ai/api-reference/interview/delete-an-interview

/openapi.json delete /interview/{interviewId}
This endpoint deletes an existing interview by ID.



# Get all saved interviews
Source: https://ai-recruiter.micro1.ai/api-reference/interview/get-all-saved-interviews

/openapi.json get /interviews
This endpoint fetches all interviews that have been previously created and saved, such as interviews for specific roles like Full Stack Engineer or LLM Engineer.



# Preview Questions
Source: https://ai-recruiter.micro1.ai/api-reference/interview/preview-questions

/openapi.json post /mock/interview
This endpoint retrieves a sample interview question based on the provided skills and their descriptions. It helps you understand the type of questions tailored by AI interviews based on the skills provided.



# Update an interview
Source: https://ai-recruiter.micro1.ai/api-reference/interview/update-an-interview

/openapi.json put /interview/{interviewId}
This endpoint updates an existing interview by ID.



# Get all invited candidates
Source: https://ai-recruiter.micro1.ai/api-reference/invite-candidate/get-all-invited-candidates

/openapi.json get /interview/invites
This endpoint retrieves all sent invites. You can search for a specific candidate, keyword or interview.



# Invite candidates to an interview
Source: https://ai-recruiter.micro1.ai/api-reference/invite-candidate/invite-candidates-to-an-interview

/openapi.json post /interview/invite
This endpoint emails candidates to take the interview, returns the candidate ID, and interview URL. The candidates will then take the interview on our platform before you can receive the report data.



# Create a job applicant
Source: https://ai-recruiter.micro1.ai/api-reference/job-applicant/create-a-job-applicant

/openapi.json post /job/{jobId}/applicant
Create a job applicant for a specific job via this endpoint.



# Get all job applicants
Source: https://ai-recruiter.micro1.ai/api-reference/job-applicant/get-all-job-applicants

/openapi.json get /job/{jobId}/applicants
Retrieve all job applicants for a specific job via this endpoint.



# Get Job Applicant Details
Source: https://ai-recruiter.micro1.ai/api-reference/job-applicant/get-job-applicant-details

/openapi.json get /job/applicant/{jobApplicantId}
Retrieve job applicant details via this endpoint.



# Get all jobs
Source: https://ai-recruiter.micro1.ai/api-reference/job/get-all-jobs

/openapi.json get /jobs
Retrieve all jobs via this endpoint.



# Create a webhook
Source: https://ai-recruiter.micro1.ai/api-reference/webhook/create-a-webhook

/openapi.json post /webhook
This endpoint sets up a webhook for the AI Recruiter. It allows you to receive notifications, such as interview results, when a candidate completes the interview and the report is generated.



# Delete a webhook
Source: https://ai-recruiter.micro1.ai/api-reference/webhook/delete-a-webhook

/openapi.json delete /webhook/{webhookId}
This endpoint deletes a webhook by ID.



# Get all webhooks
Source: https://ai-recruiter.micro1.ai/api-reference/webhook/get-all-webhooks

/openapi.json get /webhooks
This endpoint fetches all configured webhooks.



# Update a webhook
Source: https://ai-recruiter.micro1.ai/api-reference/webhook/update-a-webhook

/openapi.json put /webhook/{webhookId}
This endpoint updates a webhook by ID.