Dover API overview
Authenticate with a Bearer API key, check the ATS Premium requirement, and find every Dover API endpoint for jobs, candidates, and custom careers pages.
The Dover API lets you add candidates to active jobs, list recent hires, or host a custom careers page (list postings, render a job page, and submit applications with a resume) from your own backend.
This page covers what every request needs. For the parameters, request bodies, and responses of each endpoint, see the API reference. For the setup walkthrough and FAQ, see the Dover API help article.
Base URL
Section titled “Base URL”Every request goes to https://app.dover.com, and every endpoint lives under /api/v1/external/.
Authentication
Section titled “Authentication”Authenticate each request with your API key in the Authorization header:
Authorization: Bearer <API_KEY>To create or copy a key, open Settings → API Key in the Dover app.
ATS Premium requirement
Section titled “ATS Premium requirement”The API is available on the ATS Premium plan. On any other plan, every endpoint responds with 403 and code: ats_premium_required:
{ "code": "ats_premium_required", "detail": "The Dover API is available on the ATS Premium plan.", "upgrade_url": "https://app.dover.com/settings/company/billing?upgrade=1"}Endpoints
Section titled “Endpoints”| Endpoint | What it does |
|---|---|
GET /api/v1/external/jobs |
List active public jobs and the hiring pipeline stages you can add candidates to. |
POST /api/v1/external/add-candidate |
Add one candidate to a job, with an optional resume. |
POST /api/v1/external/bulk-add-candidates |
Add many candidates to jobs in one JSON request. |
GET /api/v1/external/candidates |
List recently hired candidates, optionally for one job. |
GET /api/v1/external/job-postings |
List the jobs published to your Dover careers page. |
GET /api/v1/external/job-postings/{id} |
Get a job page: description, locations, compensation, and the application questions to render. |
POST /api/v1/external/job-postings/{id}/applications |
Submit an application to a posting, with a resume and answers. |
The careers-page endpoints only return jobs published to your Dover careers page. Submitting an application creates an inbound application, which is a different pipeline from adding a candidate.
Quick start
Section titled “Quick start”-
List your jobs. Each job has an
idand a list ofhiring_pipeline_stages, each with anidand aname.Terminal window curl https://app.dover.com/api/v1/external/jobs \-H "Authorization: Bearer $DOVER_API_KEY" -
Add a candidate to one of those jobs.
channel,job_id,candidate_first_name, andcandidate_last_nameare required, and you must pass exactly one ofhiring_pipeline_stage_idorhiring_pipeline_stage_name.Terminal window curl -X POST https://app.dover.com/api/v1/external/add-candidate \-H "Authorization: Bearer $DOVER_API_KEY" \-H "Content-Type: application/json" \-d '{"channel": "SOURCED","job_id": "<JOB_ID>","hiring_pipeline_stage_id": "<STAGE_ID>","candidate_first_name": "Ada","candidate_last_name": "Lovelace","candidate_email": "[email protected]"}'channelis how the candidate entered your pipeline:AGENCY,REFERRAL,SOURCED, orAPPLIED. It drives attribution in reporting, and some channels need extra fields; the reference lists them.
OpenAPI specification
Section titled “OpenAPI specification”The full machine-readable specification is available at app.dover.com/docs/api.json. Use it to generate a client or to give an AI coding tool the exact endpoints and fields.
Need help?
Section titled “Need help?”Email [email protected].