{"swagger": "2.0", "info": {"title": "Dover API", "description": "Add candidates to active jobs, list recent hires, or host a custom careers page\n(list postings, render a job page, submit applications with a resume).\n\nAuthenticate from your backend with `Authorization: Bearer <API_KEY>`. Create a\nkey in the Dover app under **Settings → API Key**. Do not put the key in browser\nJavaScript.\n\nThe API is available on the ATS Premium plan; other plans get `403` with\n`code: ats_premium_required`.\n\nNeed help? Email support@dover.com.", "termsOfService": "https://app.termly.io/document/terms-of-service/65d67775-8d70-48c8-aa7b-72a444416b71", "contact": {"email": "support@dover.com"}, "security": [{"Bearer JWT": []}], "version": "v1"}, "host": "app.dover.com", "schemes": ["https"], "basePath": "/", "consumes": ["application/json"], "produces": ["application/json"], "securityDefinitions": {"Bearer JWT": {"type": "apiKey", "name": "Authorization", "in": "header", "description": "Enter your bearer token in the format **Bearer &lt;token&gt;**"}}, "security": [{"Bearer JWT": []}], "paths": {"/api/v1/external/add-candidate": {"post": {"operationId": "externalAPIAddCandidate", "summary": "Add a candidate", "description": "Add a candidate to a job. `channel` is required (AGENCY, REFERRAL, SOURCED or APPLIED) and drives how the candidate is attributed in reporting; see the field descriptions for the accompanying `source` / `sourcer_*` / `agency_name` fields.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/ExternalAPIAddCandidateRequest"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/ExternalAPIAddCandidateResponse"}}}, "tags": ["Candidates"]}, "parameters": []}, "/api/v1/external/bulk-add-candidates": {"post": {"operationId": "externalAPIBulkAddCandidates", "summary": "Bulk-add candidates", "description": "Bulk add candidates to job(s). `channel` is required (AGENCY, REFERRAL, SOURCED or APPLIED) and drives how the candidate is attributed in reporting; see the field descriptions for the accompanying `source` / `sourcer_*` / `agency_name` fields.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/ExternalAPIBulkAddCandidatesRequest"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/ExternalAPIBulkAddCandidatesResponse"}}}, "tags": ["Candidates"]}, "parameters": []}, "/api/v1/external/candidates": {"get": {"operationId": "externalAPIListHiredCandidates", "summary": "List hired candidates", "description": "List recently hired candidates. Optionally filter by job.", "parameters": [{"name": "job", "in": "query", "description": "", "required": false, "type": "string"}, {"name": "limit", "in": "query", "description": "Number of results to return per page.", "required": false, "type": "integer"}, {"name": "offset", "in": "query", "description": "The initial index from which to return the results.", "required": false, "type": "integer"}], "responses": {"200": {"description": "", "schema": {"required": ["count", "results"], "type": "object", "properties": {"count": {"type": "integer"}, "next": {"type": "string", "format": "uri", "x-nullable": true}, "previous": {"type": "string", "format": "uri", "x-nullable": true}, "results": {"type": "array", "items": {"$ref": "#/definitions/ExternalAPICandidate"}}}}}}, "tags": ["Candidates"]}, "parameters": []}, "/api/v1/external/job-postings": {"get": {"operationId": "externalAPIListJobPostings", "summary": "List job postings", "description": "List jobs published to your Dover careers page. Use this for an index or a \"more jobs\" section on a custom careers site. Authenticate from your backend with `Authorization: Bearer <API_KEY>`. Do not put the key in browser JavaScript.", "parameters": [{"name": "limit", "in": "query", "description": "Number of results to return per page.", "required": false, "type": "integer"}, {"name": "offset", "in": "query", "description": "The initial index from which to return the results.", "required": false, "type": "integer"}], "responses": {"200": {"description": "", "schema": {"required": ["count", "results"], "type": "object", "properties": {"count": {"type": "integer"}, "next": {"type": "string", "format": "uri", "x-nullable": true}, "previous": {"type": "string", "format": "uri", "x-nullable": true}, "results": {"type": "array", "items": {"$ref": "#/definitions/ExternalAPIJobPostingList"}}}}}}, "tags": ["Job postings"]}, "parameters": []}, "/api/v1/external/job-postings/{id}": {"get": {"operationId": "externalAPIGetJobPosting", "summary": "Get a job posting", "description": "Job page payload: company, description, locations, compensation, interview-plan preview, and application questions to render the apply form. Authenticate from your backend with `Authorization: Bearer <API_KEY>`. Do not put the key in browser JavaScript.", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/ExternalAPIJobPostingDetail"}}}, "tags": ["Job postings"]}, "parameters": [{"name": "id", "in": "path", "required": true, "type": "string"}]}, "/api/v1/external/job-postings/{id}/applications": {"post": {"operationId": "externalAPISubmitJobPostingApplication", "summary": "Submit an application", "description": "Create an inbound application on this posting (name, email, resume, and answers from GET job-postings/{id}). Applications are attributed to your careers page, the same as Dover's hosted apply form. Multipart for a resume file; JSON is fine without one. Authenticate from your backend with `Authorization: Bearer <API_KEY>`. Do not put the key in browser JavaScript.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/ExternalAPIJobPostingApplicationRequest"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/ExternalAPIJobPostingApplicationResponse"}}, "503": {"description": "Resume upload failed; safe to retry."}}, "tags": ["Job postings"]}, "parameters": [{"name": "id", "in": "path", "required": true, "type": "string"}]}, "/api/v1/external/jobs": {"get": {"operationId": "externalAPIListJobs", "summary": "List jobs", "description": "List active public jobs, including hiring pipeline stages you can add candidates to and the hiring team (hiring manager, recruiter, Dover recruiting partner, and members with their emails).", "parameters": [{"name": "limit", "in": "query", "description": "Number of results to return per page.", "required": false, "type": "integer"}, {"name": "offset", "in": "query", "description": "The initial index from which to return the results.", "required": false, "type": "integer"}], "responses": {"200": {"description": "", "schema": {"required": ["count", "results"], "type": "object", "properties": {"count": {"type": "integer"}, "next": {"type": "string", "format": "uri", "x-nullable": true}, "previous": {"type": "string", "format": "uri", "x-nullable": true}, "results": {"type": "array", "items": {"$ref": "#/definitions/ExternalAPIJob"}}}}}}, "tags": ["Jobs"]}, "parameters": []}}, "definitions": {"ExternalAPIAddCandidateRequest": {"required": ["channel", "job_id", "candidate_first_name", "candidate_last_name"], "type": "object", "properties": {"channel": {"title": "Channel", "description": "How the candidate entered your pipeline. AGENCY: submitted by a recruiting agency (set `agency_name` and the agency contact's `sourcer_name` / `sourcer_email`). REFERRAL: referred by someone (set the referrer's `sourcer_name` / `sourcer_email`; `source` is one of Employee, Investor, Friend, or omitted). SOURCED: found by your team (`source` is the site, defaults to LinkedIn). APPLIED: applied on their own (`source` is the job board, optional).", "type": "string", "enum": ["AGENCY", "REFERRAL", "SOURCED", "APPLIED"]}, "source": {"title": "Source", "type": "string", "maxLength": 200, "x-nullable": true}, "sourcer_name": {"title": "Sourcer name", "type": "string", "maxLength": 255, "x-nullable": true}, "sourcer_email": {"title": "Sourcer email", "type": "string", "maxLength": 254, "x-nullable": true}, "agency_name": {"title": "Agency name", "type": "string"}, "job_id": {"title": "Job id", "type": "string", "minLength": 1}, "hiring_pipeline_stage_id": {"title": "Hiring pipeline stage id", "type": "string", "minLength": 1}, "hiring_pipeline_stage_name": {"title": "Hiring pipeline stage name", "type": "string", "minLength": 1}, "candidate_email": {"title": "Candidate email", "type": "string", "minLength": 1}, "candidate_first_name": {"title": "Candidate first name", "type": "string", "minLength": 1}, "candidate_last_name": {"title": "Candidate last name", "type": "string", "minLength": 1}, "candidate_linkedin_url": {"title": "Candidate linkedin url", "type": "string", "minLength": 1}, "resume": {"title": "Resume", "type": "string", "readOnly": true, "format": "uri"}, "resume_url": {"title": "Resume url", "type": "string", "format": "uri", "minLength": 1}, "additional_comments": {"title": "Additional comments", "type": "string", "maxLength": 5000}}}, "ExternalAPIAddCandidateResponse": {"required": ["success"], "type": "object", "properties": {"success": {"type": "boolean", "description": "Indicates if the candidate was successfully added.", "example": false}, "message": {"type": "string", "description": "A message providing additional information about the operation.", "example": "Candidate missing required fields: ['first_name']"}}, "description": "Response after adding a candidate to the external API."}, "ExternalAPIBulkAddCandidatesItem": {"required": ["channel", "job_id", "candidate_first_name", "candidate_last_name"], "type": "object", "properties": {"channel": {"title": "Channel", "description": "How the candidate entered your pipeline. AGENCY: submitted by a recruiting agency (set `agency_name` and the agency contact's `sourcer_name` / `sourcer_email`). REFERRAL: referred by someone (set the referrer's `sourcer_name` / `sourcer_email`; `source` is one of Employee, Investor, Friend, or omitted). SOURCED: found by your team (`source` is the site, defaults to LinkedIn). APPLIED: applied on their own (`source` is the job board, optional).", "type": "string", "enum": ["AGENCY", "REFERRAL", "SOURCED", "APPLIED"]}, "source": {"title": "Source", "type": "string", "maxLength": 200, "x-nullable": true}, "sourcer_name": {"title": "Sourcer name", "type": "string", "maxLength": 255, "x-nullable": true}, "sourcer_email": {"title": "Sourcer email", "type": "string", "maxLength": 254, "x-nullable": true}, "agency_name": {"title": "Agency name", "type": "string"}, "job_id": {"title": "Job id", "type": "string", "minLength": 1}, "hiring_pipeline_stage_id": {"title": "Hiring pipeline stage id", "type": "string", "minLength": 1}, "hiring_pipeline_stage_name": {"title": "Hiring pipeline stage name", "type": "string", "minLength": 1}, "candidate_email": {"title": "Candidate email", "type": "string", "minLength": 1}, "candidate_first_name": {"title": "Candidate first name", "type": "string", "minLength": 1}, "candidate_last_name": {"title": "Candidate last name", "type": "string", "minLength": 1}, "candidate_linkedin_url": {"title": "Candidate linkedin url", "type": "string", "minLength": 1}, "resume_url": {"title": "Resume url", "type": "string", "format": "uri", "minLength": 1}, "additional_comments": {"title": "Additional comments", "type": "string", "maxLength": 5000}}}, "ExternalAPIBulkAddCandidatesRequest": {"required": ["candidates"], "type": "object", "properties": {"candidates": {"type": "array", "description": "List of candidates to be added", "items": {"type": "object", "properties": {"job_id": {"type": "string", "description": "ID of the job the candidate is applying for", "example": "uuid123"}, "hiring_pipeline_stage_id": {"type": "string", "description": "ID of the hiring pipeline stage (mutually exclusive with hiring_pipeline_stage_name)", "example": "uuid123"}, "hiring_pipeline_stage_name": {"type": "string", "description": "Name of the hiring pipeline stage (mutually exclusive with hiring_pipeline_stage_id)", "example": "Initial Screening"}, "candidate_email": {"type": "string", "description": "Email address of the candidate", "example": "candidate@example.com"}, "candidate_first_name": {"type": "string", "description": "First name of the candidate", "example": "John"}, "candidate_last_name": {"type": "string", "description": "Last name of the candidate", "example": "Doe"}, "candidate_linkedin_url": {"type": "string", "description": "LinkedIn profile URL of the candidate", "example": "https://linkedin.com/in/johndoe"}, "resume_url": {"type": "string", "format": "uri", "description": "URL to the candidate's resume (must be pdf, doc, docx, or txt)", "example": "https://example.com/resume.pdf"}, "additional_comments": {"type": "string", "description": "Additional comments about the candidate", "example": "Strong background in Python development"}}, "required": ["job_id", "candidate_first_name", "candidate_last_name"]}}}, "description": "Request to bulk add candidates to the external API.", "example": {"candidates": [{"job_id": "uuid123", "hiring_pipeline_stage_id": "uuid123", "candidate_email": "candidate1@example.com", "candidate_first_name": "John", "candidate_last_name": "Doe", "candidate_linkedin_url": "https://linkedin.com/in/johndoe", "resume_url": "https://example.com/resume.pdf", "additional_comments": "Experienced developer"}, {"job_id": "uuid123", "hiring_pipeline_stage_name": "Initial Screening", "candidate_email": "candidate2@example.com", "candidate_first_name": "Jane", "candidate_last_name": "Smith", "candidate_linkedin_url": "https://linkedin.com/in/janesmith", "resume_url": "https://example.com/resume2.pdf", "additional_comments": "Great cultural fit"}]}}, "ExternalAPIBulkAddCandidatesResponse": {"required": ["success"], "type": "object", "properties": {"success": {"type": "boolean", "description": "Indicates if the bulk operation was successful overall.", "example": true}, "results": {"type": "array", "description": "Detailed results for each candidate in the bulk request", "items": {"type": "object", "properties": {"index": {"type": "integer", "description": "Index of the candidate in the original request", "example": 0}, "success": {"type": "boolean", "description": "Whether this specific candidate was added successfully", "example": true}, "message": {"type": "string", "description": "Details about the result for this candidate", "example": "Candidate successfully added"}, "candidate_id": {"type": "string", "description": "ID of the created candidate if successful", "example": "uuid123"}}}}}, "description": "Response after bulk adding candidates.", "example": {"success": true, "results": [{"index": 0, "success": true, "message": "Candidate successfully added", "candidate_id": "uuid123"}, {"index": 1, "success": false, "message": "Invalid hiring pipeline stage name"}]}}, "ExternalAPICandidateJob": {"required": ["id", "title"], "type": "object", "properties": {"id": {"title": "Id", "type": "string", "format": "uuid"}, "title": {"title": "Title", "type": "string", "minLength": 1}}}, "SocialLinkType": {"title": "Link type", "type": "string", "enum": [null, "ABOUTME", "ANGELLIST", "CAREERBUILDER", "CRUNCHBASE", "FACEBOOK", "FLICKR", "GITHUB", "GRAVATAR", "HEALTHGRADES", "INDEED", "INSTAGRAM", "KAGGLE", "LINKEDIN", "PINTEREST", "PORTFOLIO", "RATEMD", "RESUME", "STACKOVERFLOW", "TWITTER", "WEBSITE", "OTHER"], "x-enum-varnames": ["NONE", "ABOUTME", "ANGELLIST", "CAREERBUILDER", "CRUNCHBASE", "FACEBOOK", "FLICKR", "GITHUB", "GRAVATAR", "HEALTHGRADES", "INDEED", "INSTAGRAM", "KAGGLE", "LINKEDIN", "PINTEREST", "PORTFOLIO", "RATEMD", "RESUME", "STACKOVERFLOW", "TWITTER", "WEBSITE", "OTHER"]}, "ExternalAPIContactSocialLink": {"required": ["url", "link_type"], "type": "object", "properties": {"url": {"title": "Url", "type": "string", "minLength": 1}, "link_type": {"$ref": "#/definitions/SocialLinkType"}}}, "ExternalAPIContact": {"required": ["full_name", "preferred_name"], "type": "object", "properties": {"full_name": {"title": "Full name", "description": "The full name of the Contact.", "type": "string", "maxLength": 500, "minLength": 1}, "preferred_name": {"title": "Preferred name", "description": "The name the Contact should be addressed by. Used in communications.", "type": "string", "maxLength": 500, "minLength": 1}, "preferred_phone_number": {"title": "Preferred phone number", "type": "string", "minLength": 1}, "preferred_email": {"title": "Preferred email", "type": "string", "readOnly": true, "x-nullable": true}, "social_links": {"type": "array", "items": {"$ref": "#/definitions/ExternalAPIContactSocialLink"}}, "location": {"title": "Location", "type": "string"}}}, "ExternalAPICandidate": {"type": "object", "properties": {"id": {"title": "Id", "type": "string", "format": "uuid", "readOnly": true}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}, "job": {"$ref": "#/definitions/ExternalAPICandidateJob"}, "contact": {"$ref": "#/definitions/ExternalAPIContact"}}}, "LocationOption": {"required": ["display_name", "location_type", "city", "state", "country"], "type": "object", "properties": {"id": {"title": "Id", "type": "string", "format": "uuid", "readOnly": true}, "display_name": {"title": "Display name", "type": "string", "minLength": 1}, "location_type": {"title": "Location type", "type": "string", "enum": ["CITY", "COUNTRY", "REGION", "ADMIN_1"]}, "city": {"title": "City", "type": "string", "minLength": 1}, "state": {"title": "State", "type": "string", "minLength": 1}, "country": {"title": "Country", "type": "string", "minLength": 1}}}, "JobLocation": {"required": ["location_type", "location_option_id", "name"], "type": "object", "properties": {"location_type": {"title": "Location type", "type": "string", "enum": ["REMOTE", "IN_OFFICE", "HYBRID"]}, "location_option": {"$ref": "#/definitions/LocationOption"}, "location_option_id": {"title": "Location option id", "type": "string", "format": "uuid"}, "name": {"title": "Name", "type": "string", "maxLength": 255, "minLength": 1}, "is_primary": {"title": "Is primary", "type": "boolean"}}}, "ExternalAPIJobPostingList": {"required": ["id", "title"], "type": "object", "properties": {"id": {"title": "Id", "type": "string", "format": "uuid"}, "title": {"title": "Title", "type": "string", "minLength": 1}, "locations": {"type": "array", "items": {"$ref": "#/definitions/JobLocation"}, "readOnly": true}, "workplace_type": {"title": "Workplace type", "type": "string", "readOnly": true, "minLength": 1}, "apply_url": {"title": "Apply url", "type": "string", "format": "uri", "readOnly": true, "minLength": 1}}}, "JobCompensation": {"required": ["currency_code"], "type": "object", "properties": {"upper_bound": {"title": "Upper bound", "type": "integer", "maximum": 2147483647, "minimum": -2147483648, "x-nullable": true}, "lower_bound": {"title": "Lower bound", "type": "integer", "maximum": 2147483647, "minimum": -2147483648, "x-nullable": true}, "currency_code": {"title": "Currency code", "type": "string", "maxLength": 10, "minLength": 1}, "open_to_sharing_comp": {"title": "Open to sharing comp", "type": "boolean"}, "equity_lower_bound": {"title": "Equity lower bound", "type": "number", "x-nullable": true}, "equity_upper_bound": {"title": "Equity upper bound", "type": "number", "x-nullable": true}, "open_to_sharing_equity": {"title": "Open to sharing equity", "type": "boolean", "x-nullable": true}, "offers_equity": {"title": "Offers equity", "type": "boolean"}, "salary_range_type": {"title": "Salary range type", "type": "string", "enum": [null, "YEARLY", "MONTHLY", "HOURLY"], "x-nullable": true}, "employment_type": {"title": "Employment type", "type": "string", "enum": [null, "FULL_TIME", "PART_TIME", "CONTRACT", "INTERNSHIP"], "x-nullable": true}}, "x-nullable": true}, "ApplicationQuestionApplicationPortalJob": {"required": ["id", "question", "input_type", "required"], "type": "object", "properties": {"id": {"title": "Id", "type": "string", "format": "uuid"}, "question": {"title": "Question", "type": "string", "minLength": 1}, "input_type": {"title": "Input type", "type": "string", "enum": ["SHORT_ANSWER", "LONG_ANSWER", "MULTIPLE_CHOICE", "MULTIPLE_SELECT", "FILE_UPLOAD"]}, "required": {"title": "Required", "type": "boolean"}, "question_type": {"title": "Question type", "type": "string", "enum": ["LINKEDIN_URL", "RESUME", "PHONE_NUMBER", "CUSTOM"]}, "multiple_choice_options": {"type": "array", "items": {"type": "string", "minLength": 1}}, "max_selections": {"title": "Max selections", "type": "integer", "minimum": 1, "x-nullable": true}, "hidden": {"title": "Hidden", "type": "boolean", "default": false}, "order_index": {"title": "Order index", "type": "integer", "x-nullable": true}}}, "PublicInterviewPlanPreviewStage": {"required": ["id", "name", "description", "order_index"], "type": "object", "properties": {"id": {"title": "Id", "type": "string", "format": "uuid"}, "name": {"title": "Name", "type": "string", "minLength": 1}, "description": {"title": "Description", "type": "string", "minLength": 1, "x-nullable": true}, "order_index": {"title": "Order index", "type": "integer"}}}, "ExternalAPIJobPostingDetail": {"required": ["id", "title"], "type": "object", "properties": {"id": {"title": "Id", "type": "string", "format": "uuid"}, "title": {"title": "Title", "type": "string", "minLength": 1}, "client_id": {"title": "Client id", "type": "string", "readOnly": true}, "client_name": {"title": "Client name", "type": "string", "readOnly": true}, "client_logo": {"title": "Client logo", "type": "string", "readOnly": true, "x-nullable": true}, "client_domain": {"title": "Client domain", "type": "string", "readOnly": true, "x-nullable": true}, "user_provided_description": {"title": "User provided description", "type": "string", "readOnly": true, "x-nullable": true}, "location": {"title": "Location", "type": "string", "readOnly": true, "x-nullable": true}, "locations": {"type": "array", "items": {"$ref": "#/definitions/JobLocation"}, "readOnly": true}, "workplace_type": {"title": "Workplace type", "type": "string", "readOnly": true, "minLength": 1}, "compensation": {"$ref": "#/definitions/JobCompensation"}, "compensation_details": {"title": "Compensation details", "type": "string", "readOnly": true, "x-nullable": true}, "visa_support": {"title": "Visa support", "type": "boolean", "readOnly": true}, "application_questions": {"type": "array", "items": {"$ref": "#/definitions/ApplicationQuestionApplicationPortalJob"}, "readOnly": true}, "public_interview_plan_preview": {"type": "array", "items": {"$ref": "#/definitions/PublicInterviewPlanPreviewStage"}, "readOnly": true}, "allow_docx_resumes_in_applications": {"title": "Allow docx resumes in applications", "type": "boolean", "readOnly": true}, "apply_url": {"title": "Apply url", "type": "string", "format": "uri", "readOnly": true, "minLength": 1}, "created": {"title": "Created", "type": "string", "format": "date-time", "readOnly": true}}}, "ExternalAPIJobPostingApplicationRequest": {"required": ["first_name", "last_name", "email"], "type": "object", "properties": {"first_name": {"title": "First name", "type": "string", "minLength": 1}, "last_name": {"title": "Last name", "type": "string", "minLength": 1}, "email": {"title": "Email", "type": "string", "format": "email", "minLength": 1}, "linkedin_url": {"title": "Linkedin url", "type": "string"}, "phone_number": {"title": "Phone number", "type": "string", "x-nullable": true}, "resume": {"title": "Resume", "type": "string", "readOnly": true, "format": "uri"}, "additional_info": {"title": "Additional info", "type": "string"}, "application_questions": {"title": "Application questions", "type": "object"}, "opted_in_to_talent_network": {"title": "Opted in to talent network", "type": "boolean", "x-nullable": true}}}, "ExternalAPIJobPostingApplicationResponse": {"required": ["success", "id"], "type": "object", "properties": {"success": {"title": "Success", "type": "boolean"}, "id": {"title": "Id", "type": "string", "format": "uuid"}}}, "ExternalAPIJobStage": {"required": ["id", "name"], "type": "object", "properties": {"id": {"title": "Id", "type": "string", "format": "uuid"}, "name": {"title": "Name", "type": "string", "minLength": 1}}}, "ExternalAPIJobHiringTeamMember": {"required": ["user_id", "name", "email", "roles"], "type": "object", "properties": {"user_id": {"title": "User id", "type": "integer"}, "name": {"title": "Name", "type": "string", "minLength": 1}, "email": {"title": "Email", "type": "string", "format": "email", "minLength": 1}, "roles": {"description": "'hiring_manager', 'recruiter', and/or 'recruiting_partner' (the Dover recruiting partner) for the job's designated contacts; 'member' for everyone else on the hiring team.", "type": "array", "items": {"type": "string", "enum": ["hiring_manager", "recruiter", "recruiting_partner", "member"]}}}}, "ExternalAPIJob": {"required": ["id", "title"], "type": "object", "properties": {"id": {"title": "Id", "type": "string", "format": "uuid"}, "title": {"title": "Title", "type": "string", "minLength": 1}, "hiring_pipeline_stages": {"type": "array", "items": {"$ref": "#/definitions/ExternalAPIJobStage"}, "readOnly": true}, "hiring_team": {"description": "People on the job's hiring team: hiring manager first, then recruiter, Dover recruiting partner, then members.", "type": "array", "items": {"$ref": "#/definitions/ExternalAPIJobHiringTeamMember"}, "readOnly": true}}}}, "tags": [{"name": "Jobs", "description": "Active public jobs and their hiring pipeline stages."}, {"name": "Job postings", "description": "Jobs published to your careers page: list, job page, and apply."}, {"name": "Candidates", "description": "Add candidates to jobs and list recent hires."}]}