> ## Documentation Index
> Fetch the complete documentation index at: https://docs.hotfix.jobs/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Product noun is jobs.
> MCP at https://rest.hotfix.jobs/mcp is the hiring contract for agents. Clients sign in with Hotfix; API keys are for HTTP only.
> Do not invent unpublished REST or hiring stats. Webhooks are set up in the app; there is no REST route or MCP tool to manage them.
> Do not mention Greenhouse, Ashby, Quick Apply, or claim.
> Creating a draft, offer, or booking link does not send email.

# bulk_update_applications

> Apply one change to up to 100 applications in one request: status, archived, assignee, or a rejection letter, with the same fields as set_status. Each application changes exactly as set_status would change it. One that fails (not found, an invalid move) is listed under failed with the status set_status would answer, and the rest still apply. Does not send email unless rejection_email is set.



## OpenAPI

````yaml /openapi.json patch /v1/employer/applications
openapi: 3.1.0
info:
  title: Hotfix hiring API
  version: 1.0.0
  description: >-
    Employer hiring surface under /v1/employer, plus the public careers page
    reads under /v1/boards. Routes take an employer session Bearer token. Hiring
    data routes also accept a company API key (hf_…); mail and drafts are
    session only. Agents should prefer MCP at https://rest.hotfix.jobs/mcp,
    where they sign in with Hotfix. It is not a dump of
    rest.hotfix.jobs/openapi.json.
servers:
  - url: https://rest.hotfix.jobs
    description: Production
security: []
tags:
  - name: Applications
  - name: Jobs
  - name: Careers page
  - name: Interviews
  - name: Offers
  - name: Mail
  - name: Automations
  - name: Fields
paths:
  /v1/employer/applications:
    patch:
      tags:
        - Applications
      summary: bulk_update_applications
      description: >-
        Apply one change to up to 100 applications in one request: status,
        archived, assignee, or a rejection letter, with the same fields as
        set_status. Each application changes exactly as set_status would change
        it. One that fails (not found, an invalid move) is listed under failed
        with the status set_status would answer, and the rest still apply. Does
        not send email unless rejection_email is set.
      operationId: bulk_update_applications
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                ids:
                  type: array
                  items:
                    type: string
                  description: >-
                    Application UUIDs to change, 1 to 100. A repeated id changes
                    once.
                status:
                  type: string
                  description: new, considering, interviewing, hired, or rejected.
                archived:
                  type: boolean
                  description: >-
                    true hides the row from the default list without changing
                    status; false restores it.
                keep:
                  type: boolean
                  description: >-
                    true holds the application back from your company's
                    applicant data retention (a legal hold, or saving them for a
                    future role); false releases it.
                assignee_user_id:
                  type: string
                  description: >-
                    Assign to this teammate (user id from the team). MCP tool:
                    set_assignee.
                clear_assignee:
                  type: boolean
                  description: true unassigns. Wins over assignee_user_id.
                rejection_email:
                  type: object
                  description: >-
                    With status rejected: schedule this letter from your
                    mailbox. Skipped when the application is already Rejected.
                  properties:
                    template_id:
                      type: string
                      description: Email template UUID.
                    send_at:
                      type: string
                      description: ISO-8601 time to send.
                  required:
                    - template_id
                    - send_at
              required:
                - ids
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
              example:
                updated:
                  - id: 2c8f0a1e-4b3d-4e91-9c7a-1f6b8d2e0a11
                    applicant_name: Jordan Lee
                    applicant_email: jordan@example.com
                    job_id: 9a1b2c3d-4e5f-6789-abcd-ef0123456789
                    job_title: Staff engineer
                    status: interviewing
                    knockout: false
                    applied_at: '2026-09-20T18:22:01+00:00'
                    has_resume: true
                    answers:
                      Why this role?: I ship.
                    also_applied: []
                failed:
                  - id: 7d2e9b40-1c3a-4f5e-8a6b-0c9d1e2f3a4b
                    status: 404
                    message: application not found
      security:
        - ApiKey: []
        - BearerAuth: []
components:
  securitySchemes:
    ApiKey:
      type: http
      scheme: bearer
      description: >-
        Company API key minted at Settings → API. Prefix hf_. Accepted on hiring
        data routes. Not accepted on MCP.
    BearerAuth:
      type: http
      scheme: bearer
      description: Employer session JWT from Better Auth.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.