Using Dover's External API
Dover's External API allows you to programmatically add candidates to your jobs and integrate Dover with your existing tools and workflows. This guide will walk you through setting up and using the API.
Getting Started
To get started, get your unique API key, authenticate it...
1. Get your API Key
⚠️ Keep your API key secure and never share it publicly. The API key has full access to add candidates to your Dover account.
1. In the Dover App, navigate to Settings & Members from the left sidebar
2. Click on API Key
3. Click Reveal to view your API key
4. Copy the key - you'll need this for authentication
2. Authenticate your API key
All API requests must include your API key in the Authorization header:
bash Authorization: Bearer YOUR_API_KEY
3. Available Endpoints
The Dover API is available at: https://app.dover.io/api/v1/external
List Jobs
GET /jobs
Returns a list of your active jobs and their hiring pipeline stages. You'll need the job ID and stage ID when adding candidates.
Example response:
{
"count": 1,
"results": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"title": "Senior Software Engineer",
"hiring_pipeline_stages": [
{
"id": "7c4f1ba4-fc87-4e04-a020-c6f8e10db559",
"name": "Initial Screen"
},
{
"id": "91c38184-6461-42c9-91e7-c366e4ee7720",
"name": "Technical Interview"
}
]
}
]
}
Add a Candidate
POST /candidates
Adds a new candidate to a specified job and stage. The request must use multipart/form-data
encoding to support resume uploads.
Required fields:
job_id
: ID of the job (from /jobs endpoint)hiring_pipeline_stage_id
: ID of the initial stagecandidate_first_name
: Candidate's first namecandidate_last_name
: Candidate's last name
Optional fields:
candidate_email
: Candidate's email addresscandidate_linkedin_url
: URL to candidate's LinkedIn profileresume
: PDF file of candidate's resumeadditional_comments
: Notes about the candidate (appears in activity feed)
Example response:
{
"success": true,
"message": "Candidate added successfully"
}
Integration Examples
cURL
bash
List jobs
curl -X GET "https://app.dover.io/api/v1/external/jobs" \
-H "Authorization: Bearer YOUR_API_KEY"
Add candidate
curl -X POST "https://app.dover.io/api/v1/external/candidates" \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "job_id=550e8400-e29b-41d4-a716-446655440000" \
-F "hiring_pipeline_stage_id=7c4f1ba4-fc87-4e04-a020-c6f8e10db559" \
-F "candidate_first_name=Jane" \
-F "candidate_last_name=Smith" \
-F "candidate_email=[email protected]" \
-F "candidate_linkedin_url=https://www.linkedin.com/in/janesmith" \
-F "resume=@/path/to/resume.pdf" \
-F "additional_comments=Strong backend experience"
Python
python
import requests
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://app.dover.io/api/v1/external"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
# List jobs
response = requests.get(f"{BASE_URL}/jobs", headers=HEADERS)
jobs = response.json()
# Add candidate
with open('resume.pdf', 'rb') as resume:
data = {
'job_id': '550e8400-e29b-41d4-a716-446655440000',
'hiring_pipeline_stage_id': '7c4f1ba4-fc87-4e04-a020-c6f8e10db559',
'candidate_first_name': 'Jane',
'candidate_last_name': 'Smith',
'candidate_email': '[email protected]',
'candidate_linkedin_url': 'https://www.linkedin.com/in/janesmith',
'additional_comments': 'Strong backend experience'
}
files = {
'resume': ('resume.pdf', resume, 'application/pdf')
}
response = requests.post(
f"{BASE_URL}/candidates",
headers=HEADERS,
data=data,
files=files
)
Using with Zapier
Dover's API can be used with Zapier to automate your hiring workflow. Common use cases include:
Automatically adding candidates from form submissions
Syncing candidates from your ATS
Adding successful candidates to your HRIS
To set up a Zap:
1. Create a new Zap in Zapier
2. For the action step, search for "Dover"
3. Select either "List Jobs" or "Add Candidate"
4. Enter your API key when prompted
5. Configure the mapping between your trigger data and Dover fields
Additional Resources
For questions about custom integrations or enterprise usage, please contact your Dover representative.