# 100Hires - AI ATS & Recruitment Software (remote · mcp.100hires.com)

Official 100Hires MCP: AI ATS & Recruitment Software for candidates, jobs, applications, interviews.

- Trust score: 84/100 (high trust)
- Change this week: +8
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `mcp.100hires.com`: 84/100 (this document), [markdown](https://verifymcp.io/servers/com-100hires-100hires/mcp.md), [page](https://verifymcp.io/servers/com-100hires-100hires/mcp)

## Channel facts

- Endpoint: `https://mcp.100hires.com/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.0.4`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Endpoint Security**: 94/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
  - The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 85/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Tool/resource definitions use about 13972 tokens (~99/item across 141 items; 133 tools + 8 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.
  - Supports UI / widget rendering.

## Install

### Claude

```bash
claude mcp add --transport http com-100hires-100hires https://mcp.100hires.com/mcp
```

### Codex

```toml
[mcp_servers.com-100hires-100hires]
url = "https://mcp.100hires.com/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-100hires-100hires": {
      "type": "remote",
      "url": "https://mcp.100hires.com/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-100hires-100hires --url https://mcp.100hires.com/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  com-100hires-100hires:
    url: "https://mcp.100hires.com/mcp"
```

### Other

```json
{
  "mcpServers": {
    "com-100hires-100hires": {
      "type": "http",
      "url": "https://mcp.100hires.com/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 84, +1)

No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-01 (score 83, +1)

No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-31 (score 82, +5)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 77, −1)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-29 (score 78, +1)

No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-28 (score 77, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-27 (score 76, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-26 (score 76)

First indexed and scored.

## MCP tools (133)

### `hires_list_candidates` (~461 tokens)

Search candidates

List 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.

Input parameters:

- `company_id` (number): Filter by company ID. Required only when the API key has access to multiple companies.
- `created_after` (number|string): Return 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.
- `email` (string): Exact candidate email filter.
- `full_name` (string): Candidate full-name filter.
- `include` (string): Comma-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 (…
- `job_id` (number): Filter candidates by job ID.
- `linkedin` (string): Search by LinkedIn profile URL or alias (e.g. 'johndoe' or full URL).
- `page` (number): Page number (1-based).
- `q` (string): Plain-text search by name or email. Supports partial matches.
- `size` (number): Number of items per page.
- `stage_id` (number): Filter candidates by pipeline stage ID. Best used together with job_id.
- `updated_after` (number|string): Return 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.
- `view` (string): Response 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 recor…

### `hires_create_candidate` (~367 tokens)

Create 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.

Input parameters:

- `city` (string): Candidate city for location/timezone resolution.
- `company_id` (number): Target company ID. Required only when the API key has access to multiple companies.
- `country` (string): Candidate country name or ISO code.
- `email` (string): Candidate email address. Used for deduplication.
- `first_name` (string): Candidate first name.
- `job_id` (number): Job ID to create an application for this candidate.
- `last_name` (string): Candidate last name.
- `phone` (string): Candidate phone number.
- `profile` (object): Key-value map of profile field answers. Keys can be question text or question_id. Example: {"Current job title": "Senior Engineer"}.
- `resume_text` (string): Plain-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.
- `stage_id` (number): Pipeline stage ID for the initial application. Requires job_id.
- `state` (string): Candidate state or region.
- `timezone` (string): IANA timezone (e.g. 'America/Los_Angeles'). Auto-resolved from city/country if omitted.

### `hires_get_candidate` (~40 tokens)

Get candidate

Get full candidate data including application summaries by candidate ID or alias.

Input parameters:

- `id` (string|number, required): Candidate ID (integer) or alias (string).

### `hires_update_candidate` (~290 tokens)

Update 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.

Input parameters:

- `city` (string): Candidate city for location/timezone resolution.
- `country` (string): Candidate country name or ISO code.
- `email` (string): Candidate email address.
- `first_name` (string): Candidate first name.
- `id` (string|number, required): Candidate ID (integer) or alias (string).
- `job_id` (number): Job ID to create a new application for this candidate.
- `last_name` (string): Candidate last name.
- `phone` (string): Candidate phone number.
- `profile` (object): Key-value map of profile field answers. Keys can be question text or question_id.
- `resume_text` (string): Plain-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.
- `stage_id` (number): Pipeline stage ID for the application. Requires job_id.
- `state` (string): Candidate state or region.
- `timezone` (string): IANA timezone (e.g. 'America/Los_Angeles'). Auto-resolved from city/country if omitted.

### `hires_delete_candidate` (~37 tokens)

Permanently delete a candidate by ID or alias.

Input parameters:

- `id` (string|number, required): Candidate ID (integer) or alias (string).

### `hires_list_candidate_tags` (~45 tokens)

List all tags assigned to a candidate. Useful for segmentation and audience-based automations.

Input parameters:

- `id` (string|number, required): Candidate ID (integer) or alias (string).

### `hires_add_candidate_tags` (~62 tokens)

Add one or more tags to a candidate. Used for campaign tagging, qualification labels, and source attribution.

Input parameters:

- `id` (string|number, required): Candidate ID (integer) or alias (string).
- `tags` (array, required): Array of tag strings to add.

### `hires_remove_candidate_tag` (~48 tokens)

Remove a specific tag from a candidate.

Input parameters:

- `id` (string|number, required): Candidate ID (integer) or alias (string).
- `tag` (string, required): The tag string to remove.

### `hires_batch_add_tags` (~58 tokens)

Add tags to multiple candidates in one request (max 100). Returns per-item results with partial success support.

Input parameters:

- `ids` (array, required): Candidate IDs to tag (max 100).
- `tags` (array, required): Tag names to attach.

### `hires_batch_remove_tags` (~60 tokens)

Remove tags from multiple candidates in one request (max 100). Returns per-item results with partial success support.

Input parameters:

- `ids` (array, required): Candidate IDs to remove tags from (max 100).
- `tags` (array, required): Tag names to remove.

### `hires_list_candidate_files` (~113 tokens)

List 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.

Input parameters:

- `id` (string|number, required): Candidate ID (integer) or alias (string).

### `hires_upload_candidate_file` (~129 tokens)

Upload 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.

Input parameters:

- `file` (object, required): File to upload (base64 payload).
- `id` (string|number, required): Candidate ID (integer) or alias (string).

### `hires_get_candidate_resume` (~112 tokens)

Get 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.

Input parameters:

- `id` (string|number, required): Candidate ID (integer) or alias (string).
- `include` (string): Comma-separated optional fields. Use 'text_content' to add a `text` field with parsed plain-text resume content.

### `hires_list_candidate_activities` (~355 tokens)

List 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.

Input parameters:

- `event_type` (string): Comma-separated event types to filter. Supported: comment, copilot_response, stage_moved, automation_action_triggered, assign_job, enrichment, call, validate_emails, profile_mutation, qualification,…
- `id` (string|number, required): Candidate ID (integer) or alias (string).
- `page` (number): Page number (1-based).
- `since` (number|string): Inclusive lower bound on event timestamp. Unix timestamp (seconds) or ISO-8601 string (e.g. 2026-04-01T00:00:00Z). Fractional seconds accepted but truncated.
- `size` (number): Page size. Values above 100 are rejected with 400. Default 20, max 100.
- `until` (number|string): Inclusive upper bound on event timestamp. Unix timestamp (seconds) or ISO-8601 string (e.g. 2026-04-01T00:00:00Z). Fractional seconds accepted but truncated.
- `view` (string): Response 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…

### `hires_disqualify_candidate` (~71 tokens)

Disqualify a candidate from all active applications. Optionally provide rejection reason IDs. Returns affected application IDs.

Input parameters:

- `id` (string|number, required): Candidate ID (integer) or alias (string).
- `reasons` (array): Array of rejection reason IDs from GET /taxonomy/rejection-reasons.

### `hires_list_candidate_interviews` (~72 tokens)

List all interviews for a candidate across all applications. Useful for timeline views and scheduling conflict detection.

Input parameters:

- `id` (string|number, required): Candidate ID (integer) or alias (string).
- `page` (number): Page number (1-based).
- `size` (number): Number of items per page.

### `hires_list_candidate_messages` (~165 tokens)

List 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.

Input parameters:

- `id` (string|number, required): Candidate ID (integer) or alias (string).
- `is_scheduled` (number): Set to 1 to return only scheduled (not yet sent) messages.
- `page` (number): Page number (1-based).
- `size` (number): Number of items per page.
- `view` (string): Response shape. Default `summary` excludes the HTML body and attachments metadata. Use `full` only when message body content is needed.

### `hires_send_candidate_message` (~221 tokens)

Schedule an email message to a candidate. If scheduled_at is omitted, the message is scheduled for 15 minutes after creation.

Input parameters:

- `application_id` (number|null): Optional application ID to link this message to.
- `bcc` (array): Blind carbon-copy recipient email addresses.
- `body` (string, required): Email body as HTML.
- `cc` (array): Carbon-copy recipient email addresses.
- `from_account_id` (number|null): Sending mail account ID. If omitted, uses the API key owner's default mail account.
- `id` (string|number, required): Candidate ID (integer) or alias (string).
- `reply_to_email_id` (number|null): Optional mailbox message ID to reply to.
- `scheduled_at` (number|null): Unix timestamp (seconds) for when to send. Defaults to 15 minutes after creation.
- `send_in_new_thread` (boolean): Send as a new email thread instead of replying in an existing one.
- `subject` (string, required): Email subject line.
- `to` (array, required): Primary recipient email addresses.

### `hires_list_applications` (~491 tokens)

List applications (pipeline view)

List 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.

Input parameters:

- `ai_score_max` (number): Return only applications with ai_score <= this value.
- `ai_score_min` (number): Return only applications with ai_score >= this value.
- `candidate_id` (number): Filter applications by candidate ID.
- `company_id` (number): Filter by company ID. Omit for all accessible companies.
- `created_after` (number|string): Return 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.
- `include` (string): Comma-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.…
- `job_id` (number): Filter applications by job ID.
- `page` (number): Page number (default 1).
- `size` (number): Items per page (default 25, max 100).
- `sort` (string): Sort order. Prefix with - for descending. Default: -created_at.
- `stage_id` (number): Filter applications by pipeline stage ID. Best used together with job_id.
- `status` (string): Filter by application status: pending (active), hired, or rejected.
- `updated_after` (number|string): Return 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.

### `hires_create_application` (~121 tokens)

Create an application by linking an existing candidate to a job. Use for sourcing workflows and manual application ingestion. The candidate must already exist.

Input parameters:

- `candidate_id` (string|number, required): Candidate ID (numeric) or alias.
- `cv` (object): Optional CV/resume to attach.
- `include` (string): Comma-separated relations to embed: candidate, cv.text, job.
- `job_id` (number, required): Job ID to apply the candidate to.
- `stage_id` (number): Pipeline stage ID. If omitted, defaults to the first stage.

### `hires_get_application` (~58 tokens)

Get full application details including stage, status, and rejection context. Recommended before mutating stage transitions.

Input parameters:

- `id` (number, required): Application ID.
- `include` (string): Comma-separated relations to embed: candidate, cv.text, job.

### `hires_update_application` (~113 tokens)

Update application fields such as stage, disqualification flag, and CV. For explicit stage transitions prefer hires_move_application or hires_advance_application.

Input parameters:

- `cv` (object): Replace or attach a CV.
- `id` (number, required): Application ID.
- `include` (string): Comma-separated relations to embed: candidate, cv.text, job.
- `is_disqualified` (boolean): Set to true to disqualify the candidate on this application.
- `stage_id` (number): Move application to this pipeline stage.

### `hires_delete_application` (~34 tokens)

Permanently delete an application. This removes it from all list and view queries.

Input parameters:

- `id` (number, required): Application ID.

### `hires_move_application` (~82 tokens)

Moves 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).

Input parameters:

- `id` (number, required): Application ID.
- `include` (string): Comma-separated relations to embed: candidate, cv.text, job.
- `stage_id` (number, required): Target pipeline stage ID.

### `hires_advance_application` (~132 tokens)

Advance application to next stage

Advance 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.

Input parameters:

- `id` (number, required): Application ID.
- `include` (string): Comma-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_application` (~71 tokens)

Mark an application as hired. This is the finalization step in a hiring workflow. The application status changes to 'hired' and hired_at is set.

Input parameters:

- `id` (number, required): Application ID.
- `include` (string): Comma-separated relations to embed: candidate, cv.text, job.

### `hires_reject_application` (~112 tokens)

Reject 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.

Input parameters:

- `id` (number, required): Application ID.
- `include` (string): Comma-separated relations to embed: candidate, cv.text, job.
- `rejection_reason_id` (number): Rejection reason ID from GET /taxonomy/rejection-reasons.
- `suppress_notification` (boolean): Set to true to skip sending the rejection email to the candidate.

### `hires_unreject_application` (~60 tokens)

Undo a rejection and reopen a previously rejected application. The status returns to active and rejected_at is cleared.

Input parameters:

- `id` (number, required): Application ID.
- `include` (string): Comma-separated relations to embed: candidate, cv.text, job.

### `hires_transfer_application` (~109 tokens)

Transfer an application to another job. A new application is created on the target job. Optionally specify a stage on the target job's pipeline.

Input parameters:

- `id` (number, required): Application ID to transfer.
- `include` (string): Comma-separated relations to embed: candidate, cv.text, job.
- `job_id` (number, required): Target job ID to transfer the application to.
- `stage_id` (number): Pipeline stage ID on the target job. If omitted, defaults to the first stage.

### `hires_get_ai_score` (~55 tokens)

Get 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.

Input parameters:

- `id` (number, required): Application ID.

### `hires_list_application_stage_history` (~133 tokens)

Get 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.

Input parameters:

- `id` (number, required): Application ID.

### `hires_list_application_attachments` (~44 tokens)

List all file attachments linked to an application (resumes, cover letters, documents). Returns file metadata and download URLs.

Input parameters:

- `id` (number, required): Application ID.

### `hires_upload_application_attachment` (~57 tokens)

Upload a file attachment to an application. Provide the file as base64-encoded data. Commonly used for signed documents and interviewer artifacts.

Input parameters:

- `file` (object, required): File to upload.
- `id` (number, required): Application ID.

### `hires_list_application_evaluations` (~101 tokens)

List all filled evaluation forms for an application. Each evaluation includes the evaluator, summary score (strong-yes to strong-no), and summary text.

Input parameters:

- `id` (number, required): Application ID.
- `view` (string): Response 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…

### `hires_create_interview` (~144 tokens)

Schedule 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.

Input parameters:

- `end_time` (number, required): Interview end time as Unix timestamp (seconds, must be after start_time).
- `id` (number, required): Application ID.
- `include` (string): Comma-separated relations to embed: candidate, application, job.
- `interviewer_ids` (array, required): List of user IDs who will conduct the interview.
- `location` (string): Location string; resolved to existing record or created automatically.
- `start_time` (number, required): Interview start time as Unix timestamp (seconds).

### `hires_batch_move_applications` (~66 tokens)

Move multiple applications to a pipeline stage in one request. Returns per-item results with partial success support. Max 100 application IDs per request.

Input parameters:

- `ids` (array, required): Application IDs to move (max 100).
- `stage_id` (number, required): Target pipeline stage ID.

### `hires_batch_reject_applications` (~69 tokens)

Reject multiple applications in one request with an optional rejection reason. Returns per-item results with partial success support. Max 100 application IDs per request.

Input parameters:

- `ids` (array, required): Application IDs to reject (max 100).
- `rejection_reason_id` (number): Optional rejection reason ID.

### `hires_list_jobs` (~480 tokens)

List jobs

List 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.

Input parameters:

- `company_id` (number): Filter by company ID (required only for multi-company API keys)
- `created_at_end` (number|string): Return 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.
- `created_at_start` (number|string): Return 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.
- `department_id` (number): Filter jobs by department ID (from GET /taxonomy/departments)
- `include` (string): Comma-separated related resources to embed: workflow, hiring_team, pipeline_stages
- `page` (number): Page number (default 1)
- `q` (string): Search by job title or internal title (partial match)
- `size` (number): Page size (default 20)
- `status` (string): Filter by job status name (from GET /taxonomy/statuses, e.g. Public, Draft, Archived)
- `updated_after` (number|string): Return 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.
- `view` (string): Response 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 des…

### `hires_create_job` (~556 tokens)

Create a job with taxonomy, location, salary, and workflow configuration. Primary endpoint for programmatic job publishing. Required fields: status, title, description, location_city, location_country.

Input parameters:

- `ai_scoring_criteria` (array): AI 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.
- `category_id` (number): Job category ID from GET /taxonomy/categories.
- `company_id` (number): Target company ID. Required only when the API key has access to multiple companies.
- `department_id` (number): Department ID from GET /taxonomy/departments.
- `description` (string, required): Job description (HTML allowed).
- `education_level_id` (number): Education level ID from GET /taxonomy/education-levels.
- `employment_type_id` (number): Employment type ID from GET /taxonomy/employment-types.
- `experience_level_id` (number): Experience level ID from GET /taxonomy/experience-levels.
- `form_id` (number): Application form ID. If omitted, a new form named after the job title is created with default questions.
- `include` (string): Comma-separated related resources to embed: workflow, hiring_team, pipeline_stages
- `internal_job_id` (string): External reference ID from your ATS or HR system.
- `internal_title` (string): Internal-only title visible to the hiring team.
- `is_remote` (boolean): Whether this is a remote position.
- `knockout_questions` (array): Boolean knockout questions added to the application form.
- `location_city` (string, required): Job city.
- `location_country` (string, required): Job country.
- `location_full_address` (string): Full formatted address.
- `location_postal_code` (string): Postal or ZIP code.
- `location_state` (string): Job state or region.
- `location_street_address` (string): Street address.
- `parent_job_id` (number): Canonical parent job ID. If provided, the created job becomes a satellite job.
- `resume_field_status` (string): Resume field behavior on the application form.
- `salary_currency` (string): Salary currency code (e.g. USD, EUR).
- `salary_max` (number): Maximum salary.
- `salary_min` (number): Minimum salary.
- `salary_period` (string): Salary period.
- `status` (string, required): Job status (e.g. Draft, Public). See GET /taxonomy/statuses.
- `title` (string, required): Public job title.
- `workflow_id` (number): Workflow ID. If omitted, a new workflow named after the job title is created with default stages.

### `hires_get_job` (~76 tokens)

Get job

Get full details of a job by ID or alias. Use `include` to load related workflow, hiring team, or pipeline stages data.

Input parameters:

- `id` (string|number, required): Job ID (numeric) or alias
- `include` (string): Comma-separated related resources to embed: workflow, hiring_team, pipeline_stages

### `hires_update_job` (~515 tokens)

Update mutable job attributes. Only send fields you want to change. Preserves domain-level validation rules.

Input parameters:

- `ai_scoring_criteria` (array): AI 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 cri…
- `category_id` (number): Job category ID from GET /taxonomy/categories.
- `department_id` (number): Department ID from GET /taxonomy/departments.
- `description` (string): Job description (HTML allowed).
- `education_level_id` (number): Education level ID from GET /taxonomy/education-levels.
- `employment_type_id` (number): Employment type ID from GET /taxonomy/employment-types.
- `experience_level_id` (number): Experience level ID from GET /taxonomy/experience-levels.
- `form_id` (number): Application form ID to assign to this job.
- `id` (string|number, required): Job ID (numeric) or alias
- `include` (string): Comma-separated related resources to embed: workflow, hiring_team, pipeline_stages
- `internal_job_id` (string): External reference ID from your ATS or HR system.
- `internal_title` (string): Internal-only title visible to the hiring team.
- `is_remote` (boolean): Whether this is a remote position.
- `knockout_questions` (array): Boolean knockout questions added to the application form.
- `location_city` (string): Job city.
- `location_country` (string): Job country.
- `location_full_address` (string): Full formatted address.
- `location_postal_code` (string): Postal or ZIP code.
- `location_state` (string): Job state or region.
- `location_street_address` (string): Street address.
- `parent_job_id` (number): Canonical parent job ID. If provided, the job becomes a satellite job.
- `resume_field_status` (string): Resume field behavior on the application form.
- `salary_currency` (string): Salary currency code (e.g. USD, EUR).
- `salary_max` (number): Maximum salary.
- `salary_min` (number): Minimum salary.
- `salary_period` (string): Salary period.
- `status` (string): Job status (e.g. Draft, Public). See GET /taxonomy/statuses.
- `title` (string): Public job title.
- `workflow_id` (number): Workflow ID to assign to this job.

### `hires_delete_job` (~40 tokens)

Delete a job. Use to align archived/removed positions across integrated platforms.

Input parameters:

- `id` (string|number, required): Job ID (numeric) or alias

### `hires_set_job_status` (~94 tokens)

Change job status via dedicated endpoint. Recommended for publish/unpublish/archive transitions and status automation workflows.

Input parameters:

- `id` (string|number, required): Job ID (numeric) or alias
- `include` (string): Comma-separated related resources to embed: workflow, hiring_team, pipeline_stages
- `status` (string, required): New job status (e.g. Draft, Public, Archived). See GET /taxonomy/statuses.

### `hires_list_job_boards` (~55 tokens)

Get current board publication state for a specific job. Returns which job boards the job is published to. Useful for distribution dashboards and posting audits.

Input parameters:

- `id` (string|number, required): Job ID (numeric) or alias

### `hires_publish_to_job_board` (~73 tokens)

Activate selected job boards for a job. Sets boards to activation queue state. Use for controlled multi-board publishing workflows.

Input parameters:

- `boards` (array): Array of board identifiers to activate (e.g. ['indeed', 'linkedin'])
- `id` (string|number, required): Job ID (numeric) or alias

### `hires_remove_from_job_board` (~69 tokens)

Deactivate selected board publications for a job. Stops the job from being listed on specified boards.

Input parameters:

- `boards` (array): Array of board identifiers to deactivate (e.g. ['indeed', 'linkedin'])
- `id` (string|number, required): Job ID (numeric) or alias

### `hires_batch_job_boards` (~43 tokens)

Get board publication states for multiple jobs in one request. Optimized for batch monitoring and management UIs.

Input parameters:

- `jobs` (array, required): Array of job IDs

### `hires_batch_publish_to_boards` (~65 tokens)

Activate board publication for multiple jobs in one request. Use for bulk job distribution workflows.

Input parameters:

- `boards` (array): Array of board identifiers to activate (e.g. ['indeed', 'linkedin'])
- `jobs` (array, required): Array of job IDs to publish

### `hires_batch_remove_from_boards` (~67 tokens)

Deactivate board publication for multiple jobs in one request. Use for bulk depublishing workflows.

Input parameters:

- `boards` (array): Array of board identifiers to deactivate (e.g. ['indeed', 'linkedin'])
- `jobs` (array, required): Array of job IDs to depublish

### `hires_list_hiring_team` (~46 tokens)

List users currently assigned to a job's hiring team. Useful for notification routing and collaboration tooling.

Input parameters:

- `id` (string|number, required): Job ID (numeric) or alias

### `hires_add_hiring_team_member` (~63 tokens)

Add a company member to the job's hiring team. Use in workflow setup and ownership automation.

Input parameters:

- `id` (string|number, required): Job ID (numeric) or alias
- `user_id` (number, required): User ID to add to the hiring team.

### `hires_list_job_webhooks` (~44 tokens)

List webhooks configured for job-level events. Use to audit subscriptions and deployment state.

Input parameters:

- `id` (string|number, required): Job ID (numeric) or alias

### `hires_create_job_webhook` (~102 tokens)

Register a webhook URL for job-related events. Core step for outbound integration setup. URL must be HTTPS. Returns a signing_secret once — store it to verify the x-hires-signature-v2 header on incoming deliveries.

Input parameters:

- `id` (string|number, required): Job ID (numeric) or alias
- `url` (string, required): Webhook destination URL. Must be HTTPS and point to a public host (no localhost / private / link-local IPs).

### `hires_delete_job_webhook` (~58 tokens)

Delete a job webhook subscription by ID. Use for cleanup, rotation, and endpoint migration.

Input parameters:

- `id` (string|number, required): Job ID (numeric) or alias
- `webhook_id` (number, required): Webhook ID to delete

### `hires_rotate_job_webhook_secret` (~83 tokens)

Rotate a job webhook's signing secret (zero-downtime). Returns the new signing_secret once; the previous secret stays valid for a grace window so deliveries are not dropped while you switch over.

Input parameters:

- `id` (string|number, required): Job ID (numeric) or alias
- `webhook_id` (number, required): Webhook ID whose signing secret to rotate

### `hires_list_messages` (~281 tokens)

List 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.

Input parameters:

- `date_from` (integer): Start of period (unix timestamp, seconds). Filters on scheduled/sent time.
- `date_to` (integer): End of period (unix timestamp, seconds). Filters on scheduled/sent time.
- `from_account_id` (integer, required): ID of the mail account (from `GET /companies/mail-accounts` or `GET /users/{user_id}/mail-accounts`).
- `page` (integer): Page number (1-based). Default: 1.
- `size` (integer): Number of items per page (1-100). Default: 20.
- `status` (string): Filter by message status: `scheduled` (pending send), `sent` (delivered), `all` (both). Default: `all`.
- `view` (string): Response 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_message` (~41 tokens)

Get a scheduled message by ID. Returns scheduler-backed message details including sender account, schedule timestamps, and cancelability.

Input parameters:

- `id` (integer, required): Message ID.

### `hires_update_message` (~169 tokens)

Fully update (replace) a scheduled message before send time. All required fields must be provided.

Input parameters:

- `bcc` (array): Blind carbon-copy recipient email addresses.
- `body` (string, required): Email body as HTML.
- `cc` (array): Carbon-copy recipient email addresses.
- `from_account_id`: Sending mail account ID. If omitted, the API key owner's default mail account is used.
- `id` (integer, required): Message ID.
- `reply_to_email_id`: Optional mailbox message ID to reply to.
- `scheduled_at`: Updated send time as a Unix timestamp in seconds.
- `send_in_new_thread` (boolean): Whether to send the updated message as a new thread.
- `subject` (string, required): Email subject line.
- `to` (array, required): Primary recipient email addresses.

### `hires_patch_message` (~166 tokens)

Partially update a scheduled message before send time. Only provided fields are changed.

Input parameters:

- `bcc` (array): Blind carbon-copy recipient email addresses.
- `body` (string): Email body as HTML.
- `cc` (array): Carbon-copy recipient email addresses.
- `from_account_id`: Sending mail account ID. If omitted, the API key owner's default mail account is used.
- `id` (integer, required): Message ID.
- `reply_to_email_id`: Optional mailbox message ID to reply to.
- `scheduled_at`: Updated send time as a Unix timestamp in seconds.
- `send_in_new_thread` (boolean): Whether to send the updated message as a new thread.
- `subject` (string): Email subject line.
- `to` (array): Primary recipient email addresses.

### `hires_delete_message` (~31 tokens)

Cancel a scheduled message before it is processed by the mailbox scheduler.

Input parameters:

- `id` (integer, required): Message ID.

### `hires_batch_create_messages` (~73 tokens)

Create 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.

Input parameters:

- `messages` (array, required): Array of message payloads to create (max 100).

### `hires_get_notification_message` (~59 tokens)

Get 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.

Input parameters:

- `id` (integer, required): Notification email message ID.

### `hires_update_notification_message` (~102 tokens)

Update 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.

Input parameters:

- `body` (string, required): Email body as HTML.
- `id` (integer, required): Notification email message ID.
- `scheduled_at`: Unix timestamp (seconds) to reschedule send time. If omitted, the existing schedule is preserved.
- `subject` (string, required): Email subject line.

### `hires_delete_notification_message` (~38 tokens)

Cancel a scheduled notification email before it is sent. Already sent messages cannot be canceled.

Input parameters:

- `id` (integer, required): Notification email message ID.

### `hires_cancel_all_notification_messages` (~49 tokens)

Cancel all scheduled notification emails for a candidate. Already sent notifications are not affected. Returns success even if no scheduled notifications exist.

Input parameters:

- `candidate_id` (required): Candidate ID (numeric) or alias.

### `hires_list_interviews` (~388 tokens)

List interviews (agenda)

List 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.

Input parameters:

- `application_id` (number): Filter interviews by application ID
- `candidate_id` (number): Filter interviews by candidate ID
- `company_id` (number): Filter by company ID. Omit for all accessible companies.
- `created_after` (number|string): Return 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.
- `date` (string): Filter by interview date (YYYY-MM-DD, UTC)
- `include` (string): Comma-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 ba…
- `interviewer_user_id` (number): Filter interviews by interviewer user ID
- `job_id` (number): Filter interviews by job ID
- `page` (number): Page number (default 1)
- `size` (number): Page size (default 20)
- `updated_after` (number|string): Return 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.

### `hires_get_interview` (~64 tokens)

Get full details of a specific interview by ID. Use `include` to embed related candidate, application, or job data.

Input parameters:

- `id` (number, required): Interview ID
- `include` (string): Comma-separated related resources to embed: candidate, application, job

### `hires_list_notes` (~177 tokens)

List 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.

Input parameters:

- `candidate_id` (string|number, required): Candidate ID (numeric) or alias
- `include` (string): Include related resources: 'user' for author details, 'candidate' for full candidate payload with url_backoffice.
- `page` (number): Page number
- `size` (number): Page size
- `view` (string): Response 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_note` (~210 tokens)

Create note

Create 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.

Input parameters:

- `body` (string, required): Note content. Supports HTML.
- `candidate_id` (string|number, required): Candidate ID (numeric) or alias
- `include` (string): Include 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…
- `mention_user_ids` (array): Array of user IDs to mention. Mentioned users receive email notifications.
- `user_id` (number): Author user ID. If omitted, the authenticated user is used
- `visibility` (string): Visibility: 'all' (default) or 'private'

### `hires_get_note` (~65 tokens)

Get a single note with author and visibility metadata. Use include=user to load author details.

Input parameters:

- `id` (number, required): Note ID
- `include` (string): Include related resources: 'user' for author details, 'candidate' for full candidate payload with url_backoffice.

### `hires_update_note` (~97 tokens)

Update note body and/or visibility without creating a new timeline item. Use for corrections and moderation workflows.

Input parameters:

- `body` (string): Note content. Supports HTML.
- `id` (number, required): Note ID
- `include` (string): Include related resources: 'user' for author details, 'candidate' for full candidate payload with url_backoffice.
- `visibility` (string): Visibility: 'all' (default) or 'private'

### `hires_delete_note` (~31 tokens)

Delete a note. Use for moderation policies and data cleanup operations.

Input parameters:

- `id` (number, required): Note ID

### `hires_get_evaluation` (~56 tokens)

Get 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.

Input parameters:

- `id` (number, required): Evaluation form ID

### `hires_list_forms` (~136 tokens)

List 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.

Input parameters:

- `company_id` (number): Target company ID.
- `page` (number): Page number.
- `size` (number): Page size.
- `view` (string): Response 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_form` (~58 tokens)

Create a new application form, optionally attaching existing questions by ID.

Input parameters:

- `company_id` (number): Target company ID.
- `name` (string, required): Form name.
- `questions` (array): Array of question IDs to attach to this form.

### `hires_get_form` (~28 tokens)

Get form details including all questions with their statuses.

Input parameters:

- `id` (number, required): Form ID.

### `hires_update_form` (~50 tokens)

Update form name and question composition.

Input parameters:

- `id` (number, required): Form ID.
- `name` (string, required): Form name.
- `questions` (array): Array of question IDs to attach to this form.

### `hires_delete_form` (~23 tokens)

Delete an application form.

Input parameters:

- `id` (number, required): Form ID.

### `hires_update_form_question` (~66 tokens)

Update the status (required/optional/hidden) of a question inside a form.

Input parameters:

- `form_id` (number, required): Form ID.
- `question_id` (number, required): Question ID.
- `status` (string, required): Question visibility on this form: required, optional, or hidden.

### `hires_list_email_templates` (~157 tokens)

List 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.

Input parameters:

- `company_id` (number): Target company ID
- `page` (number): Page number (default 1)
- `size` (number): Page size (default 25)
- `view` (string): Response 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_template` (~134 tokens)

Create 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.

Input parameters:

- `body` (string, required): Email body HTML (supports placeholders)
- `company_id` (number): Target company ID
- `name` (string, required): Template name
- `subject` (string, required): Email subject line (supports placeholders like {{first_name}}, {{job_title}})

### `hires_get_email_template` (~37 tokens)

Get full details of a specific email template by ID, including subject and body content.

Input parameters:

- `id` (number, required): Email template ID

### `hires_update_email_template` (~85 tokens)

Update an existing email template. Only provided fields are overwritten; omitted fields keep their current values. To add placeholders, use the same workflow as creation.

Input parameters:

- `body` (string): Email body HTML (supports placeholders)
- `id` (number, required): Email template ID
- `name` (string): Template name
- `subject` (string): Email subject line (supports placeholders)

### `hires_delete_email_template` (~40 tokens)

Soft-delete an email template. Templates already used in automations will stop being available for new actions.

Input parameters:

- `id` (number, required): Email template ID

### `hires_list_nurture_campaigns` (~72 tokens)

List nurture campaigns with pagination. Returns campaign summaries including steps.

Input parameters:

- `company_id` (number): Target company ID (optional if API key is scoped to one company)
- `page` (number): Page number (default 1)
- `size` (number): Page size (default 25)

### `hires_create_nurture_campaign` (~232 tokens)

Create 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.

Input parameters:

- `company_id` (number): Target company ID (optional if API key is scoped to one company)
- `delay_time` (number): Delay time in seconds
- `relative_days` (number): Relative days for schedule
- `relative_time` (number): Relative time for schedule (seconds from midnight)
- `response_move_to_stage_id` (number): Stage to move candidate to when they reply
- `send_to_all` (boolean): Send to all candidates or only new ones (default false)
- `stage_id` (number): Stage ID that triggers the campaign
- `steps` (array, required): Campaign steps (at least one required)
- `timezone` (string): IANA timezone, e.g. "America/New_York"
- `title` (string, required): Campaign name
- `workflow_id` (number): Workflow ID to bind the campaign to

### `hires_get_nurture_campaign` (~38 tokens)

Get a single nurture campaign by ID with all steps and configuration details.

Input parameters:

- `id` (number, required): Nurture campaign ID

### `hires_update_nurture_campaign` (~208 tokens)

Update an existing nurture campaign. Pass all steps -- mark removed steps with is_deleted=true. Existing steps must include their id.

Input parameters:

- `delay_time` (number): Delay in minutes before the first step
- `id` (number, required): Nurture campaign ID
- `relative_days` (number): Number of days offset for scheduling
- `relative_time` (number): Time of day for scheduled sends
- `response_move_to_stage_id` (number): Stage ID to move candidates to when they respond
- `send_to_all` (boolean): Whether to send to all candidates or only new ones
- `stage_id` (number): Pipeline stage ID that triggers the campaign
- `steps` (array, required): All steps -- mark removed steps with is_deleted=true
- `timezone` (string): Timezone for scheduled sends, e.g. "America/New_York"
- `title` (string, required): Campaign name
- `workflow_id` (number): Workflow ID this campaign is associated with

### `hires_delete_nurture_campaign` (~40 tokens)

Delete (soft-delete) a nurture campaign. Active campaign executions will be stopped.

Input parameters:

- `id` (number, required): Nurture campaign ID

### `hires_list_users` (~72 tokens)

List users for the target company with role context. Returns paginated results useful for access reviews and hiring-team management.

Input parameters:

- `company_id` (number): Company ID to list users for
- `page` (number): Page number (default 1)
- `size` (number): Page size (default 25)

### `hires_get_user` (~58 tokens)

Get 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.

Input parameters:

- `id` (number, required): User ID

### `hires_list_user_mail_accounts` (~76 tokens)

List mail accounts connected to a user. Use to resolve `from_account_id` before creating scheduled emails via POST /candidates/{id}/messages.

Input parameters:

- `id` (number, required): User ID
- `page` (number): Page number (default 1)
- `size` (number): Page size (default 25)

### `hires_list_companies` (~52 tokens)

List partner-accessible companies with pagination. Use for tenant discovery and management panels.

Input parameters:

- `page` (number): Page number (default 1)
- `size` (number): Page size (default 25)

### `hires_create_company` (~140 tokens)

Create a client company (partner tenant) — provisions its public career-site URL (slug) and public branding (logo, name). Typical entrypoint for multi-tenant onboarding.

Input parameters:

- `company_owner_email` (string, required): Company owner email address
- `company_owner_name` (string, required): Company owner full name
- `company_owner_phone` (string): Company owner phone number
- `is_staffing_agency` (boolean): Whether this company is a staffing agency
- `logo` (object): Company logo file
- `name` (string, required): Company name
- `url` (string): Company profile URL
- `website` (string): Company website URL

### `hires_get_company` (~33 tokens)

Get company profile and owner metadata. Use before updates or ownership-sensitive actions.

Input parameters:

- `id` (number, required): Company ID

### `hires_update_company` (~151 tokens)

Update 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.

Input parameters:

- `company_owner_email` (string): Company owner email address
- `company_owner_name` (string): Company owner full name
- `company_owner_phone` (string): Company owner phone number
- `id` (number, required): Company ID
- `is_staffing_agency` (boolean): Whether this company is a staffing agency
- `logo` (object): Company logo file
- `name` (string): Company name
- `url` (string): Company profile URL
- `website` (string): Company website URL

### `hires_delete_company` (~42 tokens)

Delete (soft-delete) a company — takes its public career site offline. Use for lifecycle control in partner tenancy management.

Input parameters:

- `id` (number, required): Company ID

### `hires_list_company_mail_accounts` (~62 tokens)

List all mail accounts for all users in the current company. Use to resolve `from_account_id` before creating scheduled emails.

Input parameters:

- `page` (number): Page number (default 1)
- `size` (number): Page size (default 25)

### `hires_list_company_id_mail_accounts` (~71 tokens)

List all mail accounts for all users in a specific company. The company must be accessible (own company or a client).

Input parameters:

- `id` (number, required): Company ID
- `page` (number): Page number (default 1)
- `size` (number): Page size (default 25)

### `hires_restore_company` (~46 tokens)

Restore a previously deleted company and re-enable it for active use — its public career site comes back online. Use for recovery and rollback scenarios.

Input parameters:

- `id` (number, required): Company ID

### `hires_list_webhooks` (~27 tokens)

List webhook subscriptions configured at company scope.

Input parameters:

- `id` (number, required): Company ID

### `hires_create_webhook` (~89 tokens)

Create a company-scoped webhook subscription. Use for outbound company-level event integrations. Returns a signing_secret once — store it to verify the x-hires-signature-v2 header on incoming deliveries.

Input parameters:

- `id` (number, required): Company ID
- `url` (string, required): Webhook destination URL. Must be HTTPS and point to a public host (no localhost / private / link-local IPs).

### `hires_delete_webhook` (~48 tokens)

Delete a company-scoped webhook subscription by ID. Use for endpoint retirement and security rotation.

Input parameters:

- `id` (number, required): Company ID
- `webhook_id` (number, required): Webhook ID

### `hires_rotate_webhook_secret` (~75 tokens)

Rotate a company webhook's signing secret (zero-downtime). Returns the new signing_secret once; the previous secret stays valid for a grace window so deliveries are not dropped while you switch over.

Input parameters:

- `id` (number, required): Company ID
- `webhook_id` (number, required): Webhook ID whose signing secret to rotate

### `hires_list_sources` (~41 tokens)

List candidate sources for the company. Use for attribution sync and reporting consistency.

Input parameters:

- `company_id` (number): Target company ID (uses default company when omitted)

### `hires_list_origins` (~24 tokens)

List candidate origin taxonomy values. Use for attribution analytics and source normalization.

### `hires_list_rejection_reasons` (~45 tokens)

List configured rejection reasons for the company. Use to validate rejection actions and analytics.

Input parameters:

- `company_id` (number): Target company ID (uses default company when omitted)

### `hires_list_statuses` (~33 tokens)

List job status labels (draft, published, on_hold, closed, archived). Cache to validate job status updates.

### `hires_list_departments` (~42 tokens)

List departments for the company. Use for job organization filters and reporting dimensions.

Input parameters:

- `company_id` (number): Target company ID (uses default company when omitted)

### `hires_list_categories` (~23 tokens)

List global job categories. Use for job classification and consistent taxonomy mapping.

### `hires_list_education_levels` (~25 tokens)

List education level taxonomy values. Useful for job requirements and structured matching.

### `hires_list_experience_levels` (~22 tokens)

List experience level taxonomy values for role seniority modeling.

### `hires_list_employment_types` (~32 tokens)

List supported employment types (full-time, part-time, contract, etc.). Use for validation and normalization.

### `hires_list_boards` (~25 tokens)

List available publishing boards with metadata. Use for distribution setup and board selection.

### `hires_list_tags` (~46 tokens)

List all tags for the company. Returns paginated results. Recommended to cache for fast tagging UX.

Input parameters:

- `company_id` (number): Target company ID (uses default company when omitted)

### `hires_list_workflows` (~46 tokens)

List workflows with embedded stages for the company. Use to build stage-aware integrations and routing rules.

Input parameters:

- `company_id` (number): Target company ID (uses default company when omitted)

### `hires_list_workflow_stages` (~88 tokens)

List pipeline stages filtered by workflow or job. Useful for transition UIs and workflow validation.

Input parameters:

- `company_id` (number): Target company ID (uses default company when omitted)
- `job_id` (number): Filter stages by job ID (returns stages from the job's assigned workflow)
- `workflow_id` (number): Filter stages by workflow ID (from hires_list_workflows)

### `hires_get_workflow_stages` (~60 tokens)

Get stages for a specific workflow by ID. Equivalent to hires_list_workflow_stages with workflow_id filter.

Input parameters:

- `company_id` (number): Target company ID (uses default company when omitted)
- `id` (number, required): Workflow ID

### `hires_list_questions` (~61 tokens)

List paginated question catalog for the company.

Input parameters:

- `company_id` (number): Target company ID (uses default company when omitted)
- `page` (number): Page number (default 1)
- `size` (number): Page size (default 25)

### `hires_create_question` (~85 tokens)

Create a reusable question with optional answer options for dropdown types. Used by forms and questionnaires.

Input parameters:

- `company_id` (number): Target company ID (uses default company when omitted)
- `options` (array): Answer options (for select/multiselect question types)
- `text` (string, required): Question text
- `type` (string, required): Question type (from hires_list_question_types)

### `hires_get_question` (~29 tokens)

Get a question definition including type and options by ID.

Input parameters:

- `id` (number, required): Question ID

### `hires_update_question` (~72 tokens)

Update text, type, or options of an existing question definition.

Input parameters:

- `id` (number, required): Question ID
- `options` (array): Answer options (for select/multiselect question types)
- `text` (string, required): Question text
- `type` (string, required): Question type (from hires_list_question_types)

### `hires_delete_question` (~35 tokens)

Delete a reusable question from the catalog. Use cautiously when deprecating question banks.

Input parameters:

- `id` (number, required): Question ID

### `hires_list_question_types` (~26 tokens)

List available question types supported by the platform. Use to drive dynamic form builders.

### `hires_list_template_placeholders` (~149 tokens)

List 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.

Input parameters:

- `company_id` (number): Target company ID (uses default company when omitted)
- `is_notification` (number): Include notification-specific system placeholders (0 or 1, default 0)
- `page` (number): Page number (default 1)
- `q` (string): Filter placeholders by label (case-insensitive substring match)
- `size` (number): Page size (default 25)
- `type` (string): Filter by placeholder type

### `hires_prepare_template_placeholders` (~109 tokens)

Convert a placeholder reference into an HTML tag for insertion into an email template body.

Input parameters:

- `form_question_id` (number): Form question ID
- `identifier` (string): Placeholder identifier
- `job_variable_id` (number): Job variable ID
- `qas_profile_question_id` (number): Profile question ID
- `system_column_title` (string): System column title
- `type` (string, required): Placeholder type (system, candidate_column, job_variable, questionnaire_link, scheduling_link)

### `hires_get_billing` (~29 tokens)

Get billing/pricing capability flags for the current company. Use before invoking paid-only API behaviors.

### `hires_submit_feedback` (~122 tokens)

Submit structured API feedback about missing features, issues, or workflow improvements. Rate limited to 5 requests per hour.

Input parameters:

- `context` (object): Arbitrary context object (max 4KB JSON)
- `description` (string, required): Description of the issue or feedback (max 2000 chars)
- `endpoint` (string): The API endpoint this feedback relates to, e.g. /v2/candidates
- `issue_type` (string): Category of the issue
- `suggested_improvement` (string): Suggested solution or improvement (max 2000 chars)

### `hires_download_attachment` (~171 tokens)

Download 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.

Input parameters:

- `url` (string, required): Absolute 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_attachment` (~228 tokens)

Upload 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}`.

Input parameters:

- `category` (string, required): Attachment category. Determines allowed extensions and object_id semantics.
- `company_id` (number|null): Target 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).
- `file` (object, required): File payload.
- `object_id` (number|null): Target object ID (candidate/application/comment/job-note/company, per category). Omit for `voicemail`.

### `hires_list_career_jobs` (~145 tokens)

List publicly visible jobs for a company career site. Supports filtering by department, employment type, city, and country. Use to power a custom careers page.

Input parameters:

- `city` (string): Filter by job city (exact match)
- `company_slug` (string, required): Company slug identifying the career site
- `country` (string): Filter by job country (exact match)
- `department_id` (number): Filter by department ID
- `employment_type_id` (number): Filter by employment type ID (e.g. Full-time, Part-time)
- `page` (number): Page number (default 1)
- `size` (number): Page size (default 25)

### `hires_get_career_job` (~71 tokens)

Get 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.

Input parameters:

- `company_slug` (string, required): Company slug identifying the career site
- `id` (number, required): Job ID

### `hires_submit_career_application` (~150 tokens)

Submit a job application on behalf of a candidate. Creates a candidate record and triggers the career-site pipeline automation.

Input parameters:

- `answers`: Array of form answer objects
- `company_slug` (string, required): Company slug identifying the career site
- `email` (string, required): Applicant email address
- `first_name` (string, required): Applicant first name
- `job_id` (number, required): Job ID to apply to
- `last_name` (string, required): Applicant last name
- `linkedin_url` (string|null): Applicant LinkedIn profile URL
- `phone` (string|null): Applicant phone number
- `resume`: Resume file upload (base64 encoded)
- `source` (string|null): Application source identifier

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/com-100hires-100hires/mcp#diagnostics

## Score history

- 2026-08-03: 84
- 2026-08-02: 83
- 2026-08-01: 83
- 2026-07-31: 82
- 2026-07-30: 77
- 2026-07-29: 78
- 2026-07-28: 77
- 2026-07-27: 76
- 2026-07-26: 76

## Links

- Remote endpoint: https://mcp.100hires.com/mcp
- Repository: https://github.com/100Hires/mcp
- Website: https://100hires.com/mcp
- Changelog RSS feed: https://verifymcp.io/servers/com-100hires-100hires/mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-100hires-100hires/mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/com-100hires-100hires/mcp
