Skip to main content
Dover API
Updated over 2 weeks ago

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 stage

  • candidate_first_name: Candidate's first name

  • candidate_last_name: Candidate's last name

Optional fields:

  • candidate_email: Candidate's email address

  • candidate_linkedin_url: URL to candidate's LinkedIn profile

  • resume: PDF file of candidate's resume

  • additional_comments: Notes about the candidate (appears in activity feed)

Example response:

{

"success": true,

"message": "Candidate added successfully"

}

Integration Examples

cURL

bash

List jobs

-H "Authorization: Bearer YOUR_API_KEY"

Add candidate

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

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.

Did this answer your question?