Legacy API (v1) — Public API Documentation
Overview
The HeyMilo API provides programmatic access to the HeyMilo recruitment and interview platform, empowering developers to seamlessly integrate with our AI-powered hiring system. With this API, you can:- Retrieve and manage candidate information
- Oversee and update job postings
- Set up webhooks for real-time event notifications
- Access detailed interview data and transcripts
- Ingest candidate data for processing
Base URL
All API endpoints use the following base URL:Authentication
Important: All API requests require authentication using theX-API-KEY header.
Rate Limiting
The API implements rate limiting to ensure fair usage:- Default Rate Limit: 300 requests per minute per API key
- Rate limit headers are included in responses to help you track usage
- If you exceed the rate limit, you’ll receive a 429 Too Many Requests response
Response Codes
The API uses standard HTTP status codes:200- Success401- Unauthorized (missing or invalid API key)404- Not Found422- Validation Error429- Too Many Requests (rate limit exceeded)500- Internal Server Error
API Endpoints
1. Health Check
GET/health
Check the health status of the API Gateway.
Response
Response Schema
2. Get Job Postings
GET/postings
Retrieve job postings with pagination support.
Query Parameters
Example Request
Response
Response Schema
Posting Object Schema:
Root Level Configs Schema:
Agentic Workflow Configs Schema:
3. Get Interview Details by Interview ID
GET/interview/{interview_id}
Retrieve detailed information about a specific interview, including candidate details, scores, and recordings.
Path Parameters
Example Request
Response
4. Get Interviews by Posting
GET/interviews/{posting_id}?page=1&limit=10
Retrieve a paginated list of candidate interviews for a job posting. Optionally
filter by the date the candidate was invited to the posting using start_date
and/or end_date, or fetch only what changed with updated_after (see
Syncing changes).
Path Parameters
Query Parameters
Example Request
Response Schema
Candidate Object Schema
Selected
details fields
Response
Syncing changes with updated_after
Keep a copy up to date without re-downloading every candidate.
-
First sync: page through the posting without
updated_afterand store each candidate byinterview_id. -
Later syncs (e.g. hourly): start 5 minutes before the newest
details.updated_atyou stored, to catch changes still being saved: -
Repeat with
cursoruntilnext_cursorisnull: -
Upsert by
interview_id; overlapping syncs can return a candidate twice.
updated_after or cursor, total / total_pages cover the current
response only. To also filter by start_date / end_date, send them on every
request.
Recruiter actions (status changes, shortlisting) don’t change
updated_at,
and deleted candidates just stop appearing. Run a periodic full sync to detect
deletions.5. Export Interviews
GETinterviews/export/json
Retrieve JSON file of interviews
Path Parameters
Example Request
Response Schema
Response
6. Create Webhook
POST/create
Create a new webhook configuration to receive real-time notifications about interview events.
Request Body
Example Request
Response
Request Schema
7. Get Webhook
GET/fetch/{webhook_id}
Retrieve a webhook configuration by its ID.
Path Parameters
Example Request
Response
8. Get All Webhooks
GET/all
Retrieve webhooks with optional filters.
Query Parameters
9. Deactivate Webhook
POST/deactivate/{webhook_id}
Deactivate a webhook.
Path Parameters
10. Ingest Single Candidate
POST/ingest/x/{url_key}
Ingest a single candidate into the system using a posting-specific url_key.
Spectial Note
retake: false(default) - Returns existing interview if candidate already has one for this postingretake: true- Always creates a new interview, even if candidate already has one
Path Parameters
Example Request
Response Schema
Each interview details:
Response
11. Bulk Ingest Candidates
POST/ingest/x/bulk/{url_key}
Ingest multiple candidates into the system in a single request, using a posting-specific url_key.
Spectial Note
retake: false(default) - Returns existing interview if candidate already has one for this postingretake: true- Always creates a new interview, even if candidate already has one
Path Parameters
Example Request
Response Schema
Each interview details:
Response
Webhook Event Types
The API supports the following webhook event types:Error Handling
All API endpoints return structured error responses:Support
For API support and questions:- Email: support@heymilo.ai
- Documentation: https://docs.heymilo.cloud
- Status Page: https://status.heymilo.ai
Last updated: Jun 17, 2026