---
title: "Mark application as hired"
method: POST
path: "/applications/{id}/hire"
tags: ["Applications"]
---

# Mark application as hired

`POST /applications/{id}/hire`

## Request

- Base URL: `https://api.100hires.com/v2`
- URL: `https://api.100hires.com/v2/applications/{id}/hire`
- Auth: HTTP bearer

Marks an application as hired using domain rules from the current workflow. Use as the finalization step in hiring automations.

## Path parameters

- `id` integer, required

## Query parameters

- `include` string

## Response `200`

Updated application

- Application
  - `id` integer, required: Unique identifier
  - `candidate_id` integer, required: ID of the candidate
  - `job_id` integer, required: ID of the job
  - `job_alias` string, nullable: Short alias of the job, usable in URLs (e.g. 79SZHfT)
  - `internal_job_id` string, nullable: Company's internal job identifier
  - `company_id` integer, required: ID of the company
  - `url_backoffice` string, uri: Absolute backoffice URL of the application's view (candidate page in this job) in the 100Hires recruiter app. Use to render deep-links in agent UIs.
  - `stage` IdName
    - `id` integer, required: Unique identifier.
    - `name` string, required: Display name.
  - `status` 'active' | 'hired' | 'rejected', required: Application status. Changes via hire/reject/unreject actions.
  - `is_disqualified` boolean, required: Whether the candidate is disqualified for this application
  - `cv` ApplicationCvData: Unified attachment shape returned by apiV2 endpoints (resumes, candidate files, application attachments, message attachments, call recordings, voicemail audio in nurture campaigns). `url` is an absolute URL served by the API host (`https://api.100hires.com/v2/attachments/{category}/{uuid}/{file_name}`) and serves the raw file bytes with `Authorization: Bearer <API_KEY>`. The response on `url` sets `Content-Disposition: attachment; filename="..."` with the human-readable filename. Use `uuid` to reference the attachment in other endpoints (e.g. nurture voicemail step).
    - `uuid` string, uuid, required: Unique attachment identifier. Stable across API calls; use in referencing endpoints.
    - `url` string, uri, nullable, required: Absolute download URL (e.g. `https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}`). Hit with `Authorization: Bearer <API_KEY>`.
    - `relative_time` string, required: Human-readable time since upload (e.g. `"2 days ago"`).
    - `file` AttachmentFile, required
      - `is_image` boolean, nullable, required: Whether the file is an image.
      - `orig_file_name` string, required: Original file name.
      - `file_ext` string, required: File extension.
      - `file_type` string, required: File type category.
      - `readable_size` string, required: Human-readable file size.
    - `text` string, nullable: Parsed plain-text CV content. Included only when `?include=cv.text` is requested AND `view=full` (the default). Suppressed when `view=summary` even if the include was requested — parsed CV text can be tens of KB per attachment. May be null if parsing fails or format is unsupported.
  - `rejected_at` integer, nullable: Unix timestamp (seconds)
  - `rejection_reason` IdName[], nullable: Reasons for rejection. Null if not rejected.
    - `id` integer, required: Unique identifier.
    - `name` string, required: Display name.
  - `hired_at` integer, nullable: Unix timestamp (seconds)
  - `hiring_team` JobHiringTeamMember[], nullable: Team members assigned to this application's job
    - `id` integer, required: User ID.
    - `full_name` string, required: User full name.
    - `email` string, nullable: User email.
    - `role` string, nullable: Role on hiring team (e.g. hiring_manager, recruiter).
  - `custom_fields` object, nullable: Custom field values as key-value pairs
  - `ai_score` integer, nullable: AI-generated candidate fit score (0-100)
  - `ai_recommendation` string, nullable: AI-generated recommendation label (e.g. Strong, Good, Weak)
  - `ai_scoring_updated_at` integer, nullable: Unix timestamp (seconds) of the latest completed AI scoring result
  - `created_at` integer, required: Unix timestamp (seconds)
  - `updated_at` integer, required: Unix timestamp (seconds)
  - `last_message_at` integer, nullable: Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from the candidate in this application's company. Null if no messages exist.
  - `days_since_last_message` integer, nullable: Number of whole days since the last message. Computed at request time. Null if no messages exist.
  - `candidate` ApplicationCandidate
    - `id` integer, required: Unique identifier
    - `company_id` integer, required: ID of the company this candidate belongs to
    - `first_name` string, nullable: Candidate's first name
    - `last_name` string, nullable: Candidate's last name
    - `emails` string[], nullable: List of candidate email addresses
    - `phones` string[], nullable: List of candidate phone numbers
    - `source` IdName
      - `id` integer, required: Unique identifier.
      - `name` string, required: Display name.
    - `origin` IdName
      - `id` integer, required: Unique identifier.
      - `name` string, required: Display name.
    - `profile` ProfileAnswer[], required: Candidate profile field answers
      - `question_id` integer, required: Question ID.
      - `question_text` string, required: Question label.
      - `value` unknown, required
    - `created_at` integer, required: Unix timestamp (seconds)
    - `updated_at` integer, required: Unix timestamp (seconds)
    - `last_message_at` integer, nullable: Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.
    - `days_since_last_message` integer, nullable: Number of whole days since the last message. Computed at request time. Null if no messages exist.
    - `ip` string, nullable: IP address from which the candidate applied
  - `job` Job
    - `id` integer, required: Unique identifier
    - `alias` string, nullable: Short alphanumeric alias used in UI URLs. Use this to build job links — `https://app.100hires.com/job/{alias}/candidates/pipeline`. Also accepted as `{id}` in API requests.
    - `company_id` integer, required: ID of the company this job belongs to
    - `title` string, required: Public job title shown to candidates
    - `internal_title` string, nullable: Internal job title visible only to the hiring team
    - `internal_job_id` string, nullable: Company's internal job identifier (e.g. requisition number)
    - `description` string: Job description (HTML). Present only when `view=full` (default); omitted entirely when `view=summary` to keep list responses inside the agent context budget. Use `GET /jobs/{id}` or `view=full` to retrieve.
    - `resume_field_status` 'required' | 'optional' | 'hidden', nullable: Whether resume upload is required, optional, or hidden on the application form
    - `location` JobLocation
      - `country` string: Country.
      - `city` string: City.
      - `state` string: State or region.
      - `postal_code` string: Postal code.
      - `street_address` string: Street address.
      - `full_address` string: Full formatted address.
    - `url` string, required: Public URL of the job posting page
    - `url_backoffice` string: Backoffice URL — opens the job's pipeline view inside the recruiter app (`https://app.100hires.com/job/{alias}/candidates/pipeline`). Use this to link agent widgets / UI to the in-app job page rather than the public career page.
    - `is_remote` boolean, required: Whether this is a remote position
    - `is_hybrid` boolean, required: Whether this is a hybrid position: office days plus remote days at the job address. Never true together with is_remote.
    - `job_board_remote_scope` 'city' | 'statewide' | 'nationwide', nullable: How a remote job is listed on Indeed: city, statewide or nationwide. Null when the job is not remote.
    - `status` string, required: Job status: open, closed, draft, or archived
    - `department` IdName
      - `id` integer, required: Unique identifier.
      - `name` string, required: Display name.
    - `category` IdName
      - `id` integer, required: Unique identifier.
      - `name` string, required: Display name.
    - `employment_type` IdName
      - `id` integer, required: Unique identifier.
      - `name` string, required: Display name.
    - `education_level` IdName
      - `id` integer, required: Unique identifier.
      - `name` string, required: Display name.
    - `experience_level` IdName
      - `id` integer, required: Unique identifier.
      - `name` string, required: Display name.
    - `workflow_id` integer, nullable: ID of the hiring workflow (pipeline) assigned to this job
    - `workflow` IdName
      - `id` integer, required: Unique identifier.
      - `name` string, required: Display name.
    - `form_id` integer, nullable: ID of the application form candidates fill in for this job — the form attached to the job, or the company default form when the job has none attached yet (the same rule the public apply page follows). `null` only when the company has no forms. Fetch the questions with `GET /forms/{id}`. Present in both `view=full` and `view=summary`.
    - `pipeline_stages` object[], nullable: Pipeline stages for this job's workflow. Only included when `include=pipeline_stages` is specified. Suppressed when `view=summary` even if the include was requested.
      - `id` integer
      - `name` string
    - `salary_min` number, nullable: Minimum salary
    - `salary_max` number, nullable: Maximum salary
    - `salary_currency` string, nullable: Salary currency code (e.g. USD, EUR)
    - `salary_period` 'annually' | 'monthly' | 'daily' | 'hourly', nullable: Salary period
    - `hours_per_week_min` integer, nullable: Minimum hours per week
    - `hours_per_week_max` integer, nullable: Maximum hours per week
    - `indeed_posting_data` object: Indeed job board posting metadata. Present only when `view=full` (default); omitted entirely when `view=summary`.
    - `hiring_team` JobHiringTeamMember[]: Team members assigned to this job. Embedded via `include=hiring_team`. Suppressed when `view=summary` even if the include was requested.
      - `id` integer, required: User ID.
      - `full_name` string, required: User full name.
      - `email` string, nullable: User email.
      - `role` string, nullable: Role on hiring team (e.g. hiring_manager, recruiter).
    - `is_satellite` boolean: Whether this job is a satellite (child) of a canonical job. Satellite jobs share the candidate pipeline of their parent.
    - `parent_job_id` integer, nullable: ID of the canonical (parent) job. Null for canonical jobs. Recruiting operations should target the canonical job.
    - `language` string, nullable: Locale this job's public page renders in, overriding the career site language. Null means the page follows the career site language (`GET /companies/career-site-settings`), which in turn falls back to en-US. This is the override, not the effective language. Present in both `view=full` and `view=summary`.
    - `created_at` integer, required: Unix timestamp (seconds)
    - `updated_at` integer, required: Unix timestamp (seconds)
    - `ai_scoring_criteria` AiScoringCriterion[]: AI scoring criteria configured for this job, ordered by `position` ASC. Returned as an empty array when none are configured. Present only when `view=full` (default); omitted entirely when `view=summary`.
      - `id` integer, required: Unique identifier of the criterion.
      - `title` string, nullable: Optional short label for the criterion.
      - `text` string, required: Prompt text describing what to evaluate.
      - `weight` integer, required: Relative importance of this criterion in the total score (1–10).
      - `position` integer, required: 0-based ordinal of the criterion in the job's list.

## Other responses

- `400`: Bad request
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not found
- `415`: Content-Type must be application/json
- `429`: Too many requests

---

[API](https://skmtc.dev/100hires/apis/100hires-api.md) · [All operations](https://skmtc.dev/100hires/apis/100hires-api/llms.txt) · [OpenAPI document](https://skmtc.dev/100hires/apis/100hires-api/revisions/e63e2d3115f7?raw)
