
100Hires AI ATS & Recruitment Software
- Updated May 9, 2026
- 100Hires/mcp
Official 100Hires MCP: AI ATS & Recruitment Software for candidates, jobs, applications, interviews.
About
Official 100Hires MCP: AI ATS & Recruitment Software for candidates, jobs, applications, interviews. Exposes 131 MCP tools including com.100hires/100hires. Covers setup, configuration, and when-to-use guidance from upstream documentation for 100Hires - AI ATS & Recruitment Software. Install via Claude Desktop, Cursor, or any MCP-compatible client using the upstream server manifest.
- **Candidates** - list, create, update, tag, attach files, view timeline, message
- **Applications** - list, move through pipeline stages, advance, hire, reject, transfer
- **Jobs** - list, create, publish to job boards, manage hiring team, set up webhooks
- **Interviews** - schedule, list, retrieve details
- **Messages & email templates** - schedule, batch-send, manage notification emails, build nurture campaigns
100Hires AI ATS & Recruitment Software by the numbers
- Exposes 131 verified tools (MCP introspection)
- Data as of Jul 9, 2026 (Skillselion catalog sync)
claude mcp add --transport http 100hires https://mcp.100hires.com/mcpAdd your badge
Show developers this MCP server is listed on Skillselion. Paste this into your README.
| Transport | HTTP |
|---|---|
| Auth | None |
| Tools | 131 |
| Last updated | May 9, 2026 |
| Repository | 100Hires/mcp ↗ |
How do I connect 100Hires - AI ATS & Recruitment Software to my MCP client?
Official 100Hires MCP: AI ATS & Recruitment Software for candidates, jobs, applications, interviews.
Who is it for?
Teams wiring 100Hires - AI ATS & Recruitment Software into Claude, Cursor, or custom agents for developer tools.
Skip if: Skip when you need a non-MCP SDK or hosted API without stdio/SSE transport.
What you get
Working 100Hires - AI ATS & Recruitment Software MCP server with verified tool registration and client config.
- Live ATS-backed answers about candidates, jobs, applications, and interviews in chat
- Agent-driven recruiting actions exposed as MCP tools (per your 100Hires plan)
- Documented remote endpoint you can audit via the public GitHub mcp repository
By the numbers
- [object Object]
100Hires - AI ATS & Recruitment Software capabilities & compatibility
- Capabilities
- 100hires ai ats & recruitment software mcp too · 100hires ai ats & recruitment software client · 100hires ai ats & recruitment software agent w
- Use cases
- orchestration
- Runs
- Remote server
What 100Hires - AI ATS & Recruitment Software says it does
Official 100Hires MCP: AI ATS & Recruitment Software for candidates, jobs, applications, interviews.
Official 100Hires MCP: AI ATS & Recruitment Software for candidates, jobs, applications, interviews.
Tools 131
Public tool metadata - what this server can do for an agent.
hires_list_candidates13 paramsList candidates with optional filters. Supports filtering by job, stage, email, name, LinkedIn, and date ranges. Returns paginated results. Recommended size <= 10: candidate payloads include the full profile answers array and can be large; if the response exceeds the budget the tool returns isError:true with error_code=response_too_large and retry hints — reduce size, narrow filters, or fetch a single record via hires_get_candidate.
company_idnumberFilter by company ID. Required only when the API key has access to multiple companies.job_idnumberFilter candidates by job ID.stage_idnumberFilter candidates by pipeline stage ID. Best used together with job_id.emailstringExact candidate email filter.qstringPlain-text search by name or email. Supports partial matches.full_namestringCandidate full-name filter.linkedinstringSearch by LinkedIn profile URL or alias (e.g. 'johndoe' or full URL).created_afternumber | stringReturn only candidates created at or after this time. Unix timestamp (seconds) or ISO-8601 string (e.g. 2026-05-11T00:00:00Z). Fractional seconds accepted but truncated.updated_afternumber | stringReturn only candidates updated at or after this time. Unix timestamp (seconds) or ISO-8601 string (e.g. 2026-05-11T00:00:00Z). Fractional seconds accepted but truncated. Useful for incremental sync.includestringComma-separated related data. Supported: `applications` — embeds each candidate's application summaries with job titles and pipeline stages. Recommended when the caller needs stage/pipeline context (e.g. UI rendering, candidate-status questions).pagenumberPage number (1-based).sizenumberNumber of items per page.viewstringResponse shape. Default `summary` excludes the `profile` array (custom profile-form answers). Use `full` only when those answers are genuinely needed; call hires_get_candidate for a single full record.
hires_create_candidate13 paramsCreate a new candidate profile. Optionally link to a job/stage and attach the candidate's resume as extracted text. Used for imports, inbound forms, and enrichment workflows. When the user provides an attached resume (PDF/DOCX/etc.), parse the file content yourself from the chat context — LLMs natively extract text from uploaded files — and pass the extracted text via resume_text. Do NOT attempt to inline binary file data: host function-call serializers truncate arguments above ~20KB.
company_idnumberTarget company ID. Required only when the API key has access to multiple companies.first_namestringCandidate first name.last_namestringCandidate last name.emailstringCandidate email address. Used for deduplication.phonestringCandidate phone number.profileobjectKey-value map of profile field answers. Keys can be question text or question_id. Example: {"Current job title": "Senior Engineer"}.job_idnumberJob ID to create an application for this candidate.stage_idnumberPipeline stage ID for the initial application. Requires job_id.citystringCandidate city for location/timezone resolution.statestringCandidate state or region.countrystringCandidate country name or ISO code.timezonestringIANA timezone (e.g. 'America/Los_Angeles'). Auto-resolved from city/country if omitted.resume_textstringPlain-text resume content extracted by the model from an attached PDF/DOCX/etc. Stored as a text/plain attachment on the candidate. Do not pass binary or base64 here — only the parsed text content.
hires_get_candidate1 paramGet full candidate data including application summaries by candidate ID or alias.
idstring | numberrequiredCandidate ID (integer) or alias (string).
hires_update_candidate13 paramsUpdate candidate fields, profile answers, and optional resume text. Used for bi-directional sync from ATS, CRM, sourcing, or enrichment tools. When the user provides an attached resume, parse it yourself from chat context and pass via resume_text — do not inline binary data.
idstring | numberrequiredCandidate ID (integer) or alias (string).first_namestringCandidate first name.last_namestringCandidate last name.emailstringCandidate email address.phonestringCandidate phone number.profileobjectKey-value map of profile field answers. Keys can be question text or question_id.job_idnumberJob ID to create a new application for this candidate.stage_idnumberPipeline stage ID for the application. Requires job_id.citystringCandidate city for location/timezone resolution.statestringCandidate state or region.countrystringCandidate country name or ISO code.timezonestringIANA timezone (e.g. 'America/Los_Angeles'). Auto-resolved from city/country if omitted.resume_textstringPlain-text resume content extracted by the model from an attached file. Stored as a text/plain attachment. Do not pass binary or base64 — only parsed text.
hires_delete_candidate1 paramPermanently delete a candidate by ID or alias.
idstring | numberrequiredCandidate ID (integer) or alias (string).
hires_list_candidate_tags1 paramList all tags assigned to a candidate. Useful for segmentation and audience-based automations.
idstring | numberrequiredCandidate ID (integer) or alias (string).
hires_add_candidate_tags2 paramsAdd one or more tags to a candidate. Used for campaign tagging, qualification labels, and source attribution.
idstring | numberrequiredCandidate ID (integer) or alias (string).tagsarrayrequiredArray of tag strings to add.
hires_remove_candidate_tag2 paramsRemove a specific tag from a candidate.
idstring | numberrequiredCandidate ID (integer) or alias (string).tagstringrequiredThe tag string to remove.
hires_batch_add_tags2 paramsAdd tags to multiple candidates in one request (max 100). Returns per-item results with partial success support.
idsarrayrequiredCandidate IDs to tag (max 100).tagsarrayrequiredTag names to attach.
hires_batch_remove_tags2 paramsRemove tags from multiple candidates in one request (max 100). Returns per-item results with partial success support.
idsarrayrequiredCandidate IDs to remove tags from (max 100).tagsarrayrequiredTag names to remove.
hires_list_candidate_files1 paramList all files attached to a candidate (resumes and other documents). Each entry has uuid, absolute download url (use Bearer auth), relative_time, file metadata (orig_file_name, file_ext, file_type/MIME, readable_size), and type (resume/other). Default response is compact; avoid include=text_content on candidates with many files — it adds parsed resume text per file which can exceed the response budget.
idstring | numberrequiredCandidate ID (integer) or alias (string).
hires_upload_candidate_file2 paramsUpload a file for a candidate using a base64 payload. Used for portfolio uploads and document attachment. WARNING: host function-call serializers (both OpenAI and Anthropic) truncate tool arguments above ~20KB, so binary files larger than that will arrive corrupted. For resumes specifically, prefer hires_create_candidate / hires_update_candidate with resume_text — the model parses the file from chat context and passes extracted text, avoiding the size limit entirely.
idstring | numberrequiredCandidate ID (integer) or alias (string).fileobjectrequiredFile to upload (base64 payload).
hires_get_candidate_resume2 paramsGet the primary resume for a candidate. Returns uuid, absolute download url (use Bearer auth), relative_time, file metadata, type. Use include='text_content' to also get the parsed plain-text content in a `text` field without downloading the file.
idstring | numberrequiredCandidate ID (integer) or alias (string).includestringComma-separated optional fields. Use 'text_content' to add a `text` field with parsed plain-text resume content.
hires_list_candidate_activities7 paramsList timeline activities for a candidate (comments, stage moves, AI responses, etc.). Supports filtering by event type. Recommended size <= 10: copilot responses and call transcriptions can be large per event; if the response exceeds the budget the tool returns isError:true with error_code=response_too_large and retry hints.
idstring | numberrequiredCandidate ID (integer) or alias (string).pagenumberPage number (1-based).sizenumberPage size. Values above 100 are rejected with 400. Default 20, max 100.event_typestringComma-separated event types to filter. Supported: comment, copilot_response, stage_moved, automation_action_triggered, assign_job, enrichment, call, validate_emails, profile_mutation, qualification, assign_tags, assign_sources, candidate_rate.sincenumber | stringInclusive lower bound on event timestamp. Unix timestamp (seconds) or ISO-8601 string (e.g. 2026-04-01T00:00:00Z). Fractional seconds accepted but truncated.untilnumber | stringInclusive upper bound on event timestamp. Unix timestamp (seconds) or ISO-8601 string (e.g. 2026-04-01T00:00:00Z). Fractional seconds accepted but truncated.viewstringResponse shape. Default `summary` replaces the largest event payloads (copilot LLM response/prompt, call transcription, comment body) with 200-char `*_preview` fields. Other event types pass through unchanged. Use `full` when the original content is needed.
hires_disqualify_candidate2 paramsDisqualify a candidate from all active applications. Optionally provide rejection reason IDs. Returns affected application IDs.
idstring | numberrequiredCandidate ID (integer) or alias (string).reasonsarrayArray of rejection reason IDs from GET /taxonomy/rejection-reasons.
hires_list_candidate_interviews3 paramsList all interviews for a candidate across all applications. Useful for timeline views and scheduling conflict detection.
idstring | numberrequiredCandidate ID (integer) or alias (string).pagenumberPage number (1-based).sizenumberNumber of items per page.
hires_list_candidate_messages5 paramsList email and messaging history for a candidate. Use is_scheduled=1 to filter only pending scheduled messages. Recommended size <= 10: messages include full HTML body; if the response exceeds the budget the tool returns isError:true with error_code=response_too_large and retry hints.
idstring | numberrequiredCandidate ID (integer) or alias (string).pagenumberPage number (1-based).sizenumberNumber of items per page.is_schedulednumberSet to 1 to return only scheduled (not yet sent) messages.viewstringResponse shape. Default `summary` excludes the HTML body and attachments metadata. Use `full` only when message body content is needed.
hires_send_candidate_message11 paramsSchedule an email message to a candidate. If scheduled_at is omitted, the message is scheduled for 15 minutes after creation.
idstring | numberrequiredCandidate ID (integer) or alias (string).toarrayrequiredPrimary recipient email addresses.subjectstringrequiredEmail subject line.bodystringrequiredEmail body as HTML.from_account_idnumber | nullSending mail account ID. If omitted, uses the API key owner's default mail account.ccarrayCarbon-copy recipient email addresses.bccarrayBlind carbon-copy recipient email addresses.scheduled_atnumber | nullUnix timestamp (seconds) for when to send. Defaults to 15 minutes after creation.application_idnumber | nullOptional application ID to link this message to.reply_to_email_idnumber | nullOptional mailbox message ID to reply to.send_in_new_threadbooleanSend as a new email thread instead of replying in an existing one.
hires_list_applications13 paramsList applications across all accessible jobs. Supports filtering by candidate, job, stage, status, AI score range, and date ranges. Use for pipeline analytics, sync jobs, and ATS dashboards. Avoid include=candidate or include=cv.text on large pages (each embeds heavy nested data); if the response exceeds the budget the tool returns isError:true with error_code=response_too_large and retry hints. Each application embeds its current `stage` (IdName) directly in the response — this is sufficient for rendering kanban/pipeline views; you DO NOT need to call hires_get_job to fetch workflow_stages separately when rendering a pipeline.
company_idnumberFilter by company ID. Omit for all accessible companies.candidate_idnumberFilter applications by candidate ID.job_idnumberFilter applications by job ID.stage_idnumberFilter applications by pipeline stage ID. Best used together with job_id.statusstringFilter by application status: pending (active), hired, or rejected.created_afternumber | stringReturn only applications created at or after this time. Unix timestamp (seconds) or ISO-8601 string (e.g. 2026-05-11T00:00:00Z). Fractional seconds accepted but truncated.updated_afternumber | stringReturn only applications updated at or after this time. Unix timestamp (seconds) or ISO-8601 string (e.g. 2026-05-11T00:00:00Z). Fractional seconds accepted but truncated. Use for incremental sync.ai_score_minnumberReturn only applications with ai_score >= this value.ai_score_maxnumberReturn only applications with ai_score <= this value.sortstringSort order. Prefix with - for descending. Default: -created_at.includestringComma-separated relations to embed: `candidate`, `cv.text`. **Recommended: `candidate`** for pipeline / kanban / UI rendering — without it the widget shows candidate IDs instead of names and emails. Use `cv.text` only when resume text is genuinely needed (large payload).pagenumberPage number (default 1).sizenumberItems per page (default 25, max 100).
hires_create_application5 paramsCreate an application by linking an existing candidate to a job. Use for sourcing workflows and manual application ingestion. The candidate must already exist.
candidate_idstring | numberrequiredCandidate ID (numeric) or alias.job_idnumberrequiredJob ID to apply the candidate to.stage_idnumberPipeline stage ID. If omitted, defaults to the first stage.cvobjectOptional CV/resume to attach.includestringComma-separated relations to embed: candidate, cv.text, job.
hires_get_application2 paramsGet full application details including stage, status, and rejection context. Recommended before mutating stage transitions.
idnumberrequiredApplication ID.includestringComma-separated relations to embed: candidate, cv.text, job.
hires_update_application5 paramsUpdate application fields such as stage, disqualification flag, and CV. For explicit stage transitions prefer hires_move_application or hires_advance_application.
idnumberrequiredApplication ID.stage_idnumberMove application to this pipeline stage.is_disqualifiedbooleanSet to true to disqualify the candidate on this application.cvobjectReplace or attach a CV.includestringComma-separated relations to embed: candidate, cv.text, job.
hires_delete_application1 paramPermanently delete an application. This removes it from all list and view queries.
idnumberrequiredApplication ID.
hires_move_application3 paramsMoves an application to a specific pipeline stage for explicit stage transitions in workflow orchestration. Requires the target stage_id (available via the job's pipeline_stages).
idnumberrequiredApplication ID.stage_idnumberrequiredTarget pipeline stage ID.includestringComma-separated relations to embed: candidate, cv.text, job.
hires_advance_application2 paramsAdvance an application to the next pipeline stage according to workflow order. No stage_id needed -- the system determines the next stage automatically. **Always pass `include=candidate,job`** when surfacing results in the widget — without it, the confirmation card can only show candidate/job IDs and cannot link to their backoffice pages.
idnumberrequiredApplication ID.includestringComma-separated relations to embed: candidate, cv.text, job. Set to `candidate,job` so the widget can link the candidate name to their profile and the job title to its pipeline view.
hires_hire_application2 paramsMark an application as hired. This is the finalization step in a hiring workflow. The application status changes to 'hired' and hired_at is set.
idnumberrequiredApplication ID.includestringComma-separated relations to embed: candidate, cv.text, job.
hires_reject_application4 paramsReject an application with an optional rejection reason. Use GET /taxonomy/rejection-reasons to list available reason IDs. Set suppress_notification to skip the rejection email.
idnumberrequiredApplication ID.rejection_reason_idnumberRejection reason ID from GET /taxonomy/rejection-reasons.suppress_notificationbooleanSet to true to skip sending the rejection email to the candidate.includestringComma-separated relations to embed: candidate, cv.text, job.
hires_unreject_application2 paramsUndo a rejection and reopen a previously rejected application. The status returns to active and rejected_at is cleared.
idnumberrequiredApplication ID.includestringComma-separated relations to embed: candidate, cv.text, job.
hires_transfer_application4 paramsTransfer an application to another job. A new application is created on the target job. Optionally specify a stage on the target job's pipeline.
idnumberrequiredApplication ID to transfer.job_idnumberrequiredTarget job ID to transfer the application to.stage_idnumberPipeline stage ID on the target job. If omitted, defaults to the first stage.includestringComma-separated relations to embed: candidate, cv.text, job.
hires_get_ai_score1 paramGet the structured AI score for an application, including per-criterion scores, justifications, and follow-up questions. Returns null score if the application has not been AI-scored.
idnumberrequiredApplication ID.
hires_list_application_stage_history1 paramGet the full chronological stage transition history for an application, including the initial assignment. Each entry has from_stage_id/name, to_stage_id/name, moved_at (Unix seconds), moved_by_type (system, user, automation), moved_by_user_id, and source (what caused the transition, e.g. 'apply:indeed', 'form_watcher', 'user'; null for historical records). Use this for funnel analysis, attribution reports, and time-in-stage reports instead of paginating through /candidates/{id}/activities when only stage data is needed.
idnumberrequiredApplication ID.
hires_list_application_attachments1 paramList all file attachments linked to an application (resumes, cover letters, documents). Returns file metadata and download URLs.
idnumberrequiredApplication ID.
hires_upload_application_attachment2 paramsUpload a file attachment to an application. Provide the file as base64-encoded data. Commonly used for signed documents and interviewer artifacts.
idnumberrequiredApplication ID.fileobjectrequiredFile to upload.
hires_list_application_evaluations2 paramsList all filled evaluation forms for an application. Each evaluation includes the evaluator, summary score (strong-yes to strong-no), and summary text.
idnumberrequiredApplication ID.viewstringResponse shape. Default `summary` replaces `summary_text` with a 200-char `summary_text_preview`. Use `full` only when the full evaluator commentary is needed; call hires_get_evaluation for a single record.
hires_create_interview6 paramsSchedule a new interview for an application. Provide start/end times as Unix timestamps and a list of interviewer user IDs. Location is resolved to an existing record or created automatically.
idnumberrequiredApplication ID.start_timenumberrequiredInterview start time as Unix timestamp (seconds).end_timenumberrequiredInterview end time as Unix timestamp (seconds, must be after start_time).interviewer_idsarrayrequiredList of user IDs who will conduct the interview.locationstringLocation string; resolved to existing record or created automatically.includestringComma-separated relations to embed: candidate, application, job.
hires_batch_move_applications2 paramsMove multiple applications to a pipeline stage in one request. Returns per-item results with partial success support. Max 100 application IDs per request.
idsarrayrequiredApplication IDs to move (max 100).stage_idnumberrequiredTarget pipeline stage ID.
hires_batch_reject_applications2 paramsReject multiple applications in one request with an optional rejection reason. Returns per-item results with partial success support. Max 100 application IDs per request.
idsarrayrequiredApplication IDs to reject (max 100).rejection_reason_idnumberOptional rejection reason ID.
hires_list_jobs11 paramsList jobs with optional filters by status, date range, department, or search query. Returns paginated results. Use for career-site sync, reporting, and external system indexing. Recommended size <= 10: full job payloads include description HTML and can be large; if the response exceeds the budget the tool returns isError:true with error_code=response_too_large and retry hints — reduce size, narrow filters, or fetch a single record via hires_get_job.
company_idnumberFilter by company ID (required only for multi-company API keys)statusstringFilter by job status name (from GET /taxonomy/statuses, e.g. Public, Draft, Archived)created_at_startnumber | stringReturn only jobs created at or after this time. Unix timestamp (seconds) or ISO-8601 string (e.g. 2026-05-11T00:00:00Z). Fractional seconds accepted but truncated.created_at_endnumber | stringReturn only jobs created at or before this time. Unix timestamp (seconds) or ISO-8601 string (e.g. 2026-05-11T00:00:00Z). Fractional seconds accepted but truncated.updated_afternumber | stringReturn only jobs updated at or after this time. Unix timestamp (seconds) or ISO-8601 string (e.g. 2026-05-11T00:00:00Z). Fractional seconds accepted but truncated. Use for incremental sync.department_idnumberFilter jobs by department ID (from GET /taxonomy/departments)qstringSearch by job title or internal title (partial match)includestringComma-separated related resources to embed: workflow, hiring_team, pipeline_stagespagenumberPage number (default 1)sizenumberPage size (default 20)viewstringResponse shape. Default `summary` excludes heavy fields (description HTML, indeed_posting_data, ai_scoring_criteria) and embedded relations — recommended for list operations. Use `full` only when description or include=workflow/hiring_team/pipeline_stages is genuinely needed; call hires_get_job for a single full record.
hires_create_job29 paramsCreate a job with taxonomy, location, salary, and workflow configuration. Primary endpoint for programmatic job publishing. Required fields: status, title, description, location_city, location_country.
company_idnumberTarget company ID. Required only when the API key has access to multiple companies.form_idnumberApplication form ID. If omitted, a new form named after the job title is created with default questions.statusstringrequiredJob status (e.g. Draft, Public). See GET /taxonomy/statuses.titlestringrequiredPublic job title.internal_titlestringInternal-only title visible to the hiring team.internal_job_idstringExternal reference ID from your ATS or HR system.descriptionstringrequiredJob description (HTML allowed).resume_field_statusstringResume field behavior on the application form.location_citystringrequiredJob city.location_countrystringrequiredJob country.location_statestringJob state or region.location_street_addressstringStreet address.location_full_addressstringFull formatted address.location_postal_codestringPostal or ZIP code.salary_minnumberMinimum salary.salary_maxnumberMaximum salary.salary_currencystringSalary currency code (e.g. USD, EUR).salary_periodstringSalary period.is_remotebooleanWhether this is a remote position.employment_type_idnumberEmployment type ID from GET /taxonomy/employment-types.department_idnumberDepartment ID from GET /taxonomy/departments.category_idnumberJob category ID from GET /taxonomy/categories.education_level_idnumberEducation level ID from GET /taxonomy/education-levels.experience_level_idnumberExperience level ID from GET /taxonomy/experience-levels.workflow_idnumberWorkflow ID. If omitted, a new workflow named after the job title is created with default stages.parent_job_idnumberCanonical parent job ID. If provided, the created job becomes a satellite job.knockout_questionsarrayBoolean knockout questions added to the application form.ai_scoring_criteriaarrayAI scoring criteria for evaluating candidates. Diff-replace by id: items with id update existing, items without id create new, existing criteria not in payload are removed. Pass [] to detach all.includestringComma-separated related resources to embed: workflow, hiring_team, pipeline_stages
hires_get_job2 paramsGet full details of a job by ID or alias. Use `include` to load related workflow, hiring team, or pipeline stages data.
idstring | numberrequiredJob ID (numeric) or aliasincludestringComma-separated related resources to embed: workflow, hiring_team, pipeline_stages
hires_update_job29 paramsUpdate mutable job attributes. Only send fields you want to change. Preserves domain-level validation rules.
idstring | numberrequiredJob ID (numeric) or aliasform_idnumberApplication form ID to assign to this job.statusstringJob status (e.g. Draft, Public). See GET /taxonomy/statuses.titlestringPublic job title.internal_titlestringInternal-only title visible to the hiring team.internal_job_idstringExternal reference ID from your ATS or HR system.descriptionstringJob description (HTML allowed).resume_field_statusstringResume field behavior on the application form.location_citystringJob city.location_countrystringJob country.location_statestringJob state or region.location_street_addressstringStreet address.location_full_addressstringFull formatted address.location_postal_codestringPostal or ZIP code.salary_minnumberMinimum salary.salary_maxnumberMaximum salary.salary_currencystringSalary currency code (e.g. USD, EUR).salary_periodstringSalary period.is_remotebooleanWhether this is a remote position.employment_type_idnumberEmployment type ID from GET /taxonomy/employment-types.department_idnumberDepartment ID from GET /taxonomy/departments.category_idnumberJob category ID from GET /taxonomy/categories.education_level_idnumberEducation level ID from GET /taxonomy/education-levels.experience_level_idnumberExperience level ID from GET /taxonomy/experience-levels.workflow_idnumberWorkflow ID to assign to this job.parent_job_idnumberCanonical parent job ID. If provided, the job becomes a satellite job.knockout_questionsarrayBoolean knockout questions added to the application form.ai_scoring_criteriaarrayAI scoring criteria for evaluating candidates. Diff-replace by id: items with id update existing, items without id create new, existing criteria not in payload are removed. Omit to leave existing criteria untouched. Pass [] to detach all.includestringComma-separated related resources to embed: workflow, hiring_team, pipeline_stages
hires_delete_job1 paramDelete a job. Use to align archived/removed positions across integrated platforms.
idstring | numberrequiredJob ID (numeric) or alias
hires_set_job_status3 paramsChange job status via dedicated endpoint. Recommended for publish/unpublish/archive transitions and status automation workflows.
idstring | numberrequiredJob ID (numeric) or aliasstatusstringrequiredNew job status (e.g. Draft, Public, Archived). See GET /taxonomy/statuses.includestringComma-separated related resources to embed: workflow, hiring_team, pipeline_stages
hires_list_job_boards1 paramGet current board publication state for a specific job. Returns which job boards the job is published to. Useful for distribution dashboards and posting audits.
idstring | numberrequiredJob ID (numeric) or alias
hires_publish_to_job_board2 paramsActivate selected job boards for a job. Sets boards to activation queue state. Use for controlled multi-board publishing workflows.
idstring | numberrequiredJob ID (numeric) or aliasboardsarrayArray of board identifiers to activate (e.g. ['indeed', 'linkedin'])
hires_remove_from_job_board2 paramsDeactivate selected board publications for a job. Stops the job from being listed on specified boards.
idstring | numberrequiredJob ID (numeric) or aliasboardsarrayArray of board identifiers to deactivate (e.g. ['indeed', 'linkedin'])
hires_batch_job_boards1 paramGet board publication states for multiple jobs in one request. Optimized for batch monitoring and management UIs.
jobsarrayrequiredArray of job IDs
hires_batch_publish_to_boards2 paramsActivate board publication for multiple jobs in one request. Use for bulk job distribution workflows.
jobsarrayrequiredArray of job IDs to publishboardsarrayArray of board identifiers to activate (e.g. ['indeed', 'linkedin'])
hires_batch_remove_from_boards2 paramsDeactivate board publication for multiple jobs in one request. Use for bulk depublishing workflows.
jobsarrayrequiredArray of job IDs to depublishboardsarrayArray of board identifiers to deactivate (e.g. ['indeed', 'linkedin'])
hires_list_hiring_team1 paramList users currently assigned to a job's hiring team. Useful for notification routing and collaboration tooling.
idstring | numberrequiredJob ID (numeric) or alias
hires_add_hiring_team_member2 paramsAdd a company member to the job's hiring team. Use in workflow setup and ownership automation.
idstring | numberrequiredJob ID (numeric) or aliasuser_idnumberrequiredUser ID to add to the hiring team.
hires_list_job_webhooks1 paramList webhooks configured for job-level events. Use to audit subscriptions and deployment state.
idstring | numberrequiredJob ID (numeric) or alias
hires_create_job_webhook2 paramsRegister a webhook URL for job-related events. Core step for outbound integration setup. URL must be HTTPS.
idstring | numberrequiredJob ID (numeric) or aliasurlstringrequiredWebhook destination URL. Must be HTTPS and point to a public host (no localhost / private / link-local IPs).
hires_delete_job_webhook2 paramsDelete a job webhook subscription by ID. Use for cleanup, rotation, and endpoint migration.
idstring | numberrequiredJob ID (numeric) or aliaswebhook_idnumberrequiredWebhook ID to delete
hires_list_messages7 paramsList messages sent or scheduled from a specific mail account. Returns outbound messages only (sent and scheduled), not received. Useful for monitoring cold outreach campaigns — check pending queue, delivery history, and plan next sends. Recommended size <= 10: messages include full HTML body; if the response exceeds the budget the tool returns isError:true with error_code=response_too_large and retry hints.
from_account_idintegerrequiredID of the mail account (from `GET /companies/mail-accounts` or `GET /users/{user_id}/mail-accounts`).statusstringFilter by message status: `scheduled` (pending send), `sent` (delivered), `all` (both). Default: `all`.date_fromintegerStart of period (unix timestamp, seconds). Filters on scheduled/sent time.date_tointegerEnd of period (unix timestamp, seconds). Filters on scheduled/sent time.pageintegerPage number (1-based). Default: 1.sizeintegerNumber of items per page (1-100). Default: 20.viewstringResponse shape. Default `summary` excludes the HTML body and attachments metadata — recommended for list operations. Use `full` only when message body content is needed.
hires_get_message1 paramGet a scheduled message by ID. Returns scheduler-backed message details including sender account, schedule timestamps, and cancelability.
idintegerrequiredMessage ID.
hires_update_message10 paramsFully update (replace) a scheduled message before send time. All required fields must be provided.
idintegerrequiredMessage ID.toarrayrequiredPrimary recipient email addresses.subjectstringrequiredEmail subject line.bodystringrequiredEmail body as HTML.from_account_idSending mail account ID. If omitted, the API key owner's default mail account is used.ccarrayCarbon-copy recipient email addresses.bccarrayBlind carbon-copy recipient email addresses.scheduled_atUpdated send time as a Unix timestamp in seconds.reply_to_email_idOptional mailbox message ID to reply to.send_in_new_threadbooleanWhether to send the updated message as a new thread.
hires_patch_message10 paramsPartially update a scheduled message before send time. Only provided fields are changed.
idintegerrequiredMessage ID.toarrayPrimary recipient email addresses.subjectstringEmail subject line.bodystringEmail body as HTML.from_account_idSending mail account ID. If omitted, the API key owner's default mail account is used.ccarrayCarbon-copy recipient email addresses.bccarrayBlind carbon-copy recipient email addresses.scheduled_atUpdated send time as a Unix timestamp in seconds.reply_to_email_idOptional mailbox message ID to reply to.send_in_new_threadbooleanWhether to send the updated message as a new thread.
hires_delete_message1 paramCancel a scheduled message before it is processed by the mailbox scheduler.
idintegerrequiredMessage ID.
hires_batch_create_messages1 paramCreate up to 100 scheduled messages in one request. Each item specifies its own candidate_id and message payload. Items are processed independently -- one failure does not stop others. Per-candidate RBAC is enforced for each item.
messagesarrayrequiredArray of message payloads to create (max 100).
hires_get_notification_message1 paramGet a notification email message (e.g. rejection email) by ID. Returns subject, body, sender, recipient, and schedule metadata. Use candidate messages list to discover notification message IDs.
idintegerrequiredNotification email message ID.
hires_update_notification_message4 paramsUpdate a scheduled notification email before it is sent. Change subject, body, and optionally reschedule the send time. Only scheduled (not yet sent) messages can be updated.
idintegerrequiredNotification email message ID.subjectstringrequiredEmail subject line.bodystringrequiredEmail body as HTML.scheduled_atUnix timestamp (seconds) to reschedule send time. If omitted, the existing schedule is preserved.
hires_delete_notification_message1 paramCancel a scheduled notification email before it is sent. Already sent messages cannot be canceled.
idintegerrequiredNotification email message ID.
hires_cancel_all_notification_messages1 paramCancel all scheduled notification emails for a candidate. Already sent notifications are not affected. Returns success even if no scheduled notifications exist.
candidate_idrequiredCandidate ID (numeric) or alias.
hires_list_interviews11 paramsList interviews with optional filters by job, application, candidate, interviewer, date, or timestamps for incremental sync. Returns paginated results. **Always pass `include=candidate`** when surfacing results in the agenda widget — without it, the widget can only show candidate IDs and cannot link cards to candidate profiles. Avoid include=job on large pages (embeds full job description per interview); if the response exceeds the budget the tool returns isError:true with error_code=response_too_large and retry hints.
company_idnumberFilter by company ID. Omit for all accessible companies.job_idnumberFilter interviews by job IDapplication_idnumberFilter interviews by application IDcandidate_idnumberFilter interviews by candidate IDinterviewer_user_idnumberFilter interviews by interviewer user IDdatestringFilter by interview date (YYYY-MM-DD, UTC)created_afternumber | stringReturn only interviews created at or after this time. Unix timestamp (seconds) or ISO-8601 string (e.g. 2026-05-11T00:00:00Z). Fractional seconds accepted but truncated.updated_afternumber | stringReturn only interviews updated at or after this time. Unix timestamp (seconds) or ISO-8601 string (e.g. 2026-05-11T00:00:00Z). Fractional seconds accepted but truncated.includestringComma-separated related resources to embed: candidate, application, job. Set to `candidate` (or include `candidate` in the list) so the widget can link interview cards to candidate profiles in the backoffice.pagenumberPage number (default 1)sizenumberPage size (default 20)
hires_get_interview2 paramsGet full details of a specific interview by ID. Use `include` to embed related candidate, application, or job data.
idnumberrequiredInterview IDincludestringComma-separated related resources to embed: candidate, application, job
hires_list_notes5 paramsList notes by candidate. Returns paginated discussion notes for a candidate. Use for shared recruiter context and timeline synchronization. Notes can contain long free-form text; if the response exceeds the budget the tool returns isError:true with error_code=response_too_large and retry hints.
candidate_idstring | numberrequiredCandidate ID (numeric) or aliasincludestringInclude related resources: 'user' for author details, 'candidate' for full candidate payload with url_backoffice.pagenumberPage numbersizenumberPage sizeviewstringResponse shape. Default `summary` replaces the full note body with a 200-char `body_preview`. Use `full` only when the full note text is genuinely needed; call hires_get_note for a single record.
hires_create_note6 paramsCreate a discussion note for a candidate. Supports visibility control (all or private) and @mentions with email notifications. **Always pass `include=candidate`** when surfacing results in the widget — without it, the confirmation card can only show the candidate ID and cannot link to their backoffice profile.
candidate_idstring | numberrequiredCandidate ID (numeric) or aliasbodystringrequiredNote content. Supports HTML.user_idnumberAuthor user ID. If omitted, the authenticated user is usedvisibilitystringVisibility: 'all' (default) or 'private'mention_user_idsarrayArray of user IDs to mention. Mentioned users receive email notifications.includestringInclude related resources, e.g. 'user' for author details, 'candidate' for full candidate object with url_backoffice. Set to `candidate` so the widget can link the candidate name to their backoffice profile.
hires_get_note2 paramsGet a single note with author and visibility metadata. Use include=user to load author details.
idnumberrequiredNote IDincludestringInclude related resources: 'user' for author details, 'candidate' for full candidate payload with url_backoffice.
hires_update_note4 paramsUpdate note body and/or visibility without creating a new timeline item. Use for corrections and moderation workflows.
idnumberrequiredNote IDbodystringNote content. Supports HTML.visibilitystringVisibility: 'all' (default) or 'private'includestringInclude related resources: 'user' for author details, 'candidate' for full candidate payload with url_backoffice.
hires_delete_note1 paramDelete a note. Use for moderation policies and data cleanup operations.
idnumberrequiredNote ID
hires_get_evaluation1 paramGet a filled evaluation form with all answers. Returns evaluator info, summary score, summary text, and individual question answers. Use for detailed review of evaluator feedback on a candidate application.
idnumberrequiredEvaluation form ID
hires_list_forms4 paramsList application forms (paginated). Returns forms with their questions for the target company. Recommended size <= 10: each form embeds its full question list; if the response exceeds the budget the tool returns isError:true with error_code=response_too_large and retry hints.
company_idnumberTarget company ID.pagenumberPage number.sizenumberPage size.viewstringResponse shape. Default `summary` omits the embedded `questions` array. Use `full` only when the full question list is needed; call hires_get_form for a single form.
hires_create_form3 paramsCreate a new application form, optionally attaching existing questions by ID.
namestringrequiredForm name.company_idnumberTarget company ID.questionsarrayArray of question IDs to attach to this form.
hires_get_form1 paramGet form details including all questions with their statuses.
idnumberrequiredForm ID.
hires_update_form3 paramsUpdate form name and question composition.
idnumberrequiredForm ID.namestringrequiredForm name.questionsarrayArray of question IDs to attach to this form.
hires_delete_form1 paramDelete an application form.
idnumberrequiredForm ID.
hires_update_form_question3 paramsUpdate the status (required/optional/hidden) of a question inside a form.
form_idnumberrequiredForm ID.question_idnumberrequiredQuestion ID.statusstringrequiredQuestion visibility on this form: required, optional, or hidden.
hires_list_email_templates4 paramsList email templates for the target company. Returns paginated results with template name, subject, and body. Recommended size <= 10: templates include the full HTML body; if the response exceeds the budget the tool returns isError:true with error_code=response_too_large and retry hints — reduce size or fetch a single template via hires_get_email_template.
company_idnumberTarget company IDpagenumberPage number (default 1)sizenumberPage size (default 25)viewstringResponse shape. Default `summary` excludes the HTML template body. Use `full` only when body content is needed; call hires_get_email_template for a single record.
hires_create_email_template4 paramsCreate a new email template with name, subject, and body. Subject and body support placeholders like {{first_name}}, {{job_title}}. To embed placeholders: 1) GET /template-placeholders to list them, 2) POST /template-placeholders/prepare to get the HTML tag, 3) insert the tag into the body.
namestringrequiredTemplate namesubjectstringrequiredEmail subject line (supports placeholders like {{first_name}}, {{job_title}})bodystringrequiredEmail body HTML (supports placeholders)company_idnumberTarget company ID
hires_get_email_template1 paramGet full details of a specific email template by ID, including subject and body content.
idnumberrequiredEmail template ID
hires_update_email_template4 paramsUpdate an existing email template. Only provided fields are overwritten; omitted fields keep their current values. To add placeholders, use the same workflow as creation.
idnumberrequiredEmail template IDnamestringTemplate namesubjectstringEmail subject line (supports placeholders)bodystringEmail body HTML (supports placeholders)
hires_delete_email_template1 paramSoft-delete an email template. Templates already used in automations will stop being available for new actions.
idnumberrequiredEmail template ID
hires_list_nurture_campaigns3 paramsList nurture campaigns with pagination. Returns campaign summaries including steps.
company_idnumberTarget company ID (optional if API key is scoped to one company)pagenumberPage number (default 1)sizenumberPage size (default 25)
hires_create_nurture_campaign11 paramsCreate a nurture campaign with steps. Steps are executed sequentially; each step has a type (email, sms, voicemail, move_to_next_stage, assign_tag, assign_task) with type-specific fields. Optionally bind to a workflow stage.
company_idnumberTarget company ID (optional if API key is scoped to one company)titlestringrequiredCampaign nameworkflow_idnumberWorkflow ID to bind the campaign tostage_idnumberStage ID that triggers the campaigndelay_timenumberDelay time in secondsrelative_daysnumberRelative days for schedulerelative_timenumberRelative time for schedule (seconds from midnight)timezonestringIANA timezone, e.g. "America/New_York"send_to_allbooleanSend to all candidates or only new ones (default false)response_move_to_stage_idnumberStage to move candidate to when they replystepsarrayrequiredCampaign steps (at least one required)
hires_get_nurture_campaign1 paramGet a single nurture campaign by ID with all steps and configuration details.
idnumberrequiredNurture campaign ID
hires_update_nurture_campaign11 paramsUpdate an existing nurture campaign. Pass all steps -- mark removed steps with is_deleted=true. Existing steps must include their id.
idnumberrequiredNurture campaign IDtitlestringrequiredCampaign nameworkflow_idnumberWorkflow ID this campaign is associated withstage_idnumberPipeline stage ID that triggers the campaigndelay_timenumberDelay in minutes before the first steprelative_daysnumberNumber of days offset for schedulingrelative_timenumberTime of day for scheduled sendstimezonestringTimezone for scheduled sends, e.g. "America/New_York"send_to_allbooleanWhether to send to all candidates or only new onesresponse_move_to_stage_idnumberStage ID to move candidates to when they respondstepsarrayrequiredAll steps -- mark removed steps with is_deleted=true
hires_delete_nurture_campaign1 paramDelete (soft-delete) a nurture campaign. Active campaign executions will be stopped.
idnumberrequiredNurture campaign ID
hires_list_users3 paramsList users for the target company with role context. Returns paginated results useful for access reviews and hiring-team management.
company_idnumberCompany ID to list users forpagenumberPage number (default 1)sizenumberPage size (default 25)
hires_get_user1 paramGet a single user by ID within current tenant scope. Use for identity resolution in automation flows. The `default_mail_account_id` field can be used as `from_account_id` when sending emails.
idnumberrequiredUser ID
hires_list_user_mail_accounts3 paramsList mail accounts connected to a user. Use to resolve `from_account_id` before creating scheduled emails via POST /candidates/{id}/messages.
idnumberrequiredUser IDpagenumberPage number (default 1)sizenumberPage size (default 25)
hires_list_companies2 paramsList partner-accessible companies with pagination. Use for tenant discovery and management panels.
pagenumberPage number (default 1)sizenumberPage size (default 25)
hires_create_company8 paramsCreate a client company (partner tenant) — provisions its public career-site URL (slug) and public branding (logo, name). Typical entrypoint for multi-tenant onboarding.
namestringrequiredCompany namecompany_owner_emailstringrequiredCompany owner email addresscompany_owner_namestringrequiredCompany owner full namewebsitestringCompany website URLurlstringCompany profile URLcompany_owner_phonestringCompany owner phone numberis_staffing_agencybooleanWhether this company is a staffing agencylogoobjectCompany logo file
hires_get_company1 paramGet company profile and owner metadata. Use before updates or ownership-sensitive actions.
idnumberrequiredCompany ID
hires_update_company9 paramsUpdate company profile, owner contact data, and optional logo — changes the tenant's public career-site URL (slug), name, and logo (public branding). Supports partner-operated account management.
idnumberrequiredCompany IDnamestringCompany namewebsitestringCompany website URLurlstringCompany profile URLcompany_owner_emailstringCompany owner email addresscompany_owner_namestringCompany owner full namecompany_owner_phonestringCompany owner phone numberis_staffing_agencybooleanWhether this company is a staffing agencylogoobjectCompany logo file
hires_delete_company1 paramDelete (soft-delete) a company — takes its public career site offline. Use for lifecycle control in partner tenancy management.
idnumberrequiredCompany ID
hires_list_company_mail_accounts2 paramsList all mail accounts for all users in the current company. Use to resolve `from_account_id` before creating scheduled emails.
pagenumberPage number (default 1)sizenumberPage size (default 25)
hires_list_company_id_mail_accounts3 paramsList all mail accounts for all users in a specific company. The company must be accessible (own company or a client).
idnumberrequiredCompany IDpagenumberPage number (default 1)sizenumberPage size (default 25)
hires_restore_company1 paramRestore a previously deleted company and re-enable it for active use — its public career site comes back online. Use for recovery and rollback scenarios.
idnumberrequiredCompany ID
hires_list_webhooks1 paramList webhook subscriptions configured at company scope.
idnumberrequiredCompany ID
hires_create_webhook2 paramsCreate a company-scoped webhook subscription. Use for outbound company-level event integrations.
idnumberrequiredCompany IDurlstringrequiredWebhook destination URL. Must be HTTPS and point to a public host (no localhost / private / link-local IPs).
hires_delete_webhook2 paramsDelete a company-scoped webhook subscription by ID. Use for endpoint retirement and security rotation.
idnumberrequiredCompany IDwebhook_idnumberrequiredWebhook ID
hires_list_sources1 paramList candidate sources for the company. Use for attribution sync and reporting consistency.
company_idnumberTarget company ID (uses default company when omitted)
hires_list_originsList candidate origin taxonomy values. Use for attribution analytics and source normalization.
hires_list_rejection_reasons1 paramList configured rejection reasons for the company. Use to validate rejection actions and analytics.
company_idnumberTarget company ID (uses default company when omitted)
hires_list_statusesList job status labels (draft, published, on_hold, closed, archived). Cache to validate job status updates.
hires_list_departments1 paramList departments for the company. Use for job organization filters and reporting dimensions.
company_idnumberTarget company ID (uses default company when omitted)
hires_list_categoriesList global job categories. Use for job classification and consistent taxonomy mapping.
hires_list_education_levelsList education level taxonomy values. Useful for job requirements and structured matching.
hires_list_experience_levelsList experience level taxonomy values for role seniority modeling.
hires_list_employment_typesList supported employment types (full-time, part-time, contract, etc.). Use for validation and normalization.
hires_list_boardsList available publishing boards with metadata. Use for distribution setup and board selection.
hires_list_tags1 paramList all tags for the company. Returns paginated results. Recommended to cache for fast tagging UX.
company_idnumberTarget company ID (uses default company when omitted)
hires_list_workflows1 paramList workflows with embedded stages for the company. Use to build stage-aware integrations and routing rules.
company_idnumberTarget company ID (uses default company when omitted)
hires_list_workflow_stages3 paramsList pipeline stages filtered by workflow or job. Useful for transition UIs and workflow validation.
company_idnumberTarget company ID (uses default company when omitted)workflow_idnumberFilter stages by workflow ID (from hires_list_workflows)job_idnumberFilter stages by job ID (returns stages from the job's assigned workflow)
hires_get_workflow_stages2 paramsGet stages for a specific workflow by ID. Equivalent to hires_list_workflow_stages with workflow_id filter.
idnumberrequiredWorkflow IDcompany_idnumberTarget company ID (uses default company when omitted)
hires_list_questions3 paramsList paginated question catalog for the company.
company_idnumberTarget company ID (uses default company when omitted)pagenumberPage number (default 1)sizenumberPage size (default 25)
hires_create_question4 paramsCreate a reusable question with optional answer options for dropdown types. Used by forms and questionnaires.
textstringrequiredQuestion texttypestringrequiredQuestion type (from hires_list_question_types)company_idnumberTarget company ID (uses default company when omitted)optionsarrayAnswer options (for select/multiselect question types)
hires_get_question1 paramGet a question definition including type and options by ID.
idnumberrequiredQuestion ID
hires_update_question4 paramsUpdate text, type, or options of an existing question definition.
idnumberrequiredQuestion IDtextstringrequiredQuestion texttypestringrequiredQuestion type (from hires_list_question_types)optionsarrayAnswer options (for select/multiselect question types)
hires_delete_question1 paramDelete a reusable question from the catalog. Use cautiously when deprecating question banks.
idnumberrequiredQuestion ID
hires_list_question_typesList available question types supported by the platform. Use to drive dynamic form builders.
hires_list_template_placeholders6 paramsList available placeholders for email templates with pagination. Use `type` to filter by category, `q` to search by label. Discover placeholders here, then use hires_prepare_template_placeholders to get an HTML tag for insertion.
company_idnumberTarget company ID (uses default company when omitted)typestringFilter by placeholder typeis_notificationnumberInclude notification-specific system placeholders (0 or 1, default 0)qstringFilter placeholders by label (case-insensitive substring match)pagenumberPage number (default 1)sizenumberPage size (default 25)
hires_prepare_template_placeholders6 paramsConvert a placeholder reference into an HTML tag for insertion into an email template body.
typestringrequiredPlaceholder type (system, candidate_column, job_variable, questionnaire_link, scheduling_link)identifierstringPlaceholder identifierqas_profile_question_idnumberProfile question IDform_question_idnumberForm question IDsystem_column_titlestringSystem column titlejob_variable_idnumberJob variable ID
hires_get_billingGet billing/pricing capability flags for the current company. Use before invoking paid-only API behaviors.
hires_submit_feedback5 paramsSubmit structured API feedback about missing features, issues, or workflow improvements. Rate limited to 5 requests per hour.
descriptionstringrequiredDescription of the issue or feedback (max 2000 chars)endpointstringThe API endpoint this feedback relates to, e.g. /v2/candidatesissue_typestringCategory of the issuesuggested_improvementstringSuggested solution or improvement (max 2000 chars)contextobjectArbitrary context object (max 4KB JSON)
hires_download_attachment1 paramDownload an attachment (resume, candidate file, application file, mail attachment, call recording). Pass the absolute URL returned by another endpoint (e.g. `message.attachments[].url`, `cv.url`, `resume.url`) — it MUST belong to the configured 100Hires API host; other hosts are rejected to avoid leaking the Bearer token. Returns `{file_name, mime_type, size, data}` where `data` is base64-encoded bytes. Files larger than 25 MB are rejected up-front (Content-Length check / streaming abort) without being loaded into memory.
urlstringrequiredAbsolute attachment URL returned by another API response (e.g. https://api.100hires.com/v2/attachments/mail_attachment/<uuid>/<file_name>). Must match the API host.
hires_upload_attachment4 paramsUpload a file and create an attachment. Supported categories: `voicemail` (wav/mp3, max 20 MB, no object_id — returned `uuid` is usable as `attachment_uuid` in nurture voicemail steps); `candidate` (candidate ID); `application` (application ID); `candidate_comment` (comment ID); `job_note` (job-note ID); `company_favicon`/`company_header`/`company_link_preview` (company ID). Object ownership is strictly verified against the authenticated API key's company. Returns `{uuid, url, file, relative_time}`.
categorystringrequiredAttachment category. Determines allowed extensions and object_id semantics.company_idnumber | nullTarget company ID. Needed for partner API keys managing multiple client companies. Omitted → defaults to the authenticated company. The object_id must belong to this company (strict match).object_idnumber | nullTarget object ID (candidate/application/comment/job-note/company, per category). Omit for `voicemail`.fileobjectrequiredFile payload.
hires_list_career_jobs7 paramsList publicly visible jobs for a company career site. Supports filtering by department, employment type, city, and country. Use to power a custom careers page.
company_slugstringrequiredCompany slug identifying the career sitedepartment_idnumberFilter by department IDemployment_type_idnumberFilter by employment type ID (e.g. Full-time, Part-time)citystringFilter by job city (exact match)countrystringFilter by job country (exact match)pagenumberPage number (default 1)sizenumberPage size (default 25)
hires_get_career_job2 paramsGet full details of a single public job by ID. Returns salary, education level, experience level, and other extended fields. Returns 404 for draft, archived, or internal jobs.
company_slugstringrequiredCompany slug identifying the career siteidnumberrequiredJob ID
hires_submit_career_application10 paramsSubmit a job application on behalf of a candidate. Creates a candidate record and triggers the career-site pipeline automation.
company_slugstringrequiredCompany slug identifying the career sitejob_idnumberrequiredJob ID to apply tofirst_namestringrequiredApplicant first namelast_namestringrequiredApplicant last nameemailstringrequiredApplicant email addressphonestring | nullApplicant phone numberresumeResume file upload (base64 encoded)linkedin_urlstring | nullApplicant LinkedIn profile URLsourcestring | nullApplication source identifieranswersArray of form answer objects
README.md
100Hires MCP Server
Official Model Context Protocol server for 100Hires — the applicant tracking system for recruiting teams.
Connect ChatGPT, Claude, Cursor, or any MCP-compatible AI assistant to your 100Hires account and manage candidates, jobs, applications, interviews, messages, and more — all without writing code.
Full documentation, screenshots, and demo: https://100hires.com/mcp
Quick connect
The server is hosted at https://mcp.100hires.com/mcp with OAuth 2.1 authentication (DCR + PKCE). No install required — just point your client at the URL and authenticate via the browser.
Native HTTP transport (recommended)
claude.ai Cowork (web)
Settings → Custom Connectors → Add → URL: https://mcp.100hires.com/mcp → complete OAuth.
Claude Code CLI
claude mcp add --transport http 100hires https://mcp.100hires.com/mcp
Or in .mcp.json:
{
"mcpServers": {
"100hires": {
"type": "http",
"url": "https://mcp.100hires.com/mcp"
}
}
}
Claude Desktop
Settings → Developer → Custom Connectors → Add Custom Connector → URL: https://mcp.100hires.com/mcp.
Cursor
~/.cursor/mcp.json:
{
"mcpServers": {
"100hires": {
"type": "http",
"url": "https://mcp.100hires.com/mcp"
}
}
}
Codex (OpenAI CLI)
~/.codex/config.toml:
[mcp_servers.100hires]
url = "https://mcp.100hires.com/mcp"
VS Code Copilot
.vscode/mcp.json:
{
"servers": {
"100hires": {
"type": "http",
"url": "https://mcp.100hires.com/mcp"
}
}
}
Fallback for stdio-only clients (mcp-remote shim)
For older clients that don't yet support HTTP transport natively, use the third-party mcp-remote bridge:
{
"mcpServers": {
"100hires": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.100hires.com/mcp"]
}
}
}
What you can do
The server exposes the full 100Hires API as MCP tools, covering:
- Candidates — list, create, update, tag, attach files, view timeline, message
- Applications — list, move through pipeline stages, advance, hire, reject, transfer
- Jobs — list, create, publish to job boards, manage hiring team, set up webhooks
- Interviews — schedule, list, retrieve details
- Messages & email templates — schedule, batch-send, manage notification emails, build nurture campaigns
- Notes & evaluations — full CRUD for application-level feedback
- Forms & questions — application form management
- Workflows — pipeline stages, reusable questions
- Companies, users, taxonomy — sources, statuses, departments, categories, tags, etc.
See the full tool reference at https://100hires.com/mcp/tools.
Authentication
The server uses OAuth 2.1 with Dynamic Client Registration (RFC 7591) and PKCE per the MCP authorization spec.
Compatible clients discover the OAuth metadata automatically — no manual API key setup required. You can revoke a connected client at any time from Settings → API → Connected AI clients in your 100Hires account.
Status & registry
- Listed in the Official MCP Registry as
com.100hires/100hires - Listed on Glama
- Submitted to PulseMCP, mcp.directory, LobeHub, MCP Server Finder, and Smithery
Support
- Docs: https://100hires.com/mcp
- API reference: https://100hires.com/api
- Issues / feedback: support@100hires.com
License
MIT — see LICENSE.
Recommended MCP Servers
How it compares
Hosted ATS MCP integration, not a generic job-posting skill or LinkedIn scraper.
FAQ
What does 100Hires AI ATS & Recruitment Software do?
Official 100Hires MCP: AI ATS & Recruitment Software for candidates, jobs, applications, interviews.
When should I use 100Hires AI ATS & Recruitment Software?
User asks about 100Hires AI ATS & Recruitment Software mcp, official 100hires mcp: ai ats & recruitment software for candidates, j.
Is this MCP server safe to install?
Review the Security Audits panel on this page before installing in production.