Developer Portal

100Hires ATS API Documentation

The 100Hires ATS API lets you build reliable recruiting automations across candidates, applications, jobs, and webhooks.

Machine-readable spec: https://api.100hires.com/v2/openapi.json

MCP server for AI assistants: 100hires.com/mcp

Integrate your recruiting workflow with the 100Hires ATS API. REST API for applicant tracking, hiring automation, and recruiting integrations.

About the 100Hires ATS API

The 100Hires ATS API is a REST API for building recruiting automations, ATS integrations, and custom hiring workflows on top of the 100Hires applicant tracking system. With 100+ endpoints covering candidates, applications, jobs, interviews, evaluations, messages, notes, forms, and webhooks, the API gives developers full programmatic access to the data and actions available in the 100Hires UI.

Who it is for

Recruiting teams that want to sync candidates from sourcing tools (LinkedIn, GitHub, Apollo, internal CRMs) into 100Hires, agencies migrating from another ATS, internal IT teams building Slack/Teams bots, and SaaS vendors offering integrations with 100Hires as a partner ATS.

What you can build

Two-way candidate sync with your CRM, automatic job publishing to your careers page or job boards, Slack notifications when a candidate moves stage, scorecard automation that pushes evaluation results into BI dashboards, sourcing extensions that create a candidate from a LinkedIn profile in one click, and AI agents that triage applications with custom scoring rules.

Authentication

The 100Hires ATS API uses Bearer token authentication. Generate an API key in Settings → Integrations → API Keys, pass it in the Authorization: Bearer <key> header on every request. Keys are scoped to a user and company and can be revoked at any time. Company verification is required before a key becomes active; keys for unverified companies return 401 Unauthorized until verification is complete.

Pricing

API access is included with paid plans at no extra cost. No per-request fees, no separate API tier. Default rate limit is 100 requests per 10 minutes per API key (unapproved keys); contact support to increase.

v2.0.0
OAS 3.1.0

100Hires API

Introduction to the 100Hires ATS API

The 100Hires ATS API (v2) helps you automate recruiting workflows end-to-end: candidates, applications, jobs, forms, notes, and partner-company operations. All endpoints return JSON and use bearer authentication.

OpenAPI Spec

The 100Hires ATS API follows the OpenAPI 3.x specification. Download the machine-readable spec for use in MCP servers, Cursor, Claude Code, or any OpenAPI tooling:

GET https://api.100hires.com/v2/openapi.json

Authentication

Send API token in the Authorization header for every request:

Authorization: Bearer <token>

Each API key is tied to a specific user + company pair. If the same user belongs to multiple companies, they need a separate key for each company. All actions performed through the API are attributed to the key owner.

You can generate or view your API key at https://app.100hires.com/settings/integrations

API Key Verification

API keys for unverified companies are created in a disabled state and will return 401 Unauthorized until the company passes verification.

Once your company is verified, API keys start working automatically — no action required.

If your key returns 401 and you believe your company should be verified, contact support@100hires.com.

Rate Limits

New API keys are subject to a hard rate limit of 100 requests per 10 minutes per key. Requests over the limit receive a 429 Too Many Requests response.

Rate limit headers

Unapproved keys include these headers on every response:

Header Description
X-RateLimit-Limit Maximum requests allowed in the current window
X-RateLimit-Remaining Requests remaining in the current window
X-RateLimit-Reset Unix timestamp (seconds) when the window resets

Handling 429 responses

When you receive a 429 response, wait until X-RateLimit-Reset before retrying. Do not retry immediately — repeated 429s may extend the cooldown.

To remove rate limits for your integration, contact support@100hires.com with your use case.

Content-Type

All request bodies must use Content-Type: application/json. Sending application/x-www-form-urlencoded, multipart/form-data, or any other content type will result in a 415 Unsupported Media Type error.

Responses and Errors

Standard HTTP status codes are used (2xx, 4xx, 5xx). All error responses are wrapped in an error object containing name, message, code, and status. Validation errors additionally include field-level details in error.validation_errors. See the Error handling section below for the full format and status table.

Pagination

List endpoints use page (1-based) and size (1-100, default 20). Paginated responses follow: { "<resource>": [...], "pagination": { "page_size", "page_count", "page", "total_count" } }.

Lists

List routes are optimized for synchronization and operational dashboards. Most list endpoints support tenant scoping through optional company_id (when allowed by API key context).

Confidential Data

Some candidate profile values can be masked by account-level pricing/access rules. Integrations should not assume all profile fields are always fully visible.

Customizing the Response

Use endpoint filters (status, job_id, timestamps, taxonomy IDs, etc.) to minimize payload size and improve sync efficiency. Build incremental sync flows around timestamp filters where available.

Supported File Formats

File uploads use base64 payloads with metadata: data, file_name, mime_type (and optionally size). This format is used for candidate files, resumes, attachments, and logos.

Webhooks

Webhook subscriptions can be managed per job and per company.

Set up

Use webhook endpoints to register destination URLs for events in your integration.

Securing webhooks

Every delivery is signed with the x-hires-signature-v2 header: base64(HMAC_SHA256(rawBody, secret)), computed over the raw request body with the webhook's signing secret (returned once when you create or rotate the webhook). Verify it before trusting a request and reject anything that does not match.

During a secret rotation, x-hires-signature-v2 may carry multiple space-separated signatures (one per currently-valid secret). Treat the header as a space-separated list and accept the request if any entry matches a secret you hold.

Verification example for x-hires-signature-v2 (Node.js):

const crypto = require('crypto');
const expected = crypto.createHmac('sha256', signingSecret).update(rawBody).digest('base64');
const provided = (req.headers['x-hires-signature-v2'] || '').split(' ');
const verified = provided.includes(expected);

Signing secrets and rotation

Each webhook owns its own signing secret, independent of your API key. The secret is returned once as signing_secret when you create the webhook (POST /jobs/{id}/webhooks, POST /companies/{id}/webhooks) — store it securely, it is never shown again. To rotate with zero downtime, call POST /jobs/{id}/webhooks/{webhook_id}/rotate-secret (or the company equivalent): the previous secret stays valid for a grace window while both old and new signatures are sent, so you can switch the secret on your side without dropping any deliveries.

Receiving webhooks

Always respond quickly with 2xx, then process asynchronously to avoid retries/timeouts.

Event payloads

On each new application, 100hires sends a POST to your registered URL with a JSON body describing the application. Verify the signature (see "Securing webhooks") before processing, and parse defensively — fields may be null and new fields may be added over time.

Webhooks registered through this API (v2) receive the payload below. (Webhooks created via the legacy v1 API receive a different, legacy payload — register through v2 to receive this richer shape.)

Example delivery payload:

{
  "id": 845112,
  "candidate_id": 390217,
  "job_id": 4821,
  "job_alias": "senior-backend-engineer",
  "internal_job_id": 12,
  "company_id": 1007,
  "stage": { "id": 3, "name": "Applied" },
  "status": "active",
  "is_disqualified": false,
  "url_backoffice": "https://app.100hires.com/candidate/default/view?candidate=390217&application=845112",
  "cv": {
    "url": "https://api.100hires.com/v2/files/9f1c2e7a-3b4c-4d5e-8f90-1a2b3c4d5e6f/download",
    "uuid": "9f1c2e7a-3b4c-4d5e-8f90-1a2b3c4d5e6f",
    "relative_time": "2 hours ago",
    "file": {
      "is_image": false,
      "orig_file_name": "jane_doe_resume.pdf",
      "file_ext": "pdf",
      "file_type": "application/pdf",
      "readable_size": "100kB"
    },
    "text": "Jane Doe — Senior Backend Engineer\n8 years building distributed systems…"
  },
  "rejected_at": null,
  "rejection_reason": null,
  "hired_at": null,
  "hiring_team": null,
  "custom_fields": null,
  "created_at": 1781434800,
  "updated_at": 1781434800,
  "last_message_at": null,
  "days_since_last_message": null,
  "ai_score": null,
  "ai_recommendation": null,
  "ai_scoring_updated_at": null,
  "candidate": {
    "id": 390217,
    "alias": "jane-doe",
    "company_id": 1007,
    "first_name": "Jane",
    "last_name": "Doe",
    "emails": ["jane.doe@example.com"],
    "phones": ["+1 555 123 4567"],
    "source": { "id": 5, "name": "LinkedIn" },
    "origin": { "id": 2, "name": "Career site" },
    "profile": [
      { "question_id": 1, "question_text": "First name", "value": "Jane" },
      { "question_id": 3, "question_text": "Email", "value": "jane.doe@example.com" }
    ]
  }
}

Field reference:

  • id — application id. candidate_id, job_id, company_id — related entity ids.
  • job_alias — the job's URL slug; internal_job_id — human-facing job number (present when set).
  • stage — current pipeline stage { id, name }, or null. statusactive, rejected, or hired.
  • is_disqualifiedtrue when the application has been rejected/disqualified.
  • url_backoffice — deep link to the application in the 100hires back office.
  • cv — résumé { url, uuid, relative_time, file { … }, text }, or null when there is no résumé. text is the parsed résumé content (can be large).
  • rejected_at / hired_at — Unix timestamps, or null. rejection_reason — array of { id, name }, or null.
  • created_at / updated_at / last_message_at — Unix timestamps (seconds; nullable where noted).
  • ai_score / ai_recommendation / ai_scoring_updated_at — AI scoring fields, null when not scored.
  • candidate — the full applicant object (name, emails, phones, source/origin, profile answers) — same shape as GET /candidates/{id}. Use it to create the lead on your side.

Parse payloads defensively and keep backward compatibility in your consumer.

Event configuration

Event availability can vary by endpoint scope (job/company) and account configuration.

Responding to webhooks

Use idempotent handlers so duplicate deliveries do not create duplicate side effects.

Delivery history

Log incoming webhook IDs and processing results for replay, debugging, and audit.

Common Workflows

Search and review a candidate

Using the 100Hires ATS API you can search for candidates and review their full profile, application history, and communication timeline.

  1. GET /candidates?q=John — find candidate by name or email
  2. GET /candidates/{id} — full profile with application history
  3. GET /candidates/{id}/activities — timeline (notes, calls, AI scoring)
  4. GET /candidates/{id}/messages — email conversation history

Manage hiring pipeline

Using the 100Hires ATS API you can manage your hiring pipeline by filtering candidates by stage, advancing or rejecting applications, and performing bulk stage transitions.

  1. GET /applications?job_id=123&stage_id=456 — candidates at a specific stage
  2. POST /applications/{id}/move with {"stage_id": 789} — advance candidate
  3. POST /applications/{id}/reject — reject with optional reason
  4. POST /applications/batch/move — bulk stage transition

Publish a job

Using the 100Hires ATS API you can create job drafts, publish them, and distribute to multiple job boards in one request.

  1. POST /jobs — create job draft
  2. POST /jobs/{id}/status with {"status": "Public"} — publish
  3. GET /jobs/{id}/job-boards — available boards
  4. POST /jobs/batch-job-boards — publish to multiple boards

Schedule an interview

Using the 100Hires ATS API you can check interviewer availability and schedule interviews for application candidates.

  1. GET /interviews?interviewer_user_id=5 — check interviewer availability
  2. POST /applications/{id}/interviews — create interview for application

Evaluate a candidate

Using the 100Hires ATS API you can retrieve evaluation forms and review candidate scores and feedback.

  1. GET /applications/{id}/evaluation-forms — list filled evaluations
  2. GET /evaluation-forms/{id} — detailed form with answers and scores

Send an email

Using the 100Hires ATS API you can send emails to candidates, schedule bulk messages, and cancel pending deliveries.

  1. GET /candidates/{id}/messages — check conversation history
  2. (Optional) GET /users/{user_id}/mail-accounts — find mail_account_id to send from a specific user's mailbox
  3. POST /candidates/{id}/messages — schedule email (use from_account_id to send from a specific mailbox; 15-min cancel window by default)
  4. POST /messages/batch/create — schedule up to 100 emails in one request (each with its own candidate_id)
  5. DELETE /messages/{id} — cancel before send

Monitor outreach by mail account

Using the 100Hires ATS API you can monitor outreach by tracking messages sent from specific mail accounts.

  1. GET /companies/mail-accounts or GET /users/{user_id}/mail-accounts — find mail_account_id
  2. GET /messages?from_account_id={id} — list all messages sent/scheduled from that account
  3. Filter by status=scheduled to see pending queue, status=sent for delivery history
  4. Use date_from / date_to (unix timestamps) to narrow the time range

Send an email from another team member's mailbox

Using the 100Hires ATS API you can send emails from any team member's connected mailbox.

  1. GET /users — find the user_id of the team member
  2. GET /users/{user_id}/mail-accounts — get their mail_account_id
  3. POST /candidates/{id}/messages with from_account_id — send from their mailbox

Tag and organize candidates

Using the 100Hires ATS API you can tag candidates individually or in bulk for better organization.

  1. POST /candidates/{id}/tags with ["senior", "remote"] — add tags
  2. POST /candidates/batch/tags — bulk add tags
  3. DELETE /candidates/batch/tags — bulk remove tags

Every candidate and job has a short alias (e.g. dtGeby2, 79SZHfT) — the same string used in 100Hires UI URLs.

Using aliases in API requests

For candidates and jobs, the {id} path parameter accepts either a numeric ID or an alias:

  • GET /candidates/42 and GET /candidates/dtGeby2 both return the same candidate.
  • GET /jobs/1 and GET /jobs/79SZHfT both return the same job.
  • This also works for their sub-resources: GET /candidates/dtGeby2/activities, PUT /jobs/79SZHfT, etc.
  • All other endpoints (applications, notes, interviews, etc.) accept only numeric IDs.

Alias fields in responses

  • GET /candidates and GET /candidates/{id} return alias field for each candidate.
  • GET /jobs and GET /jobs/{id} return alias field for each job.
  • GET /applications and GET /applications/{id} return job_alias field alongside job_id.

Use aliases to construct direct links to 100Hires UI:

  • Candidate profile: https://app.100hires.com/candidate/{candidate_alias}
  • Candidate on a specific job pipeline: https://app.100hires.com/candidate/{candidate_alias}/{job_alias}
  • Job pipeline: https://app.100hires.com/job/{job_alias}/candidates/pipeline

This is useful for generating clickable links in reports, sales pipeline audits, and automation outputs.

Error handling

All errors are wrapped in an error object. The format is consistent across all endpoints:

{"error": {"name": "Not Found", "message": "Candidate not found", "code": 0, "status": 404}}

Validation errors include field-level details in validation_errors:

{"error": {"name": "Validation Error", "message": "", "code": 0, "status": 400, "validation_errors": {"email": "Email cannot be blank."}}}
Status Name When
400 Bad Request Invalid request parameters
400 Validation Error Model validation failed (includes validation_errors)
401 Unauthorized Missing or invalid API key
403 Forbidden No permission for this resource
404 Not Found Resource does not exist
415 Unsupported Media Type Content-Type is not application/json
429 Too Many Requests Rate limit exceeded
Server:https://api.100hires.com/v2

Production API endpoint

Client Libraries

Candidates

List candidates

Returns a paginated candidate list for one company or all companies accessible by the API key. Use filters for deduplication, exports, and incremental synchronization jobs.

Query Parameters
  • company_id
    Type: integer

    Optional target company ID. Since each API key is already bound to one company, this is only needed when the key owner has access to multiple companies.

  • job_id
    Type: integer

    Filter candidates by job ID.

  • stage_id
    Type: integer

    Filter candidates by pipeline stage ID. Best used together with job_id.

  • email
    Type: string

    Exact candidate email filter.

  • q
    Type: string

    Plain-text candidate search by name or email. Supports partial matches. If combined with other filters, all filters must match.

  • full_name
    Type: string

    Candidate full-name filter. If combined with email or q, all supplied filters must match.

  • linkedin
    Type: string

    Search by LinkedIn profile URL or alias. Accepts full URL (https://linkedin.com/in/johndoe) or just the alias (johndoe). Server normalizes before matching.

  • created_after

    Return only candidates created at or after this time. Accepts a Unix timestamp in seconds (not milliseconds) or an ISO-8601 string with timezone offset (e.g. 2026-05-11T00:00:00Z, 2026-05-11T00:00:00.123+03:00). Fractional seconds are accepted but truncated to whole seconds.

    • Type: integer
      min:  
      0

      Integer numbers.

  • updated_after

    Return only candidates updated at or after this time. Accepts a Unix timestamp in seconds (not milliseconds) or an ISO-8601 string with timezone offset (e.g. 2026-05-11T00:00:00Z, 2026-05-11T00:00:00.123+03:00). Fractional seconds are accepted but truncated to whole seconds. Use for incremental sync.

    • Type: integer
      min:  
      0

      Integer numbers.

  • include
    enum
    const:  
    applications

    Include related application summaries in the candidate response.

    • applications
  • page
    Type: integer
    min:  
    1

    Page number (1-based). Defaults to 1.

  • size
    Type: integer
    min:  
    1
    max:  
    100

    Number of items per page (1–100). Defaults to 20.

  • view
    Type: stringenum

    Response shape selector for list endpoints. full (default) returns every field — backward-compatible with pre-existing clients. summary returns a thinned payload designed for agent-friendly list browsing: heavy fields (description HTML, embedded profile answers, full message bodies, embedded relations, etc.) are omitted or replaced with *_preview truncations. Use summary when paging through large result sets and fetch a single record with the corresponding GET /{resource}/{id} endpoint when full data is needed.

    • full
    • summary
Responses
  • Candidate list

    Type: object
    • candidates
      Type: array object[] · Candidate[]
      required

      Array of candidates.

      • company_id
        Type: integer
        required

        ID of the company this candidate belongs to

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • id
        Type: integer
        required

        Unique identifier

      • updated_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • alias
        Type: string | null

        Short alphanumeric alias used in profile URLs. Use this to build candidate profile links — https://app.100hires.com/candidate/{alias}. Also accepted as {id} in API requests.

      • applications
        Type: array object[] · CandidateApplicationSummary[]

        Summary of all applications this candidate has across jobs

        • id
          Type: integer
          required

          Application ID.

        • job
          Type: object
          required

          Job summary (id, title, status).

          • id
            Type: integer
            required

            Integer numbers.

          • title
            Type: string
            required
        • stage
          Type: object · IdName nullable
          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

      • days_since_last_message
        Type: integer | null

        Number of whole days since the last message. Computed at request time. Null if no messages exist.

      • emails
        Type: array string[] | null nullable

        List of candidate email addresses

      • first_name
        Type: string | null

        Candidate's first name

      • ip
        Type: string | null

        IP address from which the candidate applied

      • last_message_at
        Type: integer | nullFormat: int64

        Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.

      • last_name
        Type: string | null

        Candidate's last name

      • origin
        Type: object · IdName nullable

        Where the candidate originally came from (e.g. job board name)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • phones
        Type: array string[] | null nullable

        List of candidate phone numbers

      • profile
        Type: array object[] · ProfileAnswer[]

        Candidate profile field answers (application form responses). Present only when view=full (default); omitted entirely when view=summary to keep list responses inside the agent context budget — a single candidate can carry dozens of free-form answers.

        • question_id
          Type: integer
          required

          Question ID.

        • question_text
          Type: string
          required

          Question label.

        • value
          required

          Answer value (string, array, or null).

      • source
        Type: object · IdName nullable

        How the candidate was sourced (e.g. LinkedIn, Referral)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • url_backoffice
        Type: stringFormat: uri

        Absolute backoffice URL of the candidate in the 100Hires recruiter app. Use to render deep-links in agent UIs.

    • pagination
      Type: object · Pagination
      required
      • page
        Type: integer
        required

        Current page number.

      • page_count
        Type: integer
        required

        Total number of pages.

      • page_size
        Type: integer
        required

        Items per page.

      • total_count
        Type: integer
        required

        Total number of items.

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/candidates
curl https://api.100hires.com/v2/candidates \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "candidates": [
    {
      "id": 12345,
      "company_id": 1,
      "first_name": "John",
      "last_name": "Doe",
      "emails": [
        "john.doe@example.com"
      ],
      "phones": [
        "+1 5551234567"
      ],
      "source": {
        "id": 1,
        "name": "LinkedIn"
      },
      "origin": {
        "id": 1,
        "name": "Direct"
      },
      "profile": [
        {
          "question_id": 1,
          "question_text": "Email",
          "value": [
            "john.doe@example.com"
          ]
        },
        {
          "question_id": 5,
          "question_text": "Current job title",
          "value": "Senior Developer"
        }
      ],
      "ip": null,
      "created_at": 1711036800,
      "updated_at": 1711036800,
      "last_message_at": null,
      "days_since_last_message": null
    }
  ],
  "pagination": {
    "page_size": 20,
    "page_count": 1,
    "page": 1,
    "total_count": 1
  }
}

Create candidate

Creates a candidate profile and optionally links it to a job/stage on creation. Common entrypoint for imports, inbound forms, and enrichment workflows.

Body
required
application/json
  • city
    Type: string

    Candidate city. Used together with state/country to resolve timezone and location display in the profile header. If omitted or empty, taken from the candidate's 'City' profile answer when present.

  • company_id
    Type: integer

    Target company ID. Required only when the API key has access to multiple companies.

  • country
    Type: string

    Candidate country name or ISO 3166-1 alpha-2 code (e.g. 'United States' or 'US'). If omitted or empty, taken from the candidate's 'Country' profile answer when present.

  • cv
    Type: object · FileData
    • data
      Type: string
      required

      Base64 content

    • file_name
      Type: string
      required

      Original file name.

    • mime_type
      Type: string
      required

      MIME type (e.g. application/pdf).

    • size
      Type: integer

      Optional for uploads, returned in responses

  • email
    Type: stringFormat: email

    Candidate email address. Used for deduplication.

  • first_name
    Type: string

    Candidate first name.

  • job_id
    Type: integer

    Job ID to create an application for this candidate. If omitted, candidate is created without an application.

  • last_name
    Type: string

    Candidate last name.

  • phone
    Type: string

    Candidate phone number.

  • profile
    Type: object

    Key-value map of profile field answers. Keys can be either question text (string) or question_id (integer from GET /questions). Library fields (First name, Last name, Email, Phone, etc.) and custom fields both support text-based keys. Example: {"Years of experience": "5"} or {"42": "5"}. Must be a JSON object — a JSON array or a plain string is rejected with 400 Validation Error. Every key must resolve to a question of the target company and every value must be acceptable for that question's type; otherwise the request is rejected with 400 Validation Error listing the offending keys in validation_errors.profile, and nothing is saved. Multi-value fields such as Email accept an array of values, e.g. {"Email": ["a@example.com", "b@example.com"]}. Yes/No questions take 1 or 0, as a number or as a string — send JSON false as 0, since a JSON false is indistinguishable from an empty value and is rejected.

    • propertyName
      • Type: string
  • stage_id
    Type: integer

    Pipeline stage ID for the initial application. Requires job_id. If omitted with job_id, defaults to the first stage.

  • state
    Type: string

    Candidate state or region. If omitted or empty, taken from the candidate's 'State' profile answer when present.

  • timezone
    Type: string

    IANA timezone (e.g. 'America/Los_Angeles'). If omitted, resolved automatically from city/country. If provided alongside city, overrides the auto-resolved timezone.

Responses
  • Created candidate

    Type: object
    • company_id
      Type: integer
      required

      ID of the company this candidate belongs to

    • created_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • id
      Type: integer
      required

      Unique identifier

    • updated_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • alias
      Type: string | null

      Short alphanumeric alias used in profile URLs. Use this to build candidate profile links — https://app.100hires.com/candidate/{alias}. Also accepted as {id} in API requests.

    • applications
      Type: array object[] · CandidateApplicationSummary[]

      Summary of all applications this candidate has across jobs

      • id
        Type: integer
        required

        Application ID.

      • job
        Type: object
        required

        Job summary (id, title, status).

        • id
          Type: integer
          required

          Integer numbers.

        • title
          Type: string
          required
      • stage
        Type: object · IdName nullable
        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

    • days_since_last_message
      Type: integer | null

      Number of whole days since the last message. Computed at request time. Null if no messages exist.

    • emails
      Type: array string[] | null nullable

      List of candidate email addresses

    • first_name
      Type: string | null

      Candidate's first name

    • ip
      Type: string | null

      IP address from which the candidate applied

    • last_message_at
      Type: integer | nullFormat: int64

      Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.

    • last_name
      Type: string | null

      Candidate's last name

    • origin
      Type: object · IdName nullable

      Where the candidate originally came from (e.g. job board name)

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • phones
      Type: array string[] | null nullable

      List of candidate phone numbers

    • profile
      Type: array object[] · ProfileAnswer[]

      Candidate profile field answers (application form responses). Present only when view=full (default); omitted entirely when view=summary to keep list responses inside the agent context budget — a single candidate can carry dozens of free-form answers.

      • question_id
        Type: integer
        required

        Question ID.

      • question_text
        Type: string
        required

        Question label.

      • value
        required

        Answer value (string, array, or null).

    • source
      Type: object · IdName nullable

      How the candidate was sourced (e.g. LinkedIn, Referral)

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • url_backoffice
      Type: stringFormat: uri

      Absolute backoffice URL of the candidate in the 100Hires recruiter app. Use to render deep-links in agent UIs.

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/candidates
curl https://api.100hires.com/v2/candidates \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "first_name": "Alice",
  "last_name": "Johnson",
  "email": "alice.johnson@example.com",
  "job_id": 123,
  "stage_id": 456,
  "profile": {
    "Current job title": "Senior Engineer",
    "Current company": "Acme Corp"
  }
}'
{
  "id": 12346,
  "alias": "kFm9Qr3",
  "url_backoffice": "https://app.100hires.com/candidate/kFm9Qr3",
  "company_id": 1,
  "first_name": "Alice",
  "last_name": "Johnson",
  "emails": [
    "alice.johnson@example.com"
  ],
  "phones": [],
  "source": {
    "id": 2,
    "name": "Referral"
  },
  "origin": {
    "id": 1,
    "name": "Direct"
  },
  "profile": [
    {
      "question_id": 1,
      "question_text": "Email",
      "value": [
        "alice.johnson@example.com"
      ]
    },
    {
      "question_id": 5,
      "question_text": "Current job title",
      "value": "Senior Engineer"
    },
    {
      "question_id": 6,
      "question_text": "Current company",
      "value": "Acme Corp"
    }
  ],
  "ip": null,
  "applications": [
    {
      "id": 503,
      "job": {
        "id": 123,
        "title": "Backend Engineer"
      },
      "stage": {
        "id": 456,
        "name": "Applied"
      }
    }
  ],
  "created_at": 1711036800,
  "updated_at": 1711036800,
  "last_message_at": null,
  "days_since_last_message": null
}

Get candidate

Returns full candidate data including application summaries.

Path Parameters
  • id
    Type: string Pattern: ^[A-Za-z0-9_-]+$
    required

    Candidate ID (numeric) or alias

Responses
  • Candidate

    Type: object
    • company_id
      Type: integer
      required

      ID of the company this candidate belongs to

    • created_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • id
      Type: integer
      required

      Unique identifier

    • updated_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • alias
      Type: string | null

      Short alphanumeric alias used in profile URLs. Use this to build candidate profile links — https://app.100hires.com/candidate/{alias}. Also accepted as {id} in API requests.

    • applications
      Type: array object[] · CandidateApplicationSummary[]

      Summary of all applications this candidate has across jobs

      • id
        Type: integer
        required

        Application ID.

      • job
        Type: object
        required

        Job summary (id, title, status).

        • id
          Type: integer
          required

          Integer numbers.

        • title
          Type: string
          required
      • stage
        Type: object · IdName nullable
        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

    • days_since_last_message
      Type: integer | null

      Number of whole days since the last message. Computed at request time. Null if no messages exist.

    • emails
      Type: array string[] | null nullable

      List of candidate email addresses

    • first_name
      Type: string | null

      Candidate's first name

    • ip
      Type: string | null

      IP address from which the candidate applied

    • last_message_at
      Type: integer | nullFormat: int64

      Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.

    • last_name
      Type: string | null

      Candidate's last name

    • origin
      Type: object · IdName nullable

      Where the candidate originally came from (e.g. job board name)

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • phones
      Type: array string[] | null nullable

      List of candidate phone numbers

    • profile
      Type: array object[] · ProfileAnswer[]

      Candidate profile field answers (application form responses). Present only when view=full (default); omitted entirely when view=summary to keep list responses inside the agent context budget — a single candidate can carry dozens of free-form answers.

      • question_id
        Type: integer
        required

        Question ID.

      • question_text
        Type: string
        required

        Question label.

      • value
        required

        Answer value (string, array, or null).

    • source
      Type: object · IdName nullable

      How the candidate was sourced (e.g. LinkedIn, Referral)

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • url_backoffice
      Type: stringFormat: uri

      Absolute backoffice URL of the candidate in the 100Hires recruiter app. Use to render deep-links in agent UIs.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/candidates/{id}
curl 'https://api.100hires.com/v2/candidates/{id}' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "id": 12345,
  "alias": "dtGeby2",
  "url_backoffice": "https://app.100hires.com/candidate/dtGeby2",
  "company_id": 1,
  "first_name": "John",
  "last_name": "Doe",
  "emails": [
    "john.doe@example.com"
  ],
  "phones": [
    "+1 5551234567"
  ],
  "source": {
    "id": 1,
    "name": "LinkedIn"
  },
  "origin": {
    "id": 1,
    "name": "Direct"
  },
  "profile": [
    {
      "question_id": 1,
      "question_text": "Email",
      "value": [
        "john.doe@example.com"
      ]
    },
    {
      "question_id": 5,
      "question_text": "Current job title",
      "value": "Senior Developer"
    }
  ],
  "ip": null,
  "applications": [
    {
      "id": 501,
      "job": {
        "id": 123,
        "title": "Backend Engineer"
      },
      "stage": {
        "id": 10,
        "name": "Interview"
      }
    }
  ],
  "created_at": 1711036800,
  "updated_at": 1711036800,
  "last_message_at": null,
  "days_since_last_message": null
}

Update candidate

Updates candidate fields, profile answers, and optional CV payload. Designed for bi-directional sync from ATS, CRM, sourcing, or enrichment tools.

Path Parameters
  • id
    Type: string Pattern: ^[A-Za-z0-9_-]+$
    required

    Candidate ID (numeric) or alias

Body
required
application/json
  • city
    Type: string

    Candidate city. Used together with state/country to resolve timezone and location display in the profile header. If omitted or empty, taken from the candidate's 'City' profile answer when present.

  • company_id
    Type: integer

    Target company ID. Required only when the API key has access to multiple companies.

  • country
    Type: string

    Candidate country name or ISO 3166-1 alpha-2 code (e.g. 'United States' or 'US'). If omitted or empty, taken from the candidate's 'Country' profile answer when present.

  • cv
    Type: object · FileData
    • data
      Type: string
      required

      Base64 content

    • file_name
      Type: string
      required

      Original file name.

    • mime_type
      Type: string
      required

      MIME type (e.g. application/pdf).

    • size
      Type: integer

      Optional for uploads, returned in responses

  • email
    Type: stringFormat: email

    Candidate email address. Used for deduplication.

  • first_name
    Type: string

    Candidate first name.

  • job_id
    Type: integer

    Job ID to create an application for this candidate. If omitted, candidate is created without an application.

  • last_name
    Type: string

    Candidate last name.

  • phone
    Type: string

    Candidate phone number.

  • profile
    Type: object

    Key-value map of profile field answers. Keys can be either question text (string) or question_id (integer from GET /questions). Library fields (First name, Last name, Email, Phone, etc.) and custom fields both support text-based keys. Example: {"Years of experience": "5"} or {"42": "5"}. Must be a JSON object — a JSON array or a plain string is rejected with 400 Validation Error. Every key must resolve to a question of the target company and every value must be acceptable for that question's type; otherwise the request is rejected with 400 Validation Error listing the offending keys in validation_errors.profile, and nothing is saved. Multi-value fields such as Email accept an array of values, e.g. {"Email": ["a@example.com", "b@example.com"]}. Yes/No questions take 1 or 0, as a number or as a string — send JSON false as 0, since a JSON false is indistinguishable from an empty value and is rejected.

    • propertyName
      • Type: string
  • stage_id
    Type: integer

    Pipeline stage ID for the initial application. Requires job_id. If omitted with job_id, defaults to the first stage.

  • state
    Type: string

    Candidate state or region. If omitted or empty, taken from the candidate's 'State' profile answer when present.

  • timezone
    Type: string

    IANA timezone (e.g. 'America/Los_Angeles'). If omitted, resolved automatically from city/country. If provided alongside city, overrides the auto-resolved timezone.

Responses
  • Updated candidate

    Type: object
    • company_id
      Type: integer
      required

      ID of the company this candidate belongs to

    • created_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • id
      Type: integer
      required

      Unique identifier

    • updated_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • alias
      Type: string | null

      Short alphanumeric alias used in profile URLs. Use this to build candidate profile links — https://app.100hires.com/candidate/{alias}. Also accepted as {id} in API requests.

    • applications
      Type: array object[] · CandidateApplicationSummary[]

      Summary of all applications this candidate has across jobs

      • id
        Type: integer
        required

        Application ID.

      • job
        Type: object
        required

        Job summary (id, title, status).

        • id
          Type: integer
          required

          Integer numbers.

        • title
          Type: string
          required
      • stage
        Type: object · IdName nullable
        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

    • days_since_last_message
      Type: integer | null

      Number of whole days since the last message. Computed at request time. Null if no messages exist.

    • emails
      Type: array string[] | null nullable

      List of candidate email addresses

    • first_name
      Type: string | null

      Candidate's first name

    • ip
      Type: string | null

      IP address from which the candidate applied

    • last_message_at
      Type: integer | nullFormat: int64

      Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.

    • last_name
      Type: string | null

      Candidate's last name

    • origin
      Type: object · IdName nullable

      Where the candidate originally came from (e.g. job board name)

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • phones
      Type: array string[] | null nullable

      List of candidate phone numbers

    • profile
      Type: array object[] · ProfileAnswer[]

      Candidate profile field answers (application form responses). Present only when view=full (default); omitted entirely when view=summary to keep list responses inside the agent context budget — a single candidate can carry dozens of free-form answers.

      • question_id
        Type: integer
        required

        Question ID.

      • question_text
        Type: string
        required

        Question label.

      • value
        required

        Answer value (string, array, or null).

    • source
      Type: object · IdName nullable

      How the candidate was sourced (e.g. LinkedIn, Referral)

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • url_backoffice
      Type: stringFormat: uri

      Absolute backoffice URL of the candidate in the 100Hires recruiter app. Use to render deep-links in agent UIs.

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for put/candidates/{id}
curl 'https://api.100hires.com/v2/candidates/{id}' \
  --request PUT \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "company_id": 1,
  "first_name": "",
  "last_name": "",
  "email": "",
  "phone": "",
  "profile": {
    "additionalProperty": ""
  },
  "job_id": 1,
  "stage_id": 1,
  "cv": {
    "data": "",
    "file_name": "",
    "mime_type": "",
    "size": 1
  },
  "city": "",
  "state": "",
  "country": "",
  "timezone": ""
}'
{
  "id": 12345,
  "alias": "dtGeby2",
  "url_backoffice": "https://app.100hires.com/candidate/dtGeby2",
  "company_id": 1,
  "first_name": "Alice",
  "last_name": "Johnson",
  "emails": [
    "alice.johnson@example.com"
  ],
  "phones": [
    "+1 5559876543"
  ],
  "source": {
    "id": 2,
    "name": "Referral"
  },
  "origin": {
    "id": 1,
    "name": "Direct"
  },
  "profile": [
    {
      "question_id": 1,
      "question_text": "Email",
      "value": [
        "alice.johnson@example.com"
      ]
    },
    {
      "question_id": 5,
      "question_text": "Current job title",
      "value": "Senior Engineer"
    }
  ],
  "ip": null,
  "applications": [
    {
      "id": 502,
      "job": {
        "id": 123,
        "title": "Backend Engineer"
      },
      "stage": {
        "id": 11,
        "name": "Offer"
      }
    }
  ],
  "created_at": 1711036800,
  "updated_at": 1711123200,
  "last_message_at": null,
  "days_since_last_message": null
}

Delete candidate

Deletes a candidate. Use this to keep external systems aligned with candidate lifecycle policies.

Path Parameters
  • id
    Type: string Pattern: ^[A-Za-z0-9_-]+$
    required

    Candidate ID (numeric) or alias

Responses
  • Deleted

    Type: object
    • success
      Type: boolean
      required

      Always true on success.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for delete/candidates/{id}
curl 'https://api.100hires.com/v2/candidates/{id}' \
  --request DELETE \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "success": true
}

List candidate tags

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

Path Parameters
  • id
    Type: string Pattern: ^[A-Za-z0-9_-]+$
    required

    Candidate ID (numeric) or alias

Responses
  • Candidate tags

    Type: object
    • pagination
      Type: object · Pagination
      required
      • page
        Type: integer
        required

        Current page number.

      • page_count
        Type: integer
        required

        Total number of pages.

      • page_size
        Type: integer
        required

        Items per page.

      • total_count
        Type: integer
        required

        Total number of items.

    • tags
      Type: array string[]
      required

      Array of tags.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/candidates/{id}/tags
curl 'https://api.100hires.com/v2/candidates/{id}/tags' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "tags": [
    "Senior",
    "Engineering",
    "Remote"
  ],
  "pagination": {
    "page_size": 20,
    "page_count": 1,
    "page": 1,
    "total_count": 3
  }
}

Attach tags to candidate

Adds one or more tags to a candidate in a single request. Typical use case: campaign tagging, qualification labels, and source attribution.

Path Parameters
  • id
    Type: string Pattern: ^[A-Za-z0-9_-]+$
    required

    Candidate ID (numeric) or alias

Body
required
application/json
  • tags
    Type: array string[]
    required

    Array of tag strings to add.

Responses
  • Updated candidate tags

    Type: object
    • pagination
      Type: object · Pagination
      required
      • page
        Type: integer
        required

        Current page number.

      • page_count
        Type: integer
        required

        Total number of pages.

      • page_size
        Type: integer
        required

        Items per page.

      • total_count
        Type: integer
        required

        Total number of items.

    • tags
      Type: array string[]
      required

      Array of tags.

  • Bad request

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/candidates/{id}/tags
curl 'https://api.100hires.com/v2/candidates/{id}/tags' \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "tags": [
    ""
  ]
}'
{
  "tags": [
    "Senior",
    "Engineering",
    "Remote",
    "Urgent"
  ],
  "pagination": {
    "page_size": 20,
    "page_count": 1,
    "page": 1,
    "total_count": 4
  }
}

Delete candidate tag

Removes a specific tag from a candidate. Use when external logic recalculates segmentation or lifecycle labels.

Path Parameters
  • id
    Type: string Pattern: ^[A-Za-z0-9_-]+$
    required

    Candidate ID (numeric) or alias

  • tag
    Type: string
    required

    Tag text (case-sensitive, URL-encoded).

Responses
  • Deleted

    Type: object
    • success
      Type: boolean
      required

      Always true on success.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for delete/candidates/{id}/tags/{tag}
curl 'https://api.100hires.com/v2/candidates/{id}/tags/{tag}' \
  --request DELETE \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "success": true
}

List candidate files

Lists candidate attachments and metadata (resume/other files). Use for document sync, compliance exports, and recruiter tooling.

Path Parameters
  • id
    Type: string Pattern: ^[A-Za-z0-9_-]+$
    required

    Candidate ID (numeric) or alias

Query Parameters
  • view
    Type: stringenum

    Response shape selector for list endpoints. full (default) returns every field — backward-compatible with pre-existing clients. summary returns a thinned payload designed for agent-friendly list browsing: heavy fields (description HTML, embedded profile answers, full message bodies, embedded relations, etc.) are omitted or replaced with *_preview truncations. Use summary when paging through large result sets and fetch a single record with the corresponding GET /{resource}/{id} endpoint when full data is needed.

    • full
    • summary
Responses
  • Candidate files

    Type: object
    • files
      Type: array · CandidateFile[]
      required

      Array of candidate files.

      • Type: object · ApiAttachment

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

        • file
          Type: object · AttachmentFile
          required
          • file_ext
            Type: string
            required

            File extension.

          • file_type
            Type: string
            required

            File type category.

          • is_image
            Type: boolean nullable
            required

            Whether the file is an image.

          • orig_file_name
            Type: string
            required

            Original file name.

          • readable_size
            Type: string
            required

            Human-readable file size.

        • relative_time
          Type: string
          required

          Human-readable time since upload (e.g. "2 days ago").

        • url
          Type: stringFormat: uri nullable
          required

          Absolute download URL (e.g. https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit with Authorization: Bearer <API_KEY>.

        • uuid
          Type: stringFormat: uuid
          required

          Unique attachment identifier. Stable across API calls; use in referencing endpoints.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/candidates/{id}/files
curl 'https://api.100hires.com/v2/candidates/{id}/files' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "files": [
    {
      "uuid": "7a3c0d5f-8b4e-4a9f-9e1c-2a3b4c5d6e7f",
      "url": "https://api.100hires.com/v2/attachments/candidate/7a3c0d5f-8b4e-4a9f-9e1c-2a3b4c5d6e7f/john_doe_resume.pdf",
      "relative_time": "2 days ago",
      "file": {
        "is_image": false,
        "orig_file_name": "john_doe_resume.pdf",
        "file_ext": "pdf",
        "file_type": "application/pdf",
        "readable_size": "240 KB"
      }
    },
    {
      "uuid": "9c2b4d6e-1a8f-4d7c-8b5e-3c9a0d2e4f6b",
      "url": "https://api.100hires.com/v2/attachments/candidate/9c2b4d6e-1a8f-4d7c-8b5e-3c9a0d2e4f6b/portfolio.pdf",
      "relative_time": "1 day ago",
      "file": {
        "is_image": false,
        "orig_file_name": "portfolio.pdf",
        "file_ext": "pdf",
        "file_type": "application/pdf",
        "readable_size": "1 MB"
      }
    }
  ]
}

Upload candidate file

Uploads a new file for a candidate using base64 payload. Useful for resume ingestion, portfolio uploads, and post-processing pipelines.

Path Parameters
  • id
    Type: string Pattern: ^[A-Za-z0-9_-]+$
    required

    Candidate ID (numeric) or alias

Body
required
application/json
  • file
    Type: object · FileData
    required
    • data
      Type: string
      required

      Base64 content

    • file_name
      Type: string
      required

      Original file name.

    • mime_type
      Type: string
      required

      MIME type (e.g. application/pdf).

    • size
      Type: integer

      Optional for uploads, returned in responses

Responses
  • Uploaded file

    Type: object · ApiAttachment

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

    • file
      Type: object · AttachmentFile
      required
      • file_ext
        Type: string
        required

        File extension.

      • file_type
        Type: string
        required

        File type category.

      • is_image
        Type: boolean nullable
        required

        Whether the file is an image.

      • orig_file_name
        Type: string
        required

        Original file name.

      • readable_size
        Type: string
        required

        Human-readable file size.

    • relative_time
      Type: string
      required

      Human-readable time since upload (e.g. "2 days ago").

    • url
      Type: stringFormat: uri nullable
      required

      Absolute download URL (e.g. https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit with Authorization: Bearer <API_KEY>.

    • uuid
      Type: stringFormat: uuid
      required

      Unique attachment identifier. Stable across API calls; use in referencing endpoints.

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/candidates/{id}/files
curl 'https://api.100hires.com/v2/candidates/{id}/files' \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "file": {
    "data": "",
    "file_name": "",
    "mime_type": "",
    "size": 1
  }
}'
{
  "uuid": "4e8a2f1b-5c7d-4f9e-8a3b-6d1e2f3a4b5c",
  "url": "https://api.100hires.com/v2/attachments/candidate/4e8a2f1b-5c7d-4f9e-8a3b-6d1e2f3a4b5c/cover_letter.pdf",
  "relative_time": "a few seconds ago",
  "file": {
    "is_image": false,
    "orig_file_name": "cover_letter.pdf",
    "file_ext": "pdf",
    "file_type": "application/pdf",
    "readable_size": "100 KB"
  }
}

Get candidate resume

Returns the primary candidate resume with file metadata. Use ?include=text_content to get the parsed plain-text content without downloading and parsing the file yourself.

Path Parameters
  • id
    Type: string Pattern: ^[A-Za-z0-9_-]+$
    required

    Candidate ID (numeric) or alias

Query Parameters
  • include
    Type: string

    Comma-separated list of optional fields to include. Supported: text_content — parsed plain-text content of the resume file.

Responses
  • Resume file

    Resume file with optional parsed text content (when ?include=text_content is used, the response includes a text field with the parsed plain-text content).

    • file
      Type: object · AttachmentFile
      required
      • file_ext
        Type: string
        required

        File extension.

      • file_type
        Type: string
        required

        File type category.

      • is_image
        Type: boolean nullable
        required

        Whether the file is an image.

      • orig_file_name
        Type: string
        required

        Original file name.

      • readable_size
        Type: string
        required

        Human-readable file size.

    • relative_time
      Type: string
      required

      Human-readable time since upload (e.g. "2 days ago").

    • url
      Type: stringFormat: uri nullable
      required

      Absolute download URL (e.g. https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit with Authorization: Bearer <API_KEY>.

    • uuid
      Type: stringFormat: uuid
      required

      Unique attachment identifier. Stable across API calls; use in referencing endpoints.

    • text
      Type: string nullable

      Parsed plain-text content of the resume. Only included when ?include=text_content is specified AND view=full (the default). Suppressed when view=summary even if the include was requested. May be null if the file format is unsupported or parsing fails.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/candidates/{id}/resume
curl 'https://api.100hires.com/v2/candidates/{id}/resume' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "uuid": "7a3c0d5f-8b4e-4a9f-9e1c-2a3b4c5d6e7f",
  "url": "https://api.100hires.com/v2/attachments/candidate/7a3c0d5f-8b4e-4a9f-9e1c-2a3b4c5d6e7f/john_doe_resume.pdf",
  "relative_time": "2 days ago",
  "file": {
    "is_image": false,
    "orig_file_name": "john_doe_resume.pdf",
    "file_ext": "pdf",
    "file_type": "application/pdf",
    "readable_size": "240 KB"
  },
  "text": "John Doe\nSenior Developer\n\nExperience:\n- Acme Corp, 2019-2024\n- Beta Inc, 2016-2019"
}

List candidate activities

Returns timeline activities for a candidate with pagination. Use ?event_type=comment,copilot_response to filter by specific event types, and ?since=…&until=… (Unix timestamp in seconds) to constrain the time window.

Path Parameters
  • id
    Type: string Pattern: ^[A-Za-z0-9_-]+$
    required

    Candidate ID (numeric) or alias

Query Parameters
  • page
    Type: integer
    min:  
    1

    Page number (1-based).

  • size
    Type: integer
    min:  
    1
    max:  
    100

    Page size. Values above 100 are rejected with 400. Default 20, max 100.

  • event_type
    Type: string

    Comma-separated list of event types to filter by. Supported: comment, copilot_response, stage_moved, automation_action_triggered, assign_job, enrichment, call, validate_emails, profile_mutation, qualification, assign_tags, assign_sources, candidate_rate.

  • since

    Inclusive lower bound on event timestamp. Accepts a Unix timestamp (seconds) or an ISO-8601 string with timezone offset (e.g. 2026-04-01T00:00:00Z, 2026-04-01T00:00:00.123+03:00). Fractional seconds are accepted but truncated to whole seconds.

    • Type: integer
      min:  
      0

      Integer numbers.

  • until

    Inclusive upper bound on event timestamp. Accepts a Unix timestamp (seconds) or an ISO-8601 string with timezone offset (e.g. 2026-04-01T00:00:00Z, 2026-04-01T00:00:00.123+03:00). Fractional seconds are accepted but truncated to whole seconds.

    • Type: integer
      min:  
      0

      Integer numbers.

  • view
    Type: stringenum

    Response shape selector for list endpoints. full (default) returns every field — backward-compatible with pre-existing clients. summary returns a thinned payload designed for agent-friendly list browsing: heavy fields (description HTML, embedded profile answers, full message bodies, embedded relations, etc.) are omitted or replaced with *_preview truncations. Use summary when paging through large result sets and fetch a single record with the corresponding GET /{resource}/{id} endpoint when full data is needed.

    • full
    • summary
Responses
  • Candidate activities

    Type: object
    • activities
      Type: array object[] · Activity[]
      required

      Array of activity events.

      • application_id
        Type: integer | null
        required

        ID of the job application this event is linked to, if any

      • candidate_id
        Type: integer
        required

        ID of the candidate this event belongs to

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • event
        required

        Shared structure for all text-bubble events: assign_job, candidate_rate, assign_sources, assign_tags, qualification, profile_mutation, validate_emails, stage_moved, enrichment, automation_action_triggered.

        • data
          Type: object
          required

          Event data payload.

          • date
            Type: string
            required

            Short formatted date (e.g. "Jan 1")

          • full_time
            Type: string
            required

            Full formatted datetime string

          • relative_time
            Type: string
            required

            Human-readable relative time (e.g. "2 days ago")

          • text
            Type: string
            required

            HTML-formatted description of the event

          • from_stage_id
            Type: integer nullable

            Pipeline stage ID the candidate was in before qualification/disqualification. Only present for qualification events.

          • from_stage_name
            Type: string nullable

            Pipeline stage name the candidate was in before qualification/disqualification. Only present for qualification events.

        • is_text_bubble
          enum
          const:  
          true
          required

          Always true for text bubble events.

          • true
        • type
          Type: stringenum
          required

          Event type identifier.

          • assign_job
          • candidate_rate
          • assign_sources
          • assign_tags
          • qualification
      • event_id
        Type: integer
        required

        Unique ID of the timeline event

      • user_id
        Type: integer | null
        required

        ID of the user who triggered this event, if applicable

    • page_size
      Type: integer
      required

      Items per page. Duplicated at top level for backward compatibility (also available in pagination.page_size).

    • pagination
      Type: object · Pagination
      required
      • page
        Type: integer
        required

        Current page number.

      • page_count
        Type: integer
        required

        Total number of pages.

      • page_size
        Type: integer
        required

        Items per page.

      • total_count
        Type: integer
        required

        Total number of items.

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/candidates/{id}/activities
curl 'https://api.100hires.com/v2/candidates/{id}/activities' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "activities": [
    {
      "event_id": 80001,
      "candidate_id": 12345,
      "application_id": 501,
      "user_id": 42,
      "event": {
        "type": "stage_moved",
        "is_text_bubble": true,
        "data": {
          "text": "Moved from <b>Applied</b> to <b>Interview</b>",
          "date": "Mar 22",
          "relative_time": "2 days ago",
          "full_time": "2024-03-22 10:30:00"
        }
      },
      "created_at": 1711100200
    },
    {
      "event_id": 80002,
      "candidate_id": 12345,
      "application_id": null,
      "user_id": 42,
      "event": {
        "type": "comment",
        "comment": {
          "id": 3001,
          "candidate_id": 12345,
          "user_id": 42,
          "author": "Jane Smith",
          "photo": "https://app.100hires.com/photos/42.jpg",
          "text": "Strong technical skills, recommend for next round.",
          "date": "Mar 22",
          "datetime": "2024-03-22 14:00:00",
          "relative_time": "2 days ago",
          "visible": "all",
          "is_edit": false,
          "attachments": []
        }
      },
      "created_at": 1711112400
    }
  ],
  "pagination": {
    "page_size": 20,
    "page_count": 1,
    "page": 1,
    "total_count": 2
  }
}

Disqualify candidate from active applications

Disqualifies candidate applications in one action and returns affected application IDs. Typical for policy-driven rejection or bulk automation rules.

Path Parameters
  • id
    Type: string Pattern: ^[A-Za-z0-9_-]+$
    required

    Candidate ID (numeric) or alias

Body
application/json
  • reasons
    Type: array

    Array of rejection reason IDs from GET /taxonomy/rejection-reasons.

      • Type: integer

        Integer numbers.

Responses
  • Disqualified

    Type: object
    • rejected_applications
      Type: array integer[]
      required

      Array of rejected application IDs.

    • success
      Type: boolean
      required

      Whether disqualification succeeded.

  • Bad request

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/candidates/{id}/disqualify
curl 'https://api.100hires.com/v2/candidates/{id}/disqualify' \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "reasons": [
    1
  ]
}'
{
  "success": true,
  "rejected_applications": [
    501,
    502
  ]
}

Batch add tags to candidates

Adds tags to multiple candidates in one request. Accepts candidate IDs or aliases. Returns per-item results with partial success support.

Body
required
application/json
  • ids
    Type: array integer[] …100
    required

    Candidate IDs to tag (max 100)

  • tags
    Type: array string[]
    required

    Tag names to attach

Responses
  • Batch results with per-item success/failure

    Type: object
    • results
      Type: array object[] · BatchResultItem[]
      required

      Array of per-item results.

      • id
        required
        • Type: integer

          Entity ID or alias from the request

      • data
        Type: object

        Entity payload on success. Present only when the item succeeded.

      • error
        Type: object

        Structured error object on failure. Present only when the item failed. Same format as top-level API errors.

        • code
          Type: integer

          Integer numbers.

        • message
          Type: string
        • name
          Type: string
        • status
          Type: integer

          Integer numbers.

        • validation_errors
          Type: object
          • propertyName
            Type: string
  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/candidates/batch/tags
curl https://api.100hires.com/v2/candidates/batch/tags \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "ids": [
    1
  ],
  "tags": [
    ""
  ]
}'
{
  "results": [
    {
      "id": 12345,
      "data": {
        "tags": [
          "Senior",
          "Engineering",
          "Remote"
        ]
      }
    },
    {
      "id": "dtGeby2",
      "error": {
        "name": "Not Found",
        "message": "Candidate not found",
        "status": 404
      }
    }
  ]
}

Batch remove tags from candidates

Removes specified tags from multiple candidates in one request. Returns per-item results with partial success support.

Body
required
application/json
  • ids
    Type: array integer[] …100
    required

    Candidate IDs to tag (max 100)

  • tags
    Type: array string[]
    required

    Tag names to attach

Responses
  • Batch results with per-item success/failure

    Type: object
    • results
      Type: array object[] · BatchResultItem[]
      required

      Array of per-item results.

      • id
        required
        • Type: integer

          Entity ID or alias from the request

      • data
        Type: object

        Entity payload on success. Present only when the item succeeded.

      • error
        Type: object

        Structured error object on failure. Present only when the item failed. Same format as top-level API errors.

        • code
          Type: integer

          Integer numbers.

        • message
          Type: string
        • name
          Type: string
        • status
          Type: integer

          Integer numbers.

        • validation_errors
          Type: object
          • propertyName
            Type: string
  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for delete/candidates/batch/tags
curl https://api.100hires.com/v2/candidates/batch/tags \
  --request DELETE \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "ids": [
    1
  ],
  "tags": [
    ""
  ]
}'
{
  "results": [
    {
      "id": 12345,
      "data": {
        "tags": []
      }
    },
    {
      "id": "dtGeby2",
      "error": {
        "name": "Not Found",
        "message": "Candidate not found",
        "status": 404
      }
    }
  ]
}

Applications

List applications

Returns paginated applications across accessible companies or for a target company. Supports filtering by AI score range via ai_score_min and ai_score_max. Core endpoint for pipeline analytics, sync jobs, and ATS dashboards.

Query Parameters
  • company_id
    Type: integer

    Optional target company ID. Since each API key is already bound to one company, this is only needed when the key owner has access to multiple companies.

  • candidate_id
    Type: integer

    Filter applications by candidate ID.

  • job_id
    Type: integer

    Filter applications by job ID.

  • stage_id
    Type: integer

    Filter applications by pipeline stage ID. Best used together with job_id.

  • status
    Type: stringenum

    Filter by application status: pending (active), hired, or rejected.

    • pending
    • hired
    • rejected
  • created_after

    Return only applications created at or after this time. Accepts a Unix timestamp in seconds (not milliseconds) or an ISO-8601 string with timezone offset (e.g. 2026-05-11T00:00:00Z, 2026-05-11T00:00:00.123+03:00). Fractional seconds are accepted but truncated to whole seconds.

    • Type: integer
      min:  
      0

      Integer numbers.

  • updated_after

    Return only applications updated at or after this time. Accepts a Unix timestamp in seconds (not milliseconds) or an ISO-8601 string with timezone offset (e.g. 2026-05-11T00:00:00Z, 2026-05-11T00:00:00.123+03:00). Fractional seconds are accepted but truncated to whole seconds. Use for incremental sync.

    • Type: integer
      min:  
      0

      Integer numbers.

  • ai_score_min
    Type: integer

    Return only applications with ai_score greater than or equal to this value.

  • ai_score_max
    Type: integer

    Return only applications with ai_score less than or equal to this value.

  • sort
    Type: stringenum

    Sort order. Prefix with - for descending. Default: -created_at.

    • created_at
    • -created_at
    • ai_score
    • -ai_score
    • last_message_at
    • -last_message_at
  • include
    Type: string

    Comma-separated list of related resources to include. Supported: candidate — full candidate profile, cv.text — parsed plain-text CV content, job — full job payload with url_backoffice for UI deep-linking.

  • page
    Type: integer
    min:  
    1

    Page number (1-based). Defaults to 1.

  • size
    Type: integer
    min:  
    1
    max:  
    100

    Number of items per page (1–100). Defaults to 20.

  • view
    Type: stringenum

    Response shape selector for list endpoints. full (default) returns every field — backward-compatible with pre-existing clients. summary returns a thinned payload designed for agent-friendly list browsing: heavy fields (description HTML, embedded profile answers, full message bodies, embedded relations, etc.) are omitted or replaced with *_preview truncations. Use summary when paging through large result sets and fetch a single record with the corresponding GET /{resource}/{id} endpoint when full data is needed.

    • full
    • summary
Responses
  • Application list

    Type: object
    • applications
      Type: array object[] · Application[]
      required

      Array of applications.

      • candidate_id
        Type: integer
        required

        ID of the candidate

      • company_id
        Type: integer
        required

        ID of the company

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • id
        Type: integer
        required

        Unique identifier

      • is_disqualified
        Type: boolean
        required

        Whether the candidate is disqualified for this application

      • job_id
        Type: integer
        required

        ID of the job

      • status
        Type: stringenum
        required

        Application status. Changes via hire/reject/unreject actions.

        • active
        • hired
        • rejected
      • updated_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • ai_recommendation
        Type: string | null

        AI-generated recommendation label (e.g. Strong, Good, Weak)

      • ai_score
        Type: integer | null

        AI-generated candidate fit score (0-100)

      • ai_scoring_updated_at
        Type: integer | nullFormat: int64

        Unix timestamp (seconds) of the latest completed AI scoring result

      • candidate
        Type: object · ApplicationCandidate nullable

        Embedded candidate data (included when requested via include=candidate)

        • company_id
          Type: integer
          required

          ID of the company this candidate belongs to

        • created_at
          Type: integerFormat: int64
          required

          Unix timestamp (seconds)

        • id
          Type: integer
          required

          Unique identifier

        • profile
          Type: array object[] · ProfileAnswer[]
          required

          Candidate profile field answers

          • question_id
            Type: integer
            required

            Question ID.

          • question_text
            Type: string
            required

            Question label.

          • value
            required

            Answer value (string, array, or null).

        • updated_at
          Type: integerFormat: int64
          required

          Unix timestamp (seconds)

        • days_since_last_message
          Type: integer | null

          Number of whole days since the last message. Computed at request time. Null if no messages exist.

        • emails
          Type: array string[] | null nullable

          List of candidate email addresses

        • first_name
          Type: string | null

          Candidate's first name

        • ip
          Type: string | null

          IP address from which the candidate applied

        • last_message_at
          Type: integer | nullFormat: int64

          Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.

        • last_name
          Type: string | null

          Candidate's last name

        • origin
          Type: object · IdName nullable

          Where the candidate originally came from

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • phones
          Type: array string[] | null nullable

          List of candidate phone numbers

        • source
          Type: object · IdName nullable

          How the candidate was sourced

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

      • custom_fields
        Type: object nullable

        Custom field values as key-value pairs

        • propertyName
          Type: anything
      • cv
        nullable

        Application CV. Returns standard attachment metadata + download URL. When ?include=cv.text is requested, a text field with parsed plain-text content is added.

        • file
          Type: object · AttachmentFile
          required
          • file_ext
            Type: string
            required

            File extension.

          • file_type
            Type: string
            required

            File type category.

          • is_image
            Type: boolean nullable
            required

            Whether the file is an image.

          • orig_file_name
            Type: string
            required

            Original file name.

          • readable_size
            Type: string
            required

            Human-readable file size.

        • relative_time
          Type: string
          required

          Human-readable time since upload (e.g. "2 days ago").

        • url
          Type: stringFormat: uri nullable
          required

          Absolute download URL (e.g. https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit with Authorization: Bearer <API_KEY>.

        • uuid
          Type: stringFormat: uuid
          required

          Unique attachment identifier. Stable across API calls; use in referencing endpoints.

        • text
          Type: 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.

      • days_since_last_message
        Type: integer | null

        Number of whole days since the last message. Computed at request time. Null if no messages exist.

      • hired_at
        Type: integer | nullFormat: int64

        Unix timestamp (seconds)

      • hiring_team
        Type: array object[] | null · JobHiringTeamMember[] nullable

        Team members assigned to this application's job

        • full_name
          Type: string
          required

          User full name.

        • id
          Type: integer
          required

          User ID.

        • email
          Type: string | null

          User email.

        • role
          Type: string | null

          Role on hiring team (e.g. hiring_manager, recruiter).

      • internal_job_id
        Type: string | null

        Company's internal job identifier

      • job
        Type: object · Job nullable

        Embedded job payload (included when requested via include=job). Use job.url_backoffice to deep-link UI widgets to the job's pipeline view in the recruiter app.

        • company_id
          Type: integer
          required

          ID of the company this job belongs to

        • created_at
          Type: integerFormat: int64
          required

          Unix timestamp (seconds)

        • id
          Type: integer
          required

          Unique identifier

        • is_remote
          Type: boolean
          required

          Whether this is a remote position

        • status
          Type: string
          required

          Job status: open, closed, draft, or archived

        • title
          Type: string
          required

          Public job title shown to candidates

        • updated_at
          Type: integerFormat: int64
          required

          Unix timestamp (seconds)

        • url
          Type: string
          required

          Public URL of the job posting page

        • ai_scoring_criteria
          Type: array object[] · 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
            Type: integer
            required

            Unique identifier of the criterion.

          • position
            Type: integer
            required

            0-based ordinal of the criterion in the job's list.

          • text
            Type: string
            required

            Prompt text describing what to evaluate.

          • weight
            Type: integer
            min:  
            1
            max:  
            10
            required

            Relative importance of this criterion in the total score (1–10).

          • title
            Type: string | null

            Optional short label for the criterion.

        • alias
          Type: string | null

          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.

        • category
          Type: object · IdName nullable

          Job category (e.g. Engineering, Marketing)

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • department
          Type: object · IdName nullable

          Department this job belongs to

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • description
          Type: 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.

        • education_level
          Type: object · IdName nullable

          Required education level

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • employment_type
          Type: object · IdName nullable

          Employment type (e.g. Full-time, Part-time, Contract)

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • experience_level
          Type: object · IdName nullable

          Required experience level (e.g. Entry, Mid, Senior)

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • hiring_team
          Type: array object[] · JobHiringTeamMember[]

          Team members assigned to this job. Embedded via include=hiring_team. Suppressed when view=summary even if the include was requested.

          • full_name
            Type: string
            required

            User full name.

          • id
            Type: integer
            required

            User ID.

          • email
            Type: string | null

            User email.

          • role
            Type: string | null

            Role on hiring team (e.g. hiring_manager, recruiter).

        • hours_per_week_max
          Type: integer | null

          Maximum hours per week

        • hours_per_week_min
          Type: integer | null

          Minimum hours per week

        • indeed_posting_data
          Type: object

          Indeed job board posting metadata. Present only when view=full (default); omitted entirely when view=summary.

          • propertyName
            Type: anything
        • internal_job_id
          Type: string | null

          Company's internal job identifier (e.g. requisition number)

        • internal_title
          Type: string | null

          Internal job title visible only to the hiring team

        • is_satellite
          Type: boolean

          Whether this job is a satellite (child) of a canonical job. Satellite jobs share the candidate pipeline of their parent.

        • location
          Type: object · JobLocation nullable

          Job location details

          • city
            Type: string

            City.

          • country
            Type: string

            Country.

          • full_address
            Type: string

            Full formatted address.

          • postal_code
            Type: string

            Postal code.

          • state
            Type: string

            State or region.

          • street_address
            Type: string

            Street address.

        • parent_job_id
          Type: integer | null

          ID of the canonical (parent) job. Null for canonical jobs. Recruiting operations should target the canonical job.

        • pipeline_stages
          Type: array object[] | null 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
            Type: integer

            Integer numbers.

          • name
            Type: string
        • resume_field_status
          Type: string | nullenum

          Whether resume upload is required, optional, or hidden on the application form

          • required
          • optional
          • hidden
        • salary_currency
          Type: string | null

          Salary currency code (e.g. USD, EUR)

        • salary_max
          Type: number | null

          Maximum salary

        • salary_min
          Type: number | null

          Minimum salary

        • salary_period
          Type: string | nullenum

          Salary period

          • annually
          • monthly
          • daily
          • hourly
        • url_backoffice
          Type: 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.

        • workflow
          Type: object · IdName nullable

          Hiring workflow (pipeline) assigned to this job. Embedded via include=workflow. Suppressed when view=summary even if the include was requested.

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • workflow_id
          Type: integer | null

          ID of the hiring workflow (pipeline) assigned to this job

      • job_alias
        Type: string | null

        Short alias of the job, usable in URLs (e.g. 79SZHfT)

      • last_message_at
        Type: integer | nullFormat: int64

        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.

      • rejected_at
        Type: integer | nullFormat: int64

        Unix timestamp (seconds)

      • rejection_reason
        Type: array object[] | null · IdName[] nullable

        Reasons for rejection. Null if not rejected.

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • stage
        Type: object · IdName nullable

        Current pipeline stage of the application

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • url_backoffice
        Type: stringFormat: 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.

    • pagination
      Type: object · Pagination
      required
      • page
        Type: integer
        required

        Current page number.

      • page_count
        Type: integer
        required

        Total number of pages.

      • page_size
        Type: integer
        required

        Items per page.

      • total_count
        Type: integer
        required

        Total number of items.

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/applications
curl https://api.100hires.com/v2/applications \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "applications": [
    {
      "id": 10,
      "candidate_id": 10,
      "job_id": 1,
      "internal_job_id": "",
      "company_id": 1,
      "stage": {
        "id": 3,
        "name": "Phone screen"
      },
      "status": "active",
      "is_disqualified": false,
      "cv": null,
      "rejected_at": null,
      "rejection_reason": null,
      "hired_at": null,
      "hiring_team": null,
      "custom_fields": null,
      "ai_score": null,
      "ai_recommendation": null,
      "ai_scoring_updated_at": null,
      "created_at": 1606348802,
      "updated_at": 1606348802,
      "last_message_at": null,
      "days_since_last_message": null,
      "candidate": {
        "id": 10,
        "company_id": 1,
        "first_name": "",
        "last_name": "",
        "emails": null,
        "phones": null,
        "source": null,
        "origin": {
          "id": 5,
          "name": "added_manually"
        },
        "profile": [],
        "created_at": 1606176005,
        "updated_at": 1606176005,
        "last_message_at": null,
        "days_since_last_message": null,
        "ip": null
      }
    }
  ],
  "pagination": {
    "page": 1,
    "page_count": 1,
    "page_size": 25,
    "total_count": 10
  }
}

Create application

Creates an application by linking an existing candidate to a job, with optional stage/CV. Use for sourcing workflows and manual application ingestion.

Query Parameters
  • include
    Type: string

    Comma-separated list of related resources to include. Supported: candidate — full candidate profile, cv.text — parsed plain-text CV content, job — full job payload with url_backoffice for UI deep-linking.

Body
required
application/json
  • candidate_id
    Type: string Pattern: ^[A-Za-z0-9_-]+$
    required

    Candidate ID (numeric) or alias

  • job_id
    Type: integer
    required

    Job ID to apply the candidate to.

  • cv
    Type: object · FileData
    • data
      Type: string
      required

      Base64 content

    • file_name
      Type: string
      required

      Original file name.

    • mime_type
      Type: string
      required

      MIME type (e.g. application/pdf).

    • size
      Type: integer

      Optional for uploads, returned in responses

  • stage_id
    Type: integer

    Pipeline stage ID. If omitted, defaults to the first stage.

Responses
  • Created application

    Type: object
    • candidate_id
      Type: integer
      required

      ID of the candidate

    • company_id
      Type: integer
      required

      ID of the company

    • created_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • id
      Type: integer
      required

      Unique identifier

    • is_disqualified
      Type: boolean
      required

      Whether the candidate is disqualified for this application

    • job_id
      Type: integer
      required

      ID of the job

    • status
      Type: stringenum
      required

      Application status. Changes via hire/reject/unreject actions.

      • active
      • hired
      • rejected
    • updated_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • ai_recommendation
      Type: string | null

      AI-generated recommendation label (e.g. Strong, Good, Weak)

    • ai_score
      Type: integer | null

      AI-generated candidate fit score (0-100)

    • ai_scoring_updated_at
      Type: integer | nullFormat: int64

      Unix timestamp (seconds) of the latest completed AI scoring result

    • candidate
      Type: object · ApplicationCandidate nullable

      Embedded candidate data (included when requested via include=candidate)

      • company_id
        Type: integer
        required

        ID of the company this candidate belongs to

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • id
        Type: integer
        required

        Unique identifier

      • profile
        Type: array object[] · ProfileAnswer[]
        required

        Candidate profile field answers

        • question_id
          Type: integer
          required

          Question ID.

        • question_text
          Type: string
          required

          Question label.

        • value
          required

          Answer value (string, array, or null).

      • updated_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • days_since_last_message
        Type: integer | null

        Number of whole days since the last message. Computed at request time. Null if no messages exist.

      • emails
        Type: array string[] | null nullable

        List of candidate email addresses

      • first_name
        Type: string | null

        Candidate's first name

      • ip
        Type: string | null

        IP address from which the candidate applied

      • last_message_at
        Type: integer | nullFormat: int64

        Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.

      • last_name
        Type: string | null

        Candidate's last name

      • origin
        Type: object · IdName nullable

        Where the candidate originally came from

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • phones
        Type: array string[] | null nullable

        List of candidate phone numbers

      • source
        Type: object · IdName nullable

        How the candidate was sourced

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

    • custom_fields
      Type: object nullable

      Custom field values as key-value pairs

      • propertyName
        Type: anything
    • cv
      nullable

      Application CV. Returns standard attachment metadata + download URL. When ?include=cv.text is requested, a text field with parsed plain-text content is added.

      • file
        Type: object · AttachmentFile
        required
        • file_ext
          Type: string
          required

          File extension.

        • file_type
          Type: string
          required

          File type category.

        • is_image
          Type: boolean nullable
          required

          Whether the file is an image.

        • orig_file_name
          Type: string
          required

          Original file name.

        • readable_size
          Type: string
          required

          Human-readable file size.

      • relative_time
        Type: string
        required

        Human-readable time since upload (e.g. "2 days ago").

      • url
        Type: stringFormat: uri nullable
        required

        Absolute download URL (e.g. https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit with Authorization: Bearer <API_KEY>.

      • uuid
        Type: stringFormat: uuid
        required

        Unique attachment identifier. Stable across API calls; use in referencing endpoints.

      • text
        Type: 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.

    • days_since_last_message
      Type: integer | null

      Number of whole days since the last message. Computed at request time. Null if no messages exist.

    • hired_at
      Type: integer | nullFormat: int64

      Unix timestamp (seconds)

    • hiring_team
      Type: array object[] | null · JobHiringTeamMember[] nullable

      Team members assigned to this application's job

      • full_name
        Type: string
        required

        User full name.

      • id
        Type: integer
        required

        User ID.

      • email
        Type: string | null

        User email.

      • role
        Type: string | null

        Role on hiring team (e.g. hiring_manager, recruiter).

    • internal_job_id
      Type: string | null

      Company's internal job identifier

    • job
      Type: object · Job nullable

      Embedded job payload (included when requested via include=job). Use job.url_backoffice to deep-link UI widgets to the job's pipeline view in the recruiter app.

      • company_id
        Type: integer
        required

        ID of the company this job belongs to

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • id
        Type: integer
        required

        Unique identifier

      • is_remote
        Type: boolean
        required

        Whether this is a remote position

      • status
        Type: string
        required

        Job status: open, closed, draft, or archived

      • title
        Type: string
        required

        Public job title shown to candidates

      • updated_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • url
        Type: string
        required

        Public URL of the job posting page

      • ai_scoring_criteria
        Type: array object[] · 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
          Type: integer
          required

          Unique identifier of the criterion.

        • position
          Type: integer
          required

          0-based ordinal of the criterion in the job's list.

        • text
          Type: string
          required

          Prompt text describing what to evaluate.

        • weight
          Type: integer
          min:  
          1
          max:  
          10
          required

          Relative importance of this criterion in the total score (1–10).

        • title
          Type: string | null

          Optional short label for the criterion.

      • alias
        Type: string | null

        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.

      • category
        Type: object · IdName nullable

        Job category (e.g. Engineering, Marketing)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • department
        Type: object · IdName nullable

        Department this job belongs to

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • description
        Type: 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.

      • education_level
        Type: object · IdName nullable

        Required education level

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • employment_type
        Type: object · IdName nullable

        Employment type (e.g. Full-time, Part-time, Contract)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • experience_level
        Type: object · IdName nullable

        Required experience level (e.g. Entry, Mid, Senior)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • hiring_team
        Type: array object[] · JobHiringTeamMember[]

        Team members assigned to this job. Embedded via include=hiring_team. Suppressed when view=summary even if the include was requested.

        • full_name
          Type: string
          required

          User full name.

        • id
          Type: integer
          required

          User ID.

        • email
          Type: string | null

          User email.

        • role
          Type: string | null

          Role on hiring team (e.g. hiring_manager, recruiter).

      • hours_per_week_max
        Type: integer | null

        Maximum hours per week

      • hours_per_week_min
        Type: integer | null

        Minimum hours per week

      • indeed_posting_data
        Type: object

        Indeed job board posting metadata. Present only when view=full (default); omitted entirely when view=summary.

        • propertyName
          Type: anything
      • internal_job_id
        Type: string | null

        Company's internal job identifier (e.g. requisition number)

      • internal_title
        Type: string | null

        Internal job title visible only to the hiring team

      • is_satellite
        Type: boolean

        Whether this job is a satellite (child) of a canonical job. Satellite jobs share the candidate pipeline of their parent.

      • location
        Type: object · JobLocation nullable

        Job location details

        • city
          Type: string

          City.

        • country
          Type: string

          Country.

        • full_address
          Type: string

          Full formatted address.

        • postal_code
          Type: string

          Postal code.

        • state
          Type: string

          State or region.

        • street_address
          Type: string

          Street address.

      • parent_job_id
        Type: integer | null

        ID of the canonical (parent) job. Null for canonical jobs. Recruiting operations should target the canonical job.

      • pipeline_stages
        Type: array object[] | null 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
          Type: integer

          Integer numbers.

        • name
          Type: string
      • resume_field_status
        Type: string | nullenum

        Whether resume upload is required, optional, or hidden on the application form

        • required
        • optional
        • hidden
      • salary_currency
        Type: string | null

        Salary currency code (e.g. USD, EUR)

      • salary_max
        Type: number | null

        Maximum salary

      • salary_min
        Type: number | null

        Minimum salary

      • salary_period
        Type: string | nullenum

        Salary period

        • annually
        • monthly
        • daily
        • hourly
      • url_backoffice
        Type: 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.

      • workflow
        Type: object · IdName nullable

        Hiring workflow (pipeline) assigned to this job. Embedded via include=workflow. Suppressed when view=summary even if the include was requested.

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • workflow_id
        Type: integer | null

        ID of the hiring workflow (pipeline) assigned to this job

    • job_alias
      Type: string | null

      Short alias of the job, usable in URLs (e.g. 79SZHfT)

    • last_message_at
      Type: integer | nullFormat: int64

      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.

    • rejected_at
      Type: integer | nullFormat: int64

      Unix timestamp (seconds)

    • rejection_reason
      Type: array object[] | null · IdName[] nullable

      Reasons for rejection. Null if not rejected.

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • stage
      Type: object · IdName nullable

      Current pipeline stage of the application

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • url_backoffice
      Type: stringFormat: 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.

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/applications
curl https://api.100hires.com/v2/applications \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "candidate_id": "",
  "job_id": 1,
  "stage_id": 1,
  "cv": {
    "data": "",
    "file_name": "",
    "mime_type": "",
    "size": 1
  }
}'
{
  "id": 501,
  "candidate_id": 42,
  "job_id": 7,
  "job_alias": "79SZHfT",
  "internal_job_id": "",
  "company_id": 1,
  "stage": {
    "id": 10,
    "name": "New"
  },
  "status": "active",
  "is_disqualified": false,
  "cv": null,
  "rejected_at": null,
  "rejection_reason": null,
  "hired_at": null,
  "hiring_team": null,
  "custom_fields": null,
  "ai_score": null,
  "ai_recommendation": null,
  "ai_scoring_updated_at": null,
  "created_at": 1711036800,
  "updated_at": 1711036800,
  "last_message_at": null,
  "days_since_last_message": null
}

Get application

Returns full application payload with stage/status/rejection context. Recommended before mutating stage transitions in external automations.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Query Parameters
  • include
    Type: string

    Comma-separated list of related resources to include. Supported: candidate — full candidate profile, cv.text — parsed plain-text CV content, job — full job payload with url_backoffice for UI deep-linking.

Responses
  • Application

    Type: object
    • candidate_id
      Type: integer
      required

      ID of the candidate

    • company_id
      Type: integer
      required

      ID of the company

    • created_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • id
      Type: integer
      required

      Unique identifier

    • is_disqualified
      Type: boolean
      required

      Whether the candidate is disqualified for this application

    • job_id
      Type: integer
      required

      ID of the job

    • status
      Type: stringenum
      required

      Application status. Changes via hire/reject/unreject actions.

      • active
      • hired
      • rejected
    • updated_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • ai_recommendation
      Type: string | null

      AI-generated recommendation label (e.g. Strong, Good, Weak)

    • ai_score
      Type: integer | null

      AI-generated candidate fit score (0-100)

    • ai_scoring_updated_at
      Type: integer | nullFormat: int64

      Unix timestamp (seconds) of the latest completed AI scoring result

    • candidate
      Type: object · ApplicationCandidate nullable

      Embedded candidate data (included when requested via include=candidate)

      • company_id
        Type: integer
        required

        ID of the company this candidate belongs to

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • id
        Type: integer
        required

        Unique identifier

      • profile
        Type: array object[] · ProfileAnswer[]
        required

        Candidate profile field answers

        • question_id
          Type: integer
          required

          Question ID.

        • question_text
          Type: string
          required

          Question label.

        • value
          required

          Answer value (string, array, or null).

      • updated_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • days_since_last_message
        Type: integer | null

        Number of whole days since the last message. Computed at request time. Null if no messages exist.

      • emails
        Type: array string[] | null nullable

        List of candidate email addresses

      • first_name
        Type: string | null

        Candidate's first name

      • ip
        Type: string | null

        IP address from which the candidate applied

      • last_message_at
        Type: integer | nullFormat: int64

        Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.

      • last_name
        Type: string | null

        Candidate's last name

      • origin
        Type: object · IdName nullable

        Where the candidate originally came from

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • phones
        Type: array string[] | null nullable

        List of candidate phone numbers

      • source
        Type: object · IdName nullable

        How the candidate was sourced

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

    • custom_fields
      Type: object nullable

      Custom field values as key-value pairs

      • propertyName
        Type: anything
    • cv
      nullable

      Application CV. Returns standard attachment metadata + download URL. When ?include=cv.text is requested, a text field with parsed plain-text content is added.

      • file
        Type: object · AttachmentFile
        required
        • file_ext
          Type: string
          required

          File extension.

        • file_type
          Type: string
          required

          File type category.

        • is_image
          Type: boolean nullable
          required

          Whether the file is an image.

        • orig_file_name
          Type: string
          required

          Original file name.

        • readable_size
          Type: string
          required

          Human-readable file size.

      • relative_time
        Type: string
        required

        Human-readable time since upload (e.g. "2 days ago").

      • url
        Type: stringFormat: uri nullable
        required

        Absolute download URL (e.g. https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit with Authorization: Bearer <API_KEY>.

      • uuid
        Type: stringFormat: uuid
        required

        Unique attachment identifier. Stable across API calls; use in referencing endpoints.

      • text
        Type: 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.

    • days_since_last_message
      Type: integer | null

      Number of whole days since the last message. Computed at request time. Null if no messages exist.

    • hired_at
      Type: integer | nullFormat: int64

      Unix timestamp (seconds)

    • hiring_team
      Type: array object[] | null · JobHiringTeamMember[] nullable

      Team members assigned to this application's job

      • full_name
        Type: string
        required

        User full name.

      • id
        Type: integer
        required

        User ID.

      • email
        Type: string | null

        User email.

      • role
        Type: string | null

        Role on hiring team (e.g. hiring_manager, recruiter).

    • internal_job_id
      Type: string | null

      Company's internal job identifier

    • job
      Type: object · Job nullable

      Embedded job payload (included when requested via include=job). Use job.url_backoffice to deep-link UI widgets to the job's pipeline view in the recruiter app.

      • company_id
        Type: integer
        required

        ID of the company this job belongs to

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • id
        Type: integer
        required

        Unique identifier

      • is_remote
        Type: boolean
        required

        Whether this is a remote position

      • status
        Type: string
        required

        Job status: open, closed, draft, or archived

      • title
        Type: string
        required

        Public job title shown to candidates

      • updated_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • url
        Type: string
        required

        Public URL of the job posting page

      • ai_scoring_criteria
        Type: array object[] · 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
          Type: integer
          required

          Unique identifier of the criterion.

        • position
          Type: integer
          required

          0-based ordinal of the criterion in the job's list.

        • text
          Type: string
          required

          Prompt text describing what to evaluate.

        • weight
          Type: integer
          min:  
          1
          max:  
          10
          required

          Relative importance of this criterion in the total score (1–10).

        • title
          Type: string | null

          Optional short label for the criterion.

      • alias
        Type: string | null

        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.

      • category
        Type: object · IdName nullable

        Job category (e.g. Engineering, Marketing)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • department
        Type: object · IdName nullable

        Department this job belongs to

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • description
        Type: 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.

      • education_level
        Type: object · IdName nullable

        Required education level

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • employment_type
        Type: object · IdName nullable

        Employment type (e.g. Full-time, Part-time, Contract)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • experience_level
        Type: object · IdName nullable

        Required experience level (e.g. Entry, Mid, Senior)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • hiring_team
        Type: array object[] · JobHiringTeamMember[]

        Team members assigned to this job. Embedded via include=hiring_team. Suppressed when view=summary even if the include was requested.

        • full_name
          Type: string
          required

          User full name.

        • id
          Type: integer
          required

          User ID.

        • email
          Type: string | null

          User email.

        • role
          Type: string | null

          Role on hiring team (e.g. hiring_manager, recruiter).

      • hours_per_week_max
        Type: integer | null

        Maximum hours per week

      • hours_per_week_min
        Type: integer | null

        Minimum hours per week

      • indeed_posting_data
        Type: object

        Indeed job board posting metadata. Present only when view=full (default); omitted entirely when view=summary.

        • propertyName
          Type: anything
      • internal_job_id
        Type: string | null

        Company's internal job identifier (e.g. requisition number)

      • internal_title
        Type: string | null

        Internal job title visible only to the hiring team

      • is_satellite
        Type: boolean

        Whether this job is a satellite (child) of a canonical job. Satellite jobs share the candidate pipeline of their parent.

      • location
        Type: object · JobLocation nullable

        Job location details

        • city
          Type: string

          City.

        • country
          Type: string

          Country.

        • full_address
          Type: string

          Full formatted address.

        • postal_code
          Type: string

          Postal code.

        • state
          Type: string

          State or region.

        • street_address
          Type: string

          Street address.

      • parent_job_id
        Type: integer | null

        ID of the canonical (parent) job. Null for canonical jobs. Recruiting operations should target the canonical job.

      • pipeline_stages
        Type: array object[] | null 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
          Type: integer

          Integer numbers.

        • name
          Type: string
      • resume_field_status
        Type: string | nullenum

        Whether resume upload is required, optional, or hidden on the application form

        • required
        • optional
        • hidden
      • salary_currency
        Type: string | null

        Salary currency code (e.g. USD, EUR)

      • salary_max
        Type: number | null

        Maximum salary

      • salary_min
        Type: number | null

        Minimum salary

      • salary_period
        Type: string | nullenum

        Salary period

        • annually
        • monthly
        • daily
        • hourly
      • url_backoffice
        Type: 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.

      • workflow
        Type: object · IdName nullable

        Hiring workflow (pipeline) assigned to this job. Embedded via include=workflow. Suppressed when view=summary even if the include was requested.

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • workflow_id
        Type: integer | null

        ID of the hiring workflow (pipeline) assigned to this job

    • job_alias
      Type: string | null

      Short alias of the job, usable in URLs (e.g. 79SZHfT)

    • last_message_at
      Type: integer | nullFormat: int64

      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.

    • rejected_at
      Type: integer | nullFormat: int64

      Unix timestamp (seconds)

    • rejection_reason
      Type: array object[] | null · IdName[] nullable

      Reasons for rejection. Null if not rejected.

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • stage
      Type: object · IdName nullable

      Current pipeline stage of the application

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • url_backoffice
      Type: stringFormat: 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.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/applications/{id}
curl https://api.100hires.com/v2/applications/1 \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "id": 501,
  "candidate_id": 42,
  "job_id": 7,
  "job_alias": "79SZHfT",
  "internal_job_id": "",
  "company_id": 1,
  "stage": {
    "id": 12,
    "name": "Phone screen"
  },
  "status": "active",
  "is_disqualified": false,
  "cv": null,
  "rejected_at": null,
  "rejection_reason": null,
  "hired_at": null,
  "hiring_team": [
    {
      "id": 5,
      "full_name": "Jane Smith",
      "email": "jane@example.com",
      "role": "recruiter"
    }
  ],
  "custom_fields": null,
  "ai_score": 72,
  "ai_recommendation": "Probably Yes",
  "ai_scoring_updated_at": 1711036800,
  "created_at": 1711036800,
  "updated_at": 1711123200,
  "last_message_at": null,
  "days_since_last_message": null
}

Update application

Updates application-level fields such as stage, disqualification flag, and CV. Supports external pipeline management and data correction flows.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Query Parameters
  • include
    Type: string

    Comma-separated list of related resources to include. Supported: candidate — full candidate profile, cv.text — parsed plain-text CV content, job — full job payload with url_backoffice for UI deep-linking.

Body
required
application/json
  • cv
    Type: object · FileData
    • data
      Type: string
      required

      Base64 content

    • file_name
      Type: string
      required

      Original file name.

    • mime_type
      Type: string
      required

      MIME type (e.g. application/pdf).

    • size
      Type: integer

      Optional for uploads, returned in responses

  • is_disqualified
    Type: boolean

    Set to true to disqualify the candidate on this application.

  • stage_id
    Type: integer

    Move application to this pipeline stage.

Responses
  • Updated application

    Type: object
    • candidate_id
      Type: integer
      required

      ID of the candidate

    • company_id
      Type: integer
      required

      ID of the company

    • created_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • id
      Type: integer
      required

      Unique identifier

    • is_disqualified
      Type: boolean
      required

      Whether the candidate is disqualified for this application

    • job_id
      Type: integer
      required

      ID of the job

    • status
      Type: stringenum
      required

      Application status. Changes via hire/reject/unreject actions.

      • active
      • hired
      • rejected
    • updated_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • ai_recommendation
      Type: string | null

      AI-generated recommendation label (e.g. Strong, Good, Weak)

    • ai_score
      Type: integer | null

      AI-generated candidate fit score (0-100)

    • ai_scoring_updated_at
      Type: integer | nullFormat: int64

      Unix timestamp (seconds) of the latest completed AI scoring result

    • candidate
      Type: object · ApplicationCandidate nullable

      Embedded candidate data (included when requested via include=candidate)

      • company_id
        Type: integer
        required

        ID of the company this candidate belongs to

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • id
        Type: integer
        required

        Unique identifier

      • profile
        Type: array object[] · ProfileAnswer[]
        required

        Candidate profile field answers

        • question_id
          Type: integer
          required

          Question ID.

        • question_text
          Type: string
          required

          Question label.

        • value
          required

          Answer value (string, array, or null).

      • updated_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • days_since_last_message
        Type: integer | null

        Number of whole days since the last message. Computed at request time. Null if no messages exist.

      • emails
        Type: array string[] | null nullable

        List of candidate email addresses

      • first_name
        Type: string | null

        Candidate's first name

      • ip
        Type: string | null

        IP address from which the candidate applied

      • last_message_at
        Type: integer | nullFormat: int64

        Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.

      • last_name
        Type: string | null

        Candidate's last name

      • origin
        Type: object · IdName nullable

        Where the candidate originally came from

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • phones
        Type: array string[] | null nullable

        List of candidate phone numbers

      • source
        Type: object · IdName nullable

        How the candidate was sourced

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

    • custom_fields
      Type: object nullable

      Custom field values as key-value pairs

      • propertyName
        Type: anything
    • cv
      nullable

      Application CV. Returns standard attachment metadata + download URL. When ?include=cv.text is requested, a text field with parsed plain-text content is added.

      • file
        Type: object · AttachmentFile
        required
        • file_ext
          Type: string
          required

          File extension.

        • file_type
          Type: string
          required

          File type category.

        • is_image
          Type: boolean nullable
          required

          Whether the file is an image.

        • orig_file_name
          Type: string
          required

          Original file name.

        • readable_size
          Type: string
          required

          Human-readable file size.

      • relative_time
        Type: string
        required

        Human-readable time since upload (e.g. "2 days ago").

      • url
        Type: stringFormat: uri nullable
        required

        Absolute download URL (e.g. https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit with Authorization: Bearer <API_KEY>.

      • uuid
        Type: stringFormat: uuid
        required

        Unique attachment identifier. Stable across API calls; use in referencing endpoints.

      • text
        Type: 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.

    • days_since_last_message
      Type: integer | null

      Number of whole days since the last message. Computed at request time. Null if no messages exist.

    • hired_at
      Type: integer | nullFormat: int64

      Unix timestamp (seconds)

    • hiring_team
      Type: array object[] | null · JobHiringTeamMember[] nullable

      Team members assigned to this application's job

      • full_name
        Type: string
        required

        User full name.

      • id
        Type: integer
        required

        User ID.

      • email
        Type: string | null

        User email.

      • role
        Type: string | null

        Role on hiring team (e.g. hiring_manager, recruiter).

    • internal_job_id
      Type: string | null

      Company's internal job identifier

    • job
      Type: object · Job nullable

      Embedded job payload (included when requested via include=job). Use job.url_backoffice to deep-link UI widgets to the job's pipeline view in the recruiter app.

      • company_id
        Type: integer
        required

        ID of the company this job belongs to

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • id
        Type: integer
        required

        Unique identifier

      • is_remote
        Type: boolean
        required

        Whether this is a remote position

      • status
        Type: string
        required

        Job status: open, closed, draft, or archived

      • title
        Type: string
        required

        Public job title shown to candidates

      • updated_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • url
        Type: string
        required

        Public URL of the job posting page

      • ai_scoring_criteria
        Type: array object[] · 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
          Type: integer
          required

          Unique identifier of the criterion.

        • position
          Type: integer
          required

          0-based ordinal of the criterion in the job's list.

        • text
          Type: string
          required

          Prompt text describing what to evaluate.

        • weight
          Type: integer
          min:  
          1
          max:  
          10
          required

          Relative importance of this criterion in the total score (1–10).

        • title
          Type: string | null

          Optional short label for the criterion.

      • alias
        Type: string | null

        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.

      • category
        Type: object · IdName nullable

        Job category (e.g. Engineering, Marketing)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • department
        Type: object · IdName nullable

        Department this job belongs to

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • description
        Type: 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.

      • education_level
        Type: object · IdName nullable

        Required education level

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • employment_type
        Type: object · IdName nullable

        Employment type (e.g. Full-time, Part-time, Contract)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • experience_level
        Type: object · IdName nullable

        Required experience level (e.g. Entry, Mid, Senior)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • hiring_team
        Type: array object[] · JobHiringTeamMember[]

        Team members assigned to this job. Embedded via include=hiring_team. Suppressed when view=summary even if the include was requested.

        • full_name
          Type: string
          required

          User full name.

        • id
          Type: integer
          required

          User ID.

        • email
          Type: string | null

          User email.

        • role
          Type: string | null

          Role on hiring team (e.g. hiring_manager, recruiter).

      • hours_per_week_max
        Type: integer | null

        Maximum hours per week

      • hours_per_week_min
        Type: integer | null

        Minimum hours per week

      • indeed_posting_data
        Type: object

        Indeed job board posting metadata. Present only when view=full (default); omitted entirely when view=summary.

        • propertyName
          Type: anything
      • internal_job_id
        Type: string | null

        Company's internal job identifier (e.g. requisition number)

      • internal_title
        Type: string | null

        Internal job title visible only to the hiring team

      • is_satellite
        Type: boolean

        Whether this job is a satellite (child) of a canonical job. Satellite jobs share the candidate pipeline of their parent.

      • location
        Type: object · JobLocation nullable

        Job location details

        • city
          Type: string

          City.

        • country
          Type: string

          Country.

        • full_address
          Type: string

          Full formatted address.

        • postal_code
          Type: string

          Postal code.

        • state
          Type: string

          State or region.

        • street_address
          Type: string

          Street address.

      • parent_job_id
        Type: integer | null

        ID of the canonical (parent) job. Null for canonical jobs. Recruiting operations should target the canonical job.

      • pipeline_stages
        Type: array object[] | null 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
          Type: integer

          Integer numbers.

        • name
          Type: string
      • resume_field_status
        Type: string | nullenum

        Whether resume upload is required, optional, or hidden on the application form

        • required
        • optional
        • hidden
      • salary_currency
        Type: string | null

        Salary currency code (e.g. USD, EUR)

      • salary_max
        Type: number | null

        Maximum salary

      • salary_min
        Type: number | null

        Minimum salary

      • salary_period
        Type: string | nullenum

        Salary period

        • annually
        • monthly
        • daily
        • hourly
      • url_backoffice
        Type: 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.

      • workflow
        Type: object · IdName nullable

        Hiring workflow (pipeline) assigned to this job. Embedded via include=workflow. Suppressed when view=summary even if the include was requested.

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • workflow_id
        Type: integer | null

        ID of the hiring workflow (pipeline) assigned to this job

    • job_alias
      Type: string | null

      Short alias of the job, usable in URLs (e.g. 79SZHfT)

    • last_message_at
      Type: integer | nullFormat: int64

      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.

    • rejected_at
      Type: integer | nullFormat: int64

      Unix timestamp (seconds)

    • rejection_reason
      Type: array object[] | null · IdName[] nullable

      Reasons for rejection. Null if not rejected.

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • stage
      Type: object · IdName nullable

      Current pipeline stage of the application

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • url_backoffice
      Type: stringFormat: 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.

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for put/applications/{id}
curl https://api.100hires.com/v2/applications/1 \
  --request PUT \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "stage_id": 1,
  "is_disqualified": true,
  "cv": {
    "data": "",
    "file_name": "",
    "mime_type": "",
    "size": 1
  }
}'
{
  "id": 501,
  "candidate_id": 42,
  "job_id": 7,
  "job_alias": "79SZHfT",
  "internal_job_id": "",
  "company_id": 1,
  "stage": {
    "id": 14,
    "name": "Offer"
  },
  "status": "active",
  "is_disqualified": false,
  "cv": null,
  "rejected_at": null,
  "rejection_reason": null,
  "hired_at": null,
  "hiring_team": null,
  "custom_fields": null,
  "ai_score": 72,
  "ai_recommendation": "Probably Yes",
  "ai_scoring_updated_at": 1711036800,
  "created_at": 1711036800,
  "updated_at": 1711209600,
  "last_message_at": null,
  "days_since_last_message": null
}

Delete application

Deletes an application and removes it from default list/view queries.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Responses
  • Application deleted

    Type: object
    • success
      Type: boolean
      required

      Always true on success.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for delete/applications/{id}
curl https://api.100hires.com/v2/applications/1 \
  --request DELETE \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "success": true
}

Get application AI score

Returns the latest machine-readable AI score for an application. This is separate from candidate timeline copilot_response events and returns the same structured payload shape as ManageEvaluation::toArrayApplicationScore.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Responses
  • Structured AI score payload for the latest application scoring result

    Type: object
    • score
      Type: object · ApplicationAiScorePayload nullable
      required
      • criteria
        Type: array object[] · ApplicationAiScoreCriterion[]
        required

        Array of scoring criteria with scores.

        • criterion_text
          Type: string
          required

          Full criterion description.

        • justification
          Type: string | null
          required

          AI explanation for the score.

        • score
          Type: integer
          required

          Score for this criterion (0-100).

        • criterion_title
          Type: string | null

          Short criterion title.

        • followup_questions
          Type: array string[] | null nullable
      • date
        Type: string | null
        required

        Scoring date.

      • job_id
        Type: integer
        required

        Job ID.

      • job_title
        Type: string | null
        required

        Job title.

      • job_url
        Type: string | null
        required

        Job URL.

      • rate
        Type: integer
        required

        Overall recommendation (e.g. strong_yes, yes, no).

      • summary
        Type: string | null
        required

        AI-generated summary.

      • total_score
        Type: integer | null
        required

        Total score (0-100).

      • uuid
        Type: string | null
        required

        Unique scoring session ID.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/applications/{id}/ai-score
curl https://api.100hires.com/v2/applications/1/ai-score \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "score": {
    "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "job_id": 7,
    "job_title": "Senior Backend Developer",
    "job_url": "https://app.100hires.com/jobs/7",
    "summary": "Strong backend experience with relevant tech stack. Could improve on system design depth.",
    "total_score": 72,
    "criteria": [
      {
        "criterion_title": "Technical Skills",
        "criterion_text": "Proficiency in required programming languages and frameworks",
        "score": 80,
        "justification": "Demonstrated strong PHP and Python skills with 5+ years of experience.",
        "followup_questions": [
          "Can you describe your experience with distributed systems?"
        ]
      },
      {
        "criterion_title": "Experience",
        "criterion_text": "Relevant industry and role experience",
        "score": 65,
        "justification": "Has backend experience but limited exposure to high-scale systems.",
        "followup_questions": null
      }
    ],
    "rate": 72,
    "date": "2024-03-22"
  }
}

Get application stage history

Returns the ordered list of stage transitions for one application — including the initial stage assignment (where from_stage_id is null) — in a single response.

Use this instead of paginating through /candidates/{id}/activities when you only need stage-transition data (funnel analysis, time-in-stage reports).

moved_by_type is one of:

  • user — manual move by an authenticated user (moved_by_user_id is set)
  • automation — move driven by an automation rule / form watcher
  • system — initial assignment or other non-user, non-automation source
Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Responses
  • Full chronological stage transition history for an application, including the initial assignment.

    Type: object
    • history
      Type: array object[] · ApplicationStageHistoryEntry[]
      required

      Chronological list of stage transitions (oldest first), including the initial assignment.

      • from_stage_id
        Type: integer nullable
        required

        Previous stage id. null for the initial assignment.

      • from_stage_name
        Type: string nullable
        required

        Previous stage name. null for the initial assignment.

      • moved_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds) of the transition.

      • moved_by_type
        Type: stringenum
        required

        Who/what initiated the move. user = manual move, automation = automation rule/form watcher, system = initial assignment or unattributed.

        • user
        • automation
        • system
      • moved_by_user_id
        Type: integer nullable
        required

        ID of the user that performed the move. Populated only when moved_by_type = user.

      • source
        Type: string nullable
        required

        What caused the transition. Format: <assign_type> or <assign_type>:<board_name>. Examples: apply:indeed, form_watcher, user, api_v2. null for historical records created before source tracking was added.

      • to_stage_id
        Type: integer
        required

        Stage id the application was moved to.

      • to_stage_name
        Type: string nullable
        required

        Stage name the application was moved to. null if the stage has been hard-deleted.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/applications/{id}/stage-history
curl https://api.100hires.com/v2/applications/1/stage-history \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "history": [
    {
      "from_stage_id": null,
      "from_stage_name": null,
      "to_stage_id": 15941,
      "to_stage_name": "Applied",
      "moved_at": 1731713700,
      "moved_by_type": "system",
      "moved_by_user_id": null
    },
    {
      "from_stage_id": 15941,
      "from_stage_name": "Applied",
      "to_stage_id": 16827,
      "to_stage_name": "Send screening email",
      "moved_at": 1731713760,
      "moved_by_type": "automation",
      "moved_by_user_id": null
    },
    {
      "from_stage_id": 16827,
      "from_stage_name": "Send screening email",
      "to_stage_id": 16828,
      "to_stage_name": "Technical interview",
      "moved_at": 1731800100,
      "moved_by_type": "user",
      "moved_by_user_id": 42
    }
  ]
}

Move application to stage

Moves an application to a specific pipeline stage. This is the explicit stage transition endpoint for workflow orchestration.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Query Parameters
  • include
    Type: string

    Comma-separated list of related resources to include. Supported: candidate — full candidate profile, cv.text — parsed plain-text CV content, job — full job payload with url_backoffice for UI deep-linking.

Body
required
application/json
  • stage_id
    Type: integer
    required

    Target pipeline stage ID.

Responses
  • Updated application

    Type: object
    • candidate_id
      Type: integer
      required

      ID of the candidate

    • company_id
      Type: integer
      required

      ID of the company

    • created_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • id
      Type: integer
      required

      Unique identifier

    • is_disqualified
      Type: boolean
      required

      Whether the candidate is disqualified for this application

    • job_id
      Type: integer
      required

      ID of the job

    • status
      Type: stringenum
      required

      Application status. Changes via hire/reject/unreject actions.

      • active
      • hired
      • rejected
    • updated_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • ai_recommendation
      Type: string | null

      AI-generated recommendation label (e.g. Strong, Good, Weak)

    • ai_score
      Type: integer | null

      AI-generated candidate fit score (0-100)

    • ai_scoring_updated_at
      Type: integer | nullFormat: int64

      Unix timestamp (seconds) of the latest completed AI scoring result

    • candidate
      Type: object · ApplicationCandidate nullable

      Embedded candidate data (included when requested via include=candidate)

      • company_id
        Type: integer
        required

        ID of the company this candidate belongs to

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • id
        Type: integer
        required

        Unique identifier

      • profile
        Type: array object[] · ProfileAnswer[]
        required

        Candidate profile field answers

        • question_id
          Type: integer
          required

          Question ID.

        • question_text
          Type: string
          required

          Question label.

        • value
          required

          Answer value (string, array, or null).

      • updated_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • days_since_last_message
        Type: integer | null

        Number of whole days since the last message. Computed at request time. Null if no messages exist.

      • emails
        Type: array string[] | null nullable

        List of candidate email addresses

      • first_name
        Type: string | null

        Candidate's first name

      • ip
        Type: string | null

        IP address from which the candidate applied

      • last_message_at
        Type: integer | nullFormat: int64

        Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.

      • last_name
        Type: string | null

        Candidate's last name

      • origin
        Type: object · IdName nullable

        Where the candidate originally came from

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • phones
        Type: array string[] | null nullable

        List of candidate phone numbers

      • source
        Type: object · IdName nullable

        How the candidate was sourced

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

    • custom_fields
      Type: object nullable

      Custom field values as key-value pairs

      • propertyName
        Type: anything
    • cv
      nullable

      Application CV. Returns standard attachment metadata + download URL. When ?include=cv.text is requested, a text field with parsed plain-text content is added.

      • file
        Type: object · AttachmentFile
        required
        • file_ext
          Type: string
          required

          File extension.

        • file_type
          Type: string
          required

          File type category.

        • is_image
          Type: boolean nullable
          required

          Whether the file is an image.

        • orig_file_name
          Type: string
          required

          Original file name.

        • readable_size
          Type: string
          required

          Human-readable file size.

      • relative_time
        Type: string
        required

        Human-readable time since upload (e.g. "2 days ago").

      • url
        Type: stringFormat: uri nullable
        required

        Absolute download URL (e.g. https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit with Authorization: Bearer <API_KEY>.

      • uuid
        Type: stringFormat: uuid
        required

        Unique attachment identifier. Stable across API calls; use in referencing endpoints.

      • text
        Type: 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.

    • days_since_last_message
      Type: integer | null

      Number of whole days since the last message. Computed at request time. Null if no messages exist.

    • hired_at
      Type: integer | nullFormat: int64

      Unix timestamp (seconds)

    • hiring_team
      Type: array object[] | null · JobHiringTeamMember[] nullable

      Team members assigned to this application's job

      • full_name
        Type: string
        required

        User full name.

      • id
        Type: integer
        required

        User ID.

      • email
        Type: string | null

        User email.

      • role
        Type: string | null

        Role on hiring team (e.g. hiring_manager, recruiter).

    • internal_job_id
      Type: string | null

      Company's internal job identifier

    • job
      Type: object · Job nullable

      Embedded job payload (included when requested via include=job). Use job.url_backoffice to deep-link UI widgets to the job's pipeline view in the recruiter app.

      • company_id
        Type: integer
        required

        ID of the company this job belongs to

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • id
        Type: integer
        required

        Unique identifier

      • is_remote
        Type: boolean
        required

        Whether this is a remote position

      • status
        Type: string
        required

        Job status: open, closed, draft, or archived

      • title
        Type: string
        required

        Public job title shown to candidates

      • updated_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • url
        Type: string
        required

        Public URL of the job posting page

      • ai_scoring_criteria
        Type: array object[] · 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
          Type: integer
          required

          Unique identifier of the criterion.

        • position
          Type: integer
          required

          0-based ordinal of the criterion in the job's list.

        • text
          Type: string
          required

          Prompt text describing what to evaluate.

        • weight
          Type: integer
          min:  
          1
          max:  
          10
          required

          Relative importance of this criterion in the total score (1–10).

        • title
          Type: string | null

          Optional short label for the criterion.

      • alias
        Type: string | null

        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.

      • category
        Type: object · IdName nullable

        Job category (e.g. Engineering, Marketing)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • department
        Type: object · IdName nullable

        Department this job belongs to

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • description
        Type: 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.

      • education_level
        Type: object · IdName nullable

        Required education level

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • employment_type
        Type: object · IdName nullable

        Employment type (e.g. Full-time, Part-time, Contract)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • experience_level
        Type: object · IdName nullable

        Required experience level (e.g. Entry, Mid, Senior)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • hiring_team
        Type: array object[] · JobHiringTeamMember[]

        Team members assigned to this job. Embedded via include=hiring_team. Suppressed when view=summary even if the include was requested.

        • full_name
          Type: string
          required

          User full name.

        • id
          Type: integer
          required

          User ID.

        • email
          Type: string | null

          User email.

        • role
          Type: string | null

          Role on hiring team (e.g. hiring_manager, recruiter).

      • hours_per_week_max
        Type: integer | null

        Maximum hours per week

      • hours_per_week_min
        Type: integer | null

        Minimum hours per week

      • indeed_posting_data
        Type: object

        Indeed job board posting metadata. Present only when view=full (default); omitted entirely when view=summary.

        • propertyName
          Type: anything
      • internal_job_id
        Type: string | null

        Company's internal job identifier (e.g. requisition number)

      • internal_title
        Type: string | null

        Internal job title visible only to the hiring team

      • is_satellite
        Type: boolean

        Whether this job is a satellite (child) of a canonical job. Satellite jobs share the candidate pipeline of their parent.

      • location
        Type: object · JobLocation nullable

        Job location details

        • city
          Type: string

          City.

        • country
          Type: string

          Country.

        • full_address
          Type: string

          Full formatted address.

        • postal_code
          Type: string

          Postal code.

        • state
          Type: string

          State or region.

        • street_address
          Type: string

          Street address.

      • parent_job_id
        Type: integer | null

        ID of the canonical (parent) job. Null for canonical jobs. Recruiting operations should target the canonical job.

      • pipeline_stages
        Type: array object[] | null 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
          Type: integer

          Integer numbers.

        • name
          Type: string
      • resume_field_status
        Type: string | nullenum

        Whether resume upload is required, optional, or hidden on the application form

        • required
        • optional
        • hidden
      • salary_currency
        Type: string | null

        Salary currency code (e.g. USD, EUR)

      • salary_max
        Type: number | null

        Maximum salary

      • salary_min
        Type: number | null

        Minimum salary

      • salary_period
        Type: string | nullenum

        Salary period

        • annually
        • monthly
        • daily
        • hourly
      • url_backoffice
        Type: 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.

      • workflow
        Type: object · IdName nullable

        Hiring workflow (pipeline) assigned to this job. Embedded via include=workflow. Suppressed when view=summary even if the include was requested.

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • workflow_id
        Type: integer | null

        ID of the hiring workflow (pipeline) assigned to this job

    • job_alias
      Type: string | null

      Short alias of the job, usable in URLs (e.g. 79SZHfT)

    • last_message_at
      Type: integer | nullFormat: int64

      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.

    • rejected_at
      Type: integer | nullFormat: int64

      Unix timestamp (seconds)

    • rejection_reason
      Type: array object[] | null · IdName[] nullable

      Reasons for rejection. Null if not rejected.

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • stage
      Type: object · IdName nullable

      Current pipeline stage of the application

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • url_backoffice
      Type: stringFormat: 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.

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/applications/{id}/move
curl https://api.100hires.com/v2/applications/1/move \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "stage_id": 456
}'
{
  "id": 501,
  "candidate_id": 42,
  "job_id": 7,
  "job_alias": "79SZHfT",
  "internal_job_id": "",
  "company_id": 1,
  "stage": {
    "id": 456,
    "name": "Technical interview"
  },
  "status": "active",
  "is_disqualified": false,
  "cv": null,
  "rejected_at": null,
  "rejection_reason": null,
  "hired_at": null,
  "hiring_team": null,
  "custom_fields": null,
  "ai_score": 72,
  "ai_recommendation": "Probably Yes",
  "ai_scoring_updated_at": 1711036800,
  "created_at": 1711036800,
  "updated_at": 1711209600,
  "last_message_at": null,
  "days_since_last_message": null
}

Mark application as hired

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

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Query Parameters
  • include
    Type: string

    Comma-separated list of related resources to include. Supported: candidate — full candidate profile, cv.text — parsed plain-text CV content, job — full job payload with url_backoffice for UI deep-linking.

Responses
  • Updated application

    Type: object
    • candidate_id
      Type: integer
      required

      ID of the candidate

    • company_id
      Type: integer
      required

      ID of the company

    • created_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • id
      Type: integer
      required

      Unique identifier

    • is_disqualified
      Type: boolean
      required

      Whether the candidate is disqualified for this application

    • job_id
      Type: integer
      required

      ID of the job

    • status
      Type: stringenum
      required

      Application status. Changes via hire/reject/unreject actions.

      • active
      • hired
      • rejected
    • updated_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • ai_recommendation
      Type: string | null

      AI-generated recommendation label (e.g. Strong, Good, Weak)

    • ai_score
      Type: integer | null

      AI-generated candidate fit score (0-100)

    • ai_scoring_updated_at
      Type: integer | nullFormat: int64

      Unix timestamp (seconds) of the latest completed AI scoring result

    • candidate
      Type: object · ApplicationCandidate nullable

      Embedded candidate data (included when requested via include=candidate)

      • company_id
        Type: integer
        required

        ID of the company this candidate belongs to

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • id
        Type: integer
        required

        Unique identifier

      • profile
        Type: array object[] · ProfileAnswer[]
        required

        Candidate profile field answers

        • question_id
          Type: integer
          required

          Question ID.

        • question_text
          Type: string
          required

          Question label.

        • value
          required

          Answer value (string, array, or null).

      • updated_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • days_since_last_message
        Type: integer | null

        Number of whole days since the last message. Computed at request time. Null if no messages exist.

      • emails
        Type: array string[] | null nullable

        List of candidate email addresses

      • first_name
        Type: string | null

        Candidate's first name

      • ip
        Type: string | null

        IP address from which the candidate applied

      • last_message_at
        Type: integer | nullFormat: int64

        Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.

      • last_name
        Type: string | null

        Candidate's last name

      • origin
        Type: object · IdName nullable

        Where the candidate originally came from

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • phones
        Type: array string[] | null nullable

        List of candidate phone numbers

      • source
        Type: object · IdName nullable

        How the candidate was sourced

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

    • custom_fields
      Type: object nullable

      Custom field values as key-value pairs

      • propertyName
        Type: anything
    • cv
      nullable

      Application CV. Returns standard attachment metadata + download URL. When ?include=cv.text is requested, a text field with parsed plain-text content is added.

      • file
        Type: object · AttachmentFile
        required
        • file_ext
          Type: string
          required

          File extension.

        • file_type
          Type: string
          required

          File type category.

        • is_image
          Type: boolean nullable
          required

          Whether the file is an image.

        • orig_file_name
          Type: string
          required

          Original file name.

        • readable_size
          Type: string
          required

          Human-readable file size.

      • relative_time
        Type: string
        required

        Human-readable time since upload (e.g. "2 days ago").

      • url
        Type: stringFormat: uri nullable
        required

        Absolute download URL (e.g. https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit with Authorization: Bearer <API_KEY>.

      • uuid
        Type: stringFormat: uuid
        required

        Unique attachment identifier. Stable across API calls; use in referencing endpoints.

      • text
        Type: 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.

    • days_since_last_message
      Type: integer | null

      Number of whole days since the last message. Computed at request time. Null if no messages exist.

    • hired_at
      Type: integer | nullFormat: int64

      Unix timestamp (seconds)

    • hiring_team
      Type: array object[] | null · JobHiringTeamMember[] nullable

      Team members assigned to this application's job

      • full_name
        Type: string
        required

        User full name.

      • id
        Type: integer
        required

        User ID.

      • email
        Type: string | null

        User email.

      • role
        Type: string | null

        Role on hiring team (e.g. hiring_manager, recruiter).

    • internal_job_id
      Type: string | null

      Company's internal job identifier

    • job
      Type: object · Job nullable

      Embedded job payload (included when requested via include=job). Use job.url_backoffice to deep-link UI widgets to the job's pipeline view in the recruiter app.

      • company_id
        Type: integer
        required

        ID of the company this job belongs to

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • id
        Type: integer
        required

        Unique identifier

      • is_remote
        Type: boolean
        required

        Whether this is a remote position

      • status
        Type: string
        required

        Job status: open, closed, draft, or archived

      • title
        Type: string
        required

        Public job title shown to candidates

      • updated_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • url
        Type: string
        required

        Public URL of the job posting page

      • ai_scoring_criteria
        Type: array object[] · 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
          Type: integer
          required

          Unique identifier of the criterion.

        • position
          Type: integer
          required

          0-based ordinal of the criterion in the job's list.

        • text
          Type: string
          required

          Prompt text describing what to evaluate.

        • weight
          Type: integer
          min:  
          1
          max:  
          10
          required

          Relative importance of this criterion in the total score (1–10).

        • title
          Type: string | null

          Optional short label for the criterion.

      • alias
        Type: string | null

        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.

      • category
        Type: object · IdName nullable

        Job category (e.g. Engineering, Marketing)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • department
        Type: object · IdName nullable

        Department this job belongs to

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • description
        Type: 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.

      • education_level
        Type: object · IdName nullable

        Required education level

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • employment_type
        Type: object · IdName nullable

        Employment type (e.g. Full-time, Part-time, Contract)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • experience_level
        Type: object · IdName nullable

        Required experience level (e.g. Entry, Mid, Senior)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • hiring_team
        Type: array object[] · JobHiringTeamMember[]

        Team members assigned to this job. Embedded via include=hiring_team. Suppressed when view=summary even if the include was requested.

        • full_name
          Type: string
          required

          User full name.

        • id
          Type: integer
          required

          User ID.

        • email
          Type: string | null

          User email.

        • role
          Type: string | null

          Role on hiring team (e.g. hiring_manager, recruiter).

      • hours_per_week_max
        Type: integer | null

        Maximum hours per week

      • hours_per_week_min
        Type: integer | null

        Minimum hours per week

      • indeed_posting_data
        Type: object

        Indeed job board posting metadata. Present only when view=full (default); omitted entirely when view=summary.

        • propertyName
          Type: anything
      • internal_job_id
        Type: string | null

        Company's internal job identifier (e.g. requisition number)

      • internal_title
        Type: string | null

        Internal job title visible only to the hiring team

      • is_satellite
        Type: boolean

        Whether this job is a satellite (child) of a canonical job. Satellite jobs share the candidate pipeline of their parent.

      • location
        Type: object · JobLocation nullable

        Job location details

        • city
          Type: string

          City.

        • country
          Type: string

          Country.

        • full_address
          Type: string

          Full formatted address.

        • postal_code
          Type: string

          Postal code.

        • state
          Type: string

          State or region.

        • street_address
          Type: string

          Street address.

      • parent_job_id
        Type: integer | null

        ID of the canonical (parent) job. Null for canonical jobs. Recruiting operations should target the canonical job.

      • pipeline_stages
        Type: array object[] | null 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
          Type: integer

          Integer numbers.

        • name
          Type: string
      • resume_field_status
        Type: string | nullenum

        Whether resume upload is required, optional, or hidden on the application form

        • required
        • optional
        • hidden
      • salary_currency
        Type: string | null

        Salary currency code (e.g. USD, EUR)

      • salary_max
        Type: number | null

        Maximum salary

      • salary_min
        Type: number | null

        Minimum salary

      • salary_period
        Type: string | nullenum

        Salary period

        • annually
        • monthly
        • daily
        • hourly
      • url_backoffice
        Type: 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.

      • workflow
        Type: object · IdName nullable

        Hiring workflow (pipeline) assigned to this job. Embedded via include=workflow. Suppressed when view=summary even if the include was requested.

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • workflow_id
        Type: integer | null

        ID of the hiring workflow (pipeline) assigned to this job

    • job_alias
      Type: string | null

      Short alias of the job, usable in URLs (e.g. 79SZHfT)

    • last_message_at
      Type: integer | nullFormat: int64

      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.

    • rejected_at
      Type: integer | nullFormat: int64

      Unix timestamp (seconds)

    • rejection_reason
      Type: array object[] | null · IdName[] nullable

      Reasons for rejection. Null if not rejected.

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • stage
      Type: object · IdName nullable

      Current pipeline stage of the application

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • url_backoffice
      Type: stringFormat: 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.

  • Bad request

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/applications/{id}/hire
curl https://api.100hires.com/v2/applications/1/hire \
  --request POST \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "id": 501,
  "candidate_id": 42,
  "job_id": 7,
  "job_alias": "79SZHfT",
  "internal_job_id": "",
  "company_id": 1,
  "stage": {
    "id": 15,
    "name": "Hired"
  },
  "status": "hired",
  "is_disqualified": false,
  "cv": null,
  "rejected_at": null,
  "rejection_reason": null,
  "hired_at": 1711296000,
  "hiring_team": [
    {
      "id": 5,
      "full_name": "Jane Smith",
      "email": "jane@example.com",
      "role": "recruiter"
    }
  ],
  "custom_fields": null,
  "ai_score": 85,
  "ai_recommendation": "Strong Yes",
  "ai_scoring_updated_at": 1711036800,
  "created_at": 1711036800,
  "updated_at": 1711296000,
  "last_message_at": null,
  "days_since_last_message": null
}

Reject application

Rejects an application with optional rejection reason and note context. Standard endpoint for rejection workflows and reporting consistency.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Query Parameters
  • include
    Type: string

    Comma-separated list of related resources to include. Supported: candidate — full candidate profile, cv.text — parsed plain-text CV content, job — full job payload with url_backoffice for UI deep-linking.

Body
application/json
  • rejection_reason_id
    Type: integer

    Rejection reason ID from GET /taxonomy/rejection-reasons.

  • suppress_notification
    Type: boolean

    Set to true to skip sending the rejection email to the candidate.

Responses
  • Updated application

    Type: object
    • candidate_id
      Type: integer
      required

      ID of the candidate

    • company_id
      Type: integer
      required

      ID of the company

    • created_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • id
      Type: integer
      required

      Unique identifier

    • is_disqualified
      Type: boolean
      required

      Whether the candidate is disqualified for this application

    • job_id
      Type: integer
      required

      ID of the job

    • status
      Type: stringenum
      required

      Application status. Changes via hire/reject/unreject actions.

      • active
      • hired
      • rejected
    • updated_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • ai_recommendation
      Type: string | null

      AI-generated recommendation label (e.g. Strong, Good, Weak)

    • ai_score
      Type: integer | null

      AI-generated candidate fit score (0-100)

    • ai_scoring_updated_at
      Type: integer | nullFormat: int64

      Unix timestamp (seconds) of the latest completed AI scoring result

    • candidate
      Type: object · ApplicationCandidate nullable

      Embedded candidate data (included when requested via include=candidate)

      • company_id
        Type: integer
        required

        ID of the company this candidate belongs to

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • id
        Type: integer
        required

        Unique identifier

      • profile
        Type: array object[] · ProfileAnswer[]
        required

        Candidate profile field answers

        • question_id
          Type: integer
          required

          Question ID.

        • question_text
          Type: string
          required

          Question label.

        • value
          required

          Answer value (string, array, or null).

      • updated_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • days_since_last_message
        Type: integer | null

        Number of whole days since the last message. Computed at request time. Null if no messages exist.

      • emails
        Type: array string[] | null nullable

        List of candidate email addresses

      • first_name
        Type: string | null

        Candidate's first name

      • ip
        Type: string | null

        IP address from which the candidate applied

      • last_message_at
        Type: integer | nullFormat: int64

        Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.

      • last_name
        Type: string | null

        Candidate's last name

      • origin
        Type: object · IdName nullable

        Where the candidate originally came from

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • phones
        Type: array string[] | null nullable

        List of candidate phone numbers

      • source
        Type: object · IdName nullable

        How the candidate was sourced

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

    • custom_fields
      Type: object nullable

      Custom field values as key-value pairs

      • propertyName
        Type: anything
    • cv
      nullable

      Application CV. Returns standard attachment metadata + download URL. When ?include=cv.text is requested, a text field with parsed plain-text content is added.

      • file
        Type: object · AttachmentFile
        required
        • file_ext
          Type: string
          required

          File extension.

        • file_type
          Type: string
          required

          File type category.

        • is_image
          Type: boolean nullable
          required

          Whether the file is an image.

        • orig_file_name
          Type: string
          required

          Original file name.

        • readable_size
          Type: string
          required

          Human-readable file size.

      • relative_time
        Type: string
        required

        Human-readable time since upload (e.g. "2 days ago").

      • url
        Type: stringFormat: uri nullable
        required

        Absolute download URL (e.g. https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit with Authorization: Bearer <API_KEY>.

      • uuid
        Type: stringFormat: uuid
        required

        Unique attachment identifier. Stable across API calls; use in referencing endpoints.

      • text
        Type: 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.

    • days_since_last_message
      Type: integer | null

      Number of whole days since the last message. Computed at request time. Null if no messages exist.

    • hired_at
      Type: integer | nullFormat: int64

      Unix timestamp (seconds)

    • hiring_team
      Type: array object[] | null · JobHiringTeamMember[] nullable

      Team members assigned to this application's job

      • full_name
        Type: string
        required

        User full name.

      • id
        Type: integer
        required

        User ID.

      • email
        Type: string | null

        User email.

      • role
        Type: string | null

        Role on hiring team (e.g. hiring_manager, recruiter).

    • internal_job_id
      Type: string | null

      Company's internal job identifier

    • job
      Type: object · Job nullable

      Embedded job payload (included when requested via include=job). Use job.url_backoffice to deep-link UI widgets to the job's pipeline view in the recruiter app.

      • company_id
        Type: integer
        required

        ID of the company this job belongs to

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • id
        Type: integer
        required

        Unique identifier

      • is_remote
        Type: boolean
        required

        Whether this is a remote position

      • status
        Type: string
        required

        Job status: open, closed, draft, or archived

      • title
        Type: string
        required

        Public job title shown to candidates

      • updated_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • url
        Type: string
        required

        Public URL of the job posting page

      • ai_scoring_criteria
        Type: array object[] · 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
          Type: integer
          required

          Unique identifier of the criterion.

        • position
          Type: integer
          required

          0-based ordinal of the criterion in the job's list.

        • text
          Type: string
          required

          Prompt text describing what to evaluate.

        • weight
          Type: integer
          min:  
          1
          max:  
          10
          required

          Relative importance of this criterion in the total score (1–10).

        • title
          Type: string | null

          Optional short label for the criterion.

      • alias
        Type: string | null

        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.

      • category
        Type: object · IdName nullable

        Job category (e.g. Engineering, Marketing)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • department
        Type: object · IdName nullable

        Department this job belongs to

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • description
        Type: 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.

      • education_level
        Type: object · IdName nullable

        Required education level

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • employment_type
        Type: object · IdName nullable

        Employment type (e.g. Full-time, Part-time, Contract)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • experience_level
        Type: object · IdName nullable

        Required experience level (e.g. Entry, Mid, Senior)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • hiring_team
        Type: array object[] · JobHiringTeamMember[]

        Team members assigned to this job. Embedded via include=hiring_team. Suppressed when view=summary even if the include was requested.

        • full_name
          Type: string
          required

          User full name.

        • id
          Type: integer
          required

          User ID.

        • email
          Type: string | null

          User email.

        • role
          Type: string | null

          Role on hiring team (e.g. hiring_manager, recruiter).

      • hours_per_week_max
        Type: integer | null

        Maximum hours per week

      • hours_per_week_min
        Type: integer | null

        Minimum hours per week

      • indeed_posting_data
        Type: object

        Indeed job board posting metadata. Present only when view=full (default); omitted entirely when view=summary.

        • propertyName
          Type: anything
      • internal_job_id
        Type: string | null

        Company's internal job identifier (e.g. requisition number)

      • internal_title
        Type: string | null

        Internal job title visible only to the hiring team

      • is_satellite
        Type: boolean

        Whether this job is a satellite (child) of a canonical job. Satellite jobs share the candidate pipeline of their parent.

      • location
        Type: object · JobLocation nullable

        Job location details

        • city
          Type: string

          City.

        • country
          Type: string

          Country.

        • full_address
          Type: string

          Full formatted address.

        • postal_code
          Type: string

          Postal code.

        • state
          Type: string

          State or region.

        • street_address
          Type: string

          Street address.

      • parent_job_id
        Type: integer | null

        ID of the canonical (parent) job. Null for canonical jobs. Recruiting operations should target the canonical job.

      • pipeline_stages
        Type: array object[] | null 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
          Type: integer

          Integer numbers.

        • name
          Type: string
      • resume_field_status
        Type: string | nullenum

        Whether resume upload is required, optional, or hidden on the application form

        • required
        • optional
        • hidden
      • salary_currency
        Type: string | null

        Salary currency code (e.g. USD, EUR)

      • salary_max
        Type: number | null

        Maximum salary

      • salary_min
        Type: number | null

        Minimum salary

      • salary_period
        Type: string | nullenum

        Salary period

        • annually
        • monthly
        • daily
        • hourly
      • url_backoffice
        Type: 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.

      • workflow
        Type: object · IdName nullable

        Hiring workflow (pipeline) assigned to this job. Embedded via include=workflow. Suppressed when view=summary even if the include was requested.

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • workflow_id
        Type: integer | null

        ID of the hiring workflow (pipeline) assigned to this job

    • job_alias
      Type: string | null

      Short alias of the job, usable in URLs (e.g. 79SZHfT)

    • last_message_at
      Type: integer | nullFormat: int64

      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.

    • rejected_at
      Type: integer | nullFormat: int64

      Unix timestamp (seconds)

    • rejection_reason
      Type: array object[] | null · IdName[] nullable

      Reasons for rejection. Null if not rejected.

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • stage
      Type: object · IdName nullable

      Current pipeline stage of the application

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • url_backoffice
      Type: stringFormat: 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.

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/applications/{id}/reject
curl https://api.100hires.com/v2/applications/1/reject \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "rejection_reason_id": 1,
  "suppress_notification": true
}'
{
  "id": 501,
  "candidate_id": 42,
  "job_id": 7,
  "job_alias": "79SZHfT",
  "internal_job_id": "",
  "company_id": 1,
  "stage": {
    "id": 12,
    "name": "Phone screen"
  },
  "status": "rejected",
  "is_disqualified": false,
  "cv": null,
  "rejected_at": 1711209600,
  "rejection_reason": [
    {
      "id": 3,
      "name": "Not enough experience"
    }
  ],
  "hired_at": null,
  "hiring_team": null,
  "custom_fields": null,
  "ai_score": 72,
  "ai_recommendation": "Probably Yes",
  "ai_scoring_updated_at": 1711036800,
  "created_at": 1711036800,
  "updated_at": 1711209600,
  "last_message_at": null,
  "days_since_last_message": null
}

Advance application to next stage

Advances the application to the next stage according to workflow order.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Query Parameters
  • include
    Type: string

    Comma-separated list of related resources to include. Supported: candidate — full candidate profile, cv.text — parsed plain-text CV content, job — full job payload with url_backoffice for UI deep-linking.

Responses
  • Updated application

    Type: object
    • candidate_id
      Type: integer
      required

      ID of the candidate

    • company_id
      Type: integer
      required

      ID of the company

    • created_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • id
      Type: integer
      required

      Unique identifier

    • is_disqualified
      Type: boolean
      required

      Whether the candidate is disqualified for this application

    • job_id
      Type: integer
      required

      ID of the job

    • status
      Type: stringenum
      required

      Application status. Changes via hire/reject/unreject actions.

      • active
      • hired
      • rejected
    • updated_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • ai_recommendation
      Type: string | null

      AI-generated recommendation label (e.g. Strong, Good, Weak)

    • ai_score
      Type: integer | null

      AI-generated candidate fit score (0-100)

    • ai_scoring_updated_at
      Type: integer | nullFormat: int64

      Unix timestamp (seconds) of the latest completed AI scoring result

    • candidate
      Type: object · ApplicationCandidate nullable

      Embedded candidate data (included when requested via include=candidate)

      • company_id
        Type: integer
        required

        ID of the company this candidate belongs to

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • id
        Type: integer
        required

        Unique identifier

      • profile
        Type: array object[] · ProfileAnswer[]
        required

        Candidate profile field answers

        • question_id
          Type: integer
          required

          Question ID.

        • question_text
          Type: string
          required

          Question label.

        • value
          required

          Answer value (string, array, or null).

      • updated_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • days_since_last_message
        Type: integer | null

        Number of whole days since the last message. Computed at request time. Null if no messages exist.

      • emails
        Type: array string[] | null nullable

        List of candidate email addresses

      • first_name
        Type: string | null

        Candidate's first name

      • ip
        Type: string | null

        IP address from which the candidate applied

      • last_message_at
        Type: integer | nullFormat: int64

        Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.

      • last_name
        Type: string | null

        Candidate's last name

      • origin
        Type: object · IdName nullable

        Where the candidate originally came from

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • phones
        Type: array string[] | null nullable

        List of candidate phone numbers

      • source
        Type: object · IdName nullable

        How the candidate was sourced

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

    • custom_fields
      Type: object nullable

      Custom field values as key-value pairs

      • propertyName
        Type: anything
    • cv
      nullable

      Application CV. Returns standard attachment metadata + download URL. When ?include=cv.text is requested, a text field with parsed plain-text content is added.

      • file
        Type: object · AttachmentFile
        required
        • file_ext
          Type: string
          required

          File extension.

        • file_type
          Type: string
          required

          File type category.

        • is_image
          Type: boolean nullable
          required

          Whether the file is an image.

        • orig_file_name
          Type: string
          required

          Original file name.

        • readable_size
          Type: string
          required

          Human-readable file size.

      • relative_time
        Type: string
        required

        Human-readable time since upload (e.g. "2 days ago").

      • url
        Type: stringFormat: uri nullable
        required

        Absolute download URL (e.g. https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit with Authorization: Bearer <API_KEY>.

      • uuid
        Type: stringFormat: uuid
        required

        Unique attachment identifier. Stable across API calls; use in referencing endpoints.

      • text
        Type: 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.

    • days_since_last_message
      Type: integer | null

      Number of whole days since the last message. Computed at request time. Null if no messages exist.

    • hired_at
      Type: integer | nullFormat: int64

      Unix timestamp (seconds)

    • hiring_team
      Type: array object[] | null · JobHiringTeamMember[] nullable

      Team members assigned to this application's job

      • full_name
        Type: string
        required

        User full name.

      • id
        Type: integer
        required

        User ID.

      • email
        Type: string | null

        User email.

      • role
        Type: string | null

        Role on hiring team (e.g. hiring_manager, recruiter).

    • internal_job_id
      Type: string | null

      Company's internal job identifier

    • job
      Type: object · Job nullable

      Embedded job payload (included when requested via include=job). Use job.url_backoffice to deep-link UI widgets to the job's pipeline view in the recruiter app.

      • company_id
        Type: integer
        required

        ID of the company this job belongs to

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • id
        Type: integer
        required

        Unique identifier

      • is_remote
        Type: boolean
        required

        Whether this is a remote position

      • status
        Type: string
        required

        Job status: open, closed, draft, or archived

      • title
        Type: string
        required

        Public job title shown to candidates

      • updated_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • url
        Type: string
        required

        Public URL of the job posting page

      • ai_scoring_criteria
        Type: array object[] · 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
          Type: integer
          required

          Unique identifier of the criterion.

        • position
          Type: integer
          required

          0-based ordinal of the criterion in the job's list.

        • text
          Type: string
          required

          Prompt text describing what to evaluate.

        • weight
          Type: integer
          min:  
          1
          max:  
          10
          required

          Relative importance of this criterion in the total score (1–10).

        • title
          Type: string | null

          Optional short label for the criterion.

      • alias
        Type: string | null

        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.

      • category
        Type: object · IdName nullable

        Job category (e.g. Engineering, Marketing)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • department
        Type: object · IdName nullable

        Department this job belongs to

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • description
        Type: 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.

      • education_level
        Type: object · IdName nullable

        Required education level

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • employment_type
        Type: object · IdName nullable

        Employment type (e.g. Full-time, Part-time, Contract)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • experience_level
        Type: object · IdName nullable

        Required experience level (e.g. Entry, Mid, Senior)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • hiring_team
        Type: array object[] · JobHiringTeamMember[]

        Team members assigned to this job. Embedded via include=hiring_team. Suppressed when view=summary even if the include was requested.

        • full_name
          Type: string
          required

          User full name.

        • id
          Type: integer
          required

          User ID.

        • email
          Type: string | null

          User email.

        • role
          Type: string | null

          Role on hiring team (e.g. hiring_manager, recruiter).

      • hours_per_week_max
        Type: integer | null

        Maximum hours per week

      • hours_per_week_min
        Type: integer | null

        Minimum hours per week

      • indeed_posting_data
        Type: object

        Indeed job board posting metadata. Present only when view=full (default); omitted entirely when view=summary.

        • propertyName
          Type: anything
      • internal_job_id
        Type: string | null

        Company's internal job identifier (e.g. requisition number)

      • internal_title
        Type: string | null

        Internal job title visible only to the hiring team

      • is_satellite
        Type: boolean

        Whether this job is a satellite (child) of a canonical job. Satellite jobs share the candidate pipeline of their parent.

      • location
        Type: object · JobLocation nullable

        Job location details

        • city
          Type: string

          City.

        • country
          Type: string

          Country.

        • full_address
          Type: string

          Full formatted address.

        • postal_code
          Type: string

          Postal code.

        • state
          Type: string

          State or region.

        • street_address
          Type: string

          Street address.

      • parent_job_id
        Type: integer | null

        ID of the canonical (parent) job. Null for canonical jobs. Recruiting operations should target the canonical job.

      • pipeline_stages
        Type: array object[] | null 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
          Type: integer

          Integer numbers.

        • name
          Type: string
      • resume_field_status
        Type: string | nullenum

        Whether resume upload is required, optional, or hidden on the application form

        • required
        • optional
        • hidden
      • salary_currency
        Type: string | null

        Salary currency code (e.g. USD, EUR)

      • salary_max
        Type: number | null

        Maximum salary

      • salary_min
        Type: number | null

        Minimum salary

      • salary_period
        Type: string | nullenum

        Salary period

        • annually
        • monthly
        • daily
        • hourly
      • url_backoffice
        Type: 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.

      • workflow
        Type: object · IdName nullable

        Hiring workflow (pipeline) assigned to this job. Embedded via include=workflow. Suppressed when view=summary even if the include was requested.

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • workflow_id
        Type: integer | null

        ID of the hiring workflow (pipeline) assigned to this job

    • job_alias
      Type: string | null

      Short alias of the job, usable in URLs (e.g. 79SZHfT)

    • last_message_at
      Type: integer | nullFormat: int64

      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.

    • rejected_at
      Type: integer | nullFormat: int64

      Unix timestamp (seconds)

    • rejection_reason
      Type: array object[] | null · IdName[] nullable

      Reasons for rejection. Null if not rejected.

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • stage
      Type: object · IdName nullable

      Current pipeline stage of the application

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • url_backoffice
      Type: stringFormat: 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.

  • Bad request

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/applications/{id}/advance
curl https://api.100hires.com/v2/applications/1/advance \
  --request POST \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "id": 501,
  "candidate_id": 42,
  "job_id": 7,
  "job_alias": "79SZHfT",
  "internal_job_id": "",
  "company_id": 1,
  "stage": {
    "id": 13,
    "name": "Technical interview"
  },
  "status": "active",
  "is_disqualified": false,
  "cv": null,
  "rejected_at": null,
  "rejection_reason": null,
  "hired_at": null,
  "hiring_team": null,
  "custom_fields": null,
  "ai_score": 72,
  "ai_recommendation": "Probably Yes",
  "ai_scoring_updated_at": 1711036800,
  "created_at": 1711036800,
  "updated_at": 1711209600,
  "last_message_at": null,
  "days_since_last_message": null
}

Transfer application to another job

Transfers an application to another job with optional target stage.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Query Parameters
  • include
    Type: string

    Comma-separated list of related resources to include. Supported: candidate — full candidate profile, cv.text — parsed plain-text CV content, job — full job payload with url_backoffice for UI deep-linking.

Body
required
application/json
  • job_id
    Type: integer
    required

    Target job ID to transfer the application to.

  • stage_id
    Type: integer

    Pipeline stage ID on the target job. If omitted, defaults to the first stage.

Responses
  • Updated application

    Type: object
    • candidate_id
      Type: integer
      required

      ID of the candidate

    • company_id
      Type: integer
      required

      ID of the company

    • created_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • id
      Type: integer
      required

      Unique identifier

    • is_disqualified
      Type: boolean
      required

      Whether the candidate is disqualified for this application

    • job_id
      Type: integer
      required

      ID of the job

    • status
      Type: stringenum
      required

      Application status. Changes via hire/reject/unreject actions.

      • active
      • hired
      • rejected
    • updated_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • ai_recommendation
      Type: string | null

      AI-generated recommendation label (e.g. Strong, Good, Weak)

    • ai_score
      Type: integer | null

      AI-generated candidate fit score (0-100)

    • ai_scoring_updated_at
      Type: integer | nullFormat: int64

      Unix timestamp (seconds) of the latest completed AI scoring result

    • candidate
      Type: object · ApplicationCandidate nullable

      Embedded candidate data (included when requested via include=candidate)

      • company_id
        Type: integer
        required

        ID of the company this candidate belongs to

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • id
        Type: integer
        required

        Unique identifier

      • profile
        Type: array object[] · ProfileAnswer[]
        required

        Candidate profile field answers

        • question_id
          Type: integer
          required

          Question ID.

        • question_text
          Type: string
          required

          Question label.

        • value
          required

          Answer value (string, array, or null).

      • updated_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • days_since_last_message
        Type: integer | null

        Number of whole days since the last message. Computed at request time. Null if no messages exist.

      • emails
        Type: array string[] | null nullable

        List of candidate email addresses

      • first_name
        Type: string | null

        Candidate's first name

      • ip
        Type: string | null

        IP address from which the candidate applied

      • last_message_at
        Type: integer | nullFormat: int64

        Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.

      • last_name
        Type: string | null

        Candidate's last name

      • origin
        Type: object · IdName nullable

        Where the candidate originally came from

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • phones
        Type: array string[] | null nullable

        List of candidate phone numbers

      • source
        Type: object · IdName nullable

        How the candidate was sourced

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

    • custom_fields
      Type: object nullable

      Custom field values as key-value pairs

      • propertyName
        Type: anything
    • cv
      nullable

      Application CV. Returns standard attachment metadata + download URL. When ?include=cv.text is requested, a text field with parsed plain-text content is added.

      • file
        Type: object · AttachmentFile
        required
        • file_ext
          Type: string
          required

          File extension.

        • file_type
          Type: string
          required

          File type category.

        • is_image
          Type: boolean nullable
          required

          Whether the file is an image.

        • orig_file_name
          Type: string
          required

          Original file name.

        • readable_size
          Type: string
          required

          Human-readable file size.

      • relative_time
        Type: string
        required

        Human-readable time since upload (e.g. "2 days ago").

      • url
        Type: stringFormat: uri nullable
        required

        Absolute download URL (e.g. https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit with Authorization: Bearer <API_KEY>.

      • uuid
        Type: stringFormat: uuid
        required

        Unique attachment identifier. Stable across API calls; use in referencing endpoints.

      • text
        Type: 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.

    • days_since_last_message
      Type: integer | null

      Number of whole days since the last message. Computed at request time. Null if no messages exist.

    • hired_at
      Type: integer | nullFormat: int64

      Unix timestamp (seconds)

    • hiring_team
      Type: array object[] | null · JobHiringTeamMember[] nullable

      Team members assigned to this application's job

      • full_name
        Type: string
        required

        User full name.

      • id
        Type: integer
        required

        User ID.

      • email
        Type: string | null

        User email.

      • role
        Type: string | null

        Role on hiring team (e.g. hiring_manager, recruiter).

    • internal_job_id
      Type: string | null

      Company's internal job identifier

    • job
      Type: object · Job nullable

      Embedded job payload (included when requested via include=job). Use job.url_backoffice to deep-link UI widgets to the job's pipeline view in the recruiter app.

      • company_id
        Type: integer
        required

        ID of the company this job belongs to

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • id
        Type: integer
        required

        Unique identifier

      • is_remote
        Type: boolean
        required

        Whether this is a remote position

      • status
        Type: string
        required

        Job status: open, closed, draft, or archived

      • title
        Type: string
        required

        Public job title shown to candidates

      • updated_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • url
        Type: string
        required

        Public URL of the job posting page

      • ai_scoring_criteria
        Type: array object[] · 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
          Type: integer
          required

          Unique identifier of the criterion.

        • position
          Type: integer
          required

          0-based ordinal of the criterion in the job's list.

        • text
          Type: string
          required

          Prompt text describing what to evaluate.

        • weight
          Type: integer
          min:  
          1
          max:  
          10
          required

          Relative importance of this criterion in the total score (1–10).

        • title
          Type: string | null

          Optional short label for the criterion.

      • alias
        Type: string | null

        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.

      • category
        Type: object · IdName nullable

        Job category (e.g. Engineering, Marketing)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • department
        Type: object · IdName nullable

        Department this job belongs to

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • description
        Type: 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.

      • education_level
        Type: object · IdName nullable

        Required education level

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • employment_type
        Type: object · IdName nullable

        Employment type (e.g. Full-time, Part-time, Contract)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • experience_level
        Type: object · IdName nullable

        Required experience level (e.g. Entry, Mid, Senior)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • hiring_team
        Type: array object[] · JobHiringTeamMember[]

        Team members assigned to this job. Embedded via include=hiring_team. Suppressed when view=summary even if the include was requested.

        • full_name
          Type: string
          required

          User full name.

        • id
          Type: integer
          required

          User ID.

        • email
          Type: string | null

          User email.

        • role
          Type: string | null

          Role on hiring team (e.g. hiring_manager, recruiter).

      • hours_per_week_max
        Type: integer | null

        Maximum hours per week

      • hours_per_week_min
        Type: integer | null

        Minimum hours per week

      • indeed_posting_data
        Type: object

        Indeed job board posting metadata. Present only when view=full (default); omitted entirely when view=summary.

        • propertyName
          Type: anything
      • internal_job_id
        Type: string | null

        Company's internal job identifier (e.g. requisition number)

      • internal_title
        Type: string | null

        Internal job title visible only to the hiring team

      • is_satellite
        Type: boolean

        Whether this job is a satellite (child) of a canonical job. Satellite jobs share the candidate pipeline of their parent.

      • location
        Type: object · JobLocation nullable

        Job location details

        • city
          Type: string

          City.

        • country
          Type: string

          Country.

        • full_address
          Type: string

          Full formatted address.

        • postal_code
          Type: string

          Postal code.

        • state
          Type: string

          State or region.

        • street_address
          Type: string

          Street address.

      • parent_job_id
        Type: integer | null

        ID of the canonical (parent) job. Null for canonical jobs. Recruiting operations should target the canonical job.

      • pipeline_stages
        Type: array object[] | null 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
          Type: integer

          Integer numbers.

        • name
          Type: string
      • resume_field_status
        Type: string | nullenum

        Whether resume upload is required, optional, or hidden on the application form

        • required
        • optional
        • hidden
      • salary_currency
        Type: string | null

        Salary currency code (e.g. USD, EUR)

      • salary_max
        Type: number | null

        Maximum salary

      • salary_min
        Type: number | null

        Minimum salary

      • salary_period
        Type: string | nullenum

        Salary period

        • annually
        • monthly
        • daily
        • hourly
      • url_backoffice
        Type: 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.

      • workflow
        Type: object · IdName nullable

        Hiring workflow (pipeline) assigned to this job. Embedded via include=workflow. Suppressed when view=summary even if the include was requested.

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • workflow_id
        Type: integer | null

        ID of the hiring workflow (pipeline) assigned to this job

    • job_alias
      Type: string | null

      Short alias of the job, usable in URLs (e.g. 79SZHfT)

    • last_message_at
      Type: integer | nullFormat: int64

      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.

    • rejected_at
      Type: integer | nullFormat: int64

      Unix timestamp (seconds)

    • rejection_reason
      Type: array object[] | null · IdName[] nullable

      Reasons for rejection. Null if not rejected.

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • stage
      Type: object · IdName nullable

      Current pipeline stage of the application

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • url_backoffice
      Type: stringFormat: 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.

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/applications/{id}/transfer
curl https://api.100hires.com/v2/applications/1/transfer \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "job_id": 1,
  "stage_id": 1
}'
{
  "id": 510,
  "candidate_id": 42,
  "job_id": 15,
  "job_alias": "Kx9mPqW",
  "internal_job_id": "ENG-042",
  "company_id": 1,
  "stage": {
    "id": 20,
    "name": "New"
  },
  "status": "active",
  "is_disqualified": false,
  "cv": null,
  "rejected_at": null,
  "rejection_reason": null,
  "hired_at": null,
  "hiring_team": null,
  "custom_fields": null,
  "ai_score": null,
  "ai_recommendation": null,
  "ai_scoring_updated_at": null,
  "created_at": 1711209600,
  "updated_at": 1711209600,
  "last_message_at": null,
  "days_since_last_message": null
}

Undo application rejection

Reopens a previously rejected application. Use for recovery flows, reconsideration pipelines, and human override operations.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Query Parameters
  • include
    Type: string

    Comma-separated list of related resources to include. Supported: candidate — full candidate profile, cv.text — parsed plain-text CV content, job — full job payload with url_backoffice for UI deep-linking.

Responses
  • Updated application

    Type: object
    • candidate_id
      Type: integer
      required

      ID of the candidate

    • company_id
      Type: integer
      required

      ID of the company

    • created_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • id
      Type: integer
      required

      Unique identifier

    • is_disqualified
      Type: boolean
      required

      Whether the candidate is disqualified for this application

    • job_id
      Type: integer
      required

      ID of the job

    • status
      Type: stringenum
      required

      Application status. Changes via hire/reject/unreject actions.

      • active
      • hired
      • rejected
    • updated_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • ai_recommendation
      Type: string | null

      AI-generated recommendation label (e.g. Strong, Good, Weak)

    • ai_score
      Type: integer | null

      AI-generated candidate fit score (0-100)

    • ai_scoring_updated_at
      Type: integer | nullFormat: int64

      Unix timestamp (seconds) of the latest completed AI scoring result

    • candidate
      Type: object · ApplicationCandidate nullable

      Embedded candidate data (included when requested via include=candidate)

      • company_id
        Type: integer
        required

        ID of the company this candidate belongs to

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • id
        Type: integer
        required

        Unique identifier

      • profile
        Type: array object[] · ProfileAnswer[]
        required

        Candidate profile field answers

        • question_id
          Type: integer
          required

          Question ID.

        • question_text
          Type: string
          required

          Question label.

        • value
          required

          Answer value (string, array, or null).

      • updated_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • days_since_last_message
        Type: integer | null

        Number of whole days since the last message. Computed at request time. Null if no messages exist.

      • emails
        Type: array string[] | null nullable

        List of candidate email addresses

      • first_name
        Type: string | null

        Candidate's first name

      • ip
        Type: string | null

        IP address from which the candidate applied

      • last_message_at
        Type: integer | nullFormat: int64

        Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.

      • last_name
        Type: string | null

        Candidate's last name

      • origin
        Type: object · IdName nullable

        Where the candidate originally came from

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • phones
        Type: array string[] | null nullable

        List of candidate phone numbers

      • source
        Type: object · IdName nullable

        How the candidate was sourced

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

    • custom_fields
      Type: object nullable

      Custom field values as key-value pairs

      • propertyName
        Type: anything
    • cv
      nullable

      Application CV. Returns standard attachment metadata + download URL. When ?include=cv.text is requested, a text field with parsed plain-text content is added.

      • file
        Type: object · AttachmentFile
        required
        • file_ext
          Type: string
          required

          File extension.

        • file_type
          Type: string
          required

          File type category.

        • is_image
          Type: boolean nullable
          required

          Whether the file is an image.

        • orig_file_name
          Type: string
          required

          Original file name.

        • readable_size
          Type: string
          required

          Human-readable file size.

      • relative_time
        Type: string
        required

        Human-readable time since upload (e.g. "2 days ago").

      • url
        Type: stringFormat: uri nullable
        required

        Absolute download URL (e.g. https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit with Authorization: Bearer <API_KEY>.

      • uuid
        Type: stringFormat: uuid
        required

        Unique attachment identifier. Stable across API calls; use in referencing endpoints.

      • text
        Type: 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.

    • days_since_last_message
      Type: integer | null

      Number of whole days since the last message. Computed at request time. Null if no messages exist.

    • hired_at
      Type: integer | nullFormat: int64

      Unix timestamp (seconds)

    • hiring_team
      Type: array object[] | null · JobHiringTeamMember[] nullable

      Team members assigned to this application's job

      • full_name
        Type: string
        required

        User full name.

      • id
        Type: integer
        required

        User ID.

      • email
        Type: string | null

        User email.

      • role
        Type: string | null

        Role on hiring team (e.g. hiring_manager, recruiter).

    • internal_job_id
      Type: string | null

      Company's internal job identifier

    • job
      Type: object · Job nullable

      Embedded job payload (included when requested via include=job). Use job.url_backoffice to deep-link UI widgets to the job's pipeline view in the recruiter app.

      • company_id
        Type: integer
        required

        ID of the company this job belongs to

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • id
        Type: integer
        required

        Unique identifier

      • is_remote
        Type: boolean
        required

        Whether this is a remote position

      • status
        Type: string
        required

        Job status: open, closed, draft, or archived

      • title
        Type: string
        required

        Public job title shown to candidates

      • updated_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • url
        Type: string
        required

        Public URL of the job posting page

      • ai_scoring_criteria
        Type: array object[] · 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
          Type: integer
          required

          Unique identifier of the criterion.

        • position
          Type: integer
          required

          0-based ordinal of the criterion in the job's list.

        • text
          Type: string
          required

          Prompt text describing what to evaluate.

        • weight
          Type: integer
          min:  
          1
          max:  
          10
          required

          Relative importance of this criterion in the total score (1–10).

        • title
          Type: string | null

          Optional short label for the criterion.

      • alias
        Type: string | null

        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.

      • category
        Type: object · IdName nullable

        Job category (e.g. Engineering, Marketing)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • department
        Type: object · IdName nullable

        Department this job belongs to

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • description
        Type: 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.

      • education_level
        Type: object · IdName nullable

        Required education level

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • employment_type
        Type: object · IdName nullable

        Employment type (e.g. Full-time, Part-time, Contract)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • experience_level
        Type: object · IdName nullable

        Required experience level (e.g. Entry, Mid, Senior)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • hiring_team
        Type: array object[] · JobHiringTeamMember[]

        Team members assigned to this job. Embedded via include=hiring_team. Suppressed when view=summary even if the include was requested.

        • full_name
          Type: string
          required

          User full name.

        • id
          Type: integer
          required

          User ID.

        • email
          Type: string | null

          User email.

        • role
          Type: string | null

          Role on hiring team (e.g. hiring_manager, recruiter).

      • hours_per_week_max
        Type: integer | null

        Maximum hours per week

      • hours_per_week_min
        Type: integer | null

        Minimum hours per week

      • indeed_posting_data
        Type: object

        Indeed job board posting metadata. Present only when view=full (default); omitted entirely when view=summary.

        • propertyName
          Type: anything
      • internal_job_id
        Type: string | null

        Company's internal job identifier (e.g. requisition number)

      • internal_title
        Type: string | null

        Internal job title visible only to the hiring team

      • is_satellite
        Type: boolean

        Whether this job is a satellite (child) of a canonical job. Satellite jobs share the candidate pipeline of their parent.

      • location
        Type: object · JobLocation nullable

        Job location details

        • city
          Type: string

          City.

        • country
          Type: string

          Country.

        • full_address
          Type: string

          Full formatted address.

        • postal_code
          Type: string

          Postal code.

        • state
          Type: string

          State or region.

        • street_address
          Type: string

          Street address.

      • parent_job_id
        Type: integer | null

        ID of the canonical (parent) job. Null for canonical jobs. Recruiting operations should target the canonical job.

      • pipeline_stages
        Type: array object[] | null 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
          Type: integer

          Integer numbers.

        • name
          Type: string
      • resume_field_status
        Type: string | nullenum

        Whether resume upload is required, optional, or hidden on the application form

        • required
        • optional
        • hidden
      • salary_currency
        Type: string | null

        Salary currency code (e.g. USD, EUR)

      • salary_max
        Type: number | null

        Maximum salary

      • salary_min
        Type: number | null

        Minimum salary

      • salary_period
        Type: string | nullenum

        Salary period

        • annually
        • monthly
        • daily
        • hourly
      • url_backoffice
        Type: 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.

      • workflow
        Type: object · IdName nullable

        Hiring workflow (pipeline) assigned to this job. Embedded via include=workflow. Suppressed when view=summary even if the include was requested.

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • workflow_id
        Type: integer | null

        ID of the hiring workflow (pipeline) assigned to this job

    • job_alias
      Type: string | null

      Short alias of the job, usable in URLs (e.g. 79SZHfT)

    • last_message_at
      Type: integer | nullFormat: int64

      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.

    • rejected_at
      Type: integer | nullFormat: int64

      Unix timestamp (seconds)

    • rejection_reason
      Type: array object[] | null · IdName[] nullable

      Reasons for rejection. Null if not rejected.

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • stage
      Type: object · IdName nullable

      Current pipeline stage of the application

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • url_backoffice
      Type: stringFormat: 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.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/applications/{id}/unreject
curl https://api.100hires.com/v2/applications/1/unreject \
  --request POST \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "id": 501,
  "candidate_id": 42,
  "job_id": 7,
  "job_alias": "79SZHfT",
  "internal_job_id": "",
  "company_id": 1,
  "stage": {
    "id": 12,
    "name": "Phone screen"
  },
  "status": "active",
  "is_disqualified": false,
  "cv": null,
  "rejected_at": null,
  "rejection_reason": null,
  "hired_at": null,
  "hiring_team": null,
  "custom_fields": null,
  "ai_score": 72,
  "ai_recommendation": "Probably Yes",
  "ai_scoring_updated_at": 1711036800,
  "created_at": 1711036800,
  "updated_at": 1711209600,
  "last_message_at": null,
  "days_since_last_message": null
}

List application attachments

Lists attachments linked to an application.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Responses
  • Attachment list

    Type: array · ApplicationAttachment[]
    • Type: object · ApiAttachment

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

      • file
        Type: object · AttachmentFile
        required
        • file_ext
          Type: string
          required

          File extension.

        • file_type
          Type: string
          required

          File type category.

        • is_image
          Type: boolean nullable
          required

          Whether the file is an image.

        • orig_file_name
          Type: string
          required

          Original file name.

        • readable_size
          Type: string
          required

          Human-readable file size.

      • relative_time
        Type: string
        required

        Human-readable time since upload (e.g. "2 days ago").

      • url
        Type: stringFormat: uri nullable
        required

        Absolute download URL (e.g. https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit with Authorization: Bearer <API_KEY>.

      • uuid
        Type: stringFormat: uuid
        required

        Unique attachment identifier. Stable across API calls; use in referencing endpoints.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/applications/{id}/attachments
curl https://api.100hires.com/v2/applications/1/attachments \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
[
  {
    "uuid": "55aaaaaa-bbbb-cccc-dddd-555555555555",
    "url": "https://api.100hires.com/v2/attachments/application/55aaaaaa-bbbb-cccc-dddd-555555555555/resume_john_doe.pdf",
    "relative_time": "2 days ago",
    "file": {
      "is_image": false,
      "orig_file_name": "resume_john_doe.pdf",
      "file_ext": "pdf",
      "file_type": "application/pdf",
      "readable_size": "100 KB"
    }
  },
  {
    "uuid": "56bbbbbb-cccc-dddd-eeee-666666666666",
    "url": "https://api.100hires.com/v2/attachments/application/56bbbbbb-cccc-dddd-eeee-666666666666/cover_letter.docx",
    "relative_time": "1 day ago",
    "file": {
      "is_image": false,
      "orig_file_name": "cover_letter.docx",
      "file_ext": "docx",
      "file_type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
      "readable_size": "50 KB"
    }
  }
]

Upload application attachment

Uploads an attachment directly to the application context. Commonly used for signed documents and interviewer artifacts.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Body
required
application/json
  • file
    Type: object · FileData
    required
    • data
      Type: string
      required

      Base64 content

    • file_name
      Type: string
      required

      Original file name.

    • mime_type
      Type: string
      required

      MIME type (e.g. application/pdf).

    • size
      Type: integer

      Optional for uploads, returned in responses

Responses
  • Uploaded attachment

    Type: object · ApiAttachment

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

    • file
      Type: object · AttachmentFile
      required
      • file_ext
        Type: string
        required

        File extension.

      • file_type
        Type: string
        required

        File type category.

      • is_image
        Type: boolean nullable
        required

        Whether the file is an image.

      • orig_file_name
        Type: string
        required

        Original file name.

      • readable_size
        Type: string
        required

        Human-readable file size.

    • relative_time
      Type: string
      required

      Human-readable time since upload (e.g. "2 days ago").

    • url
      Type: stringFormat: uri nullable
      required

      Absolute download URL (e.g. https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit with Authorization: Bearer <API_KEY>.

    • uuid
      Type: stringFormat: uuid
      required

      Unique attachment identifier. Stable across API calls; use in referencing endpoints.

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/applications/{id}/attachments
curl https://api.100hires.com/v2/applications/1/attachments \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "file": {
    "data": "",
    "file_name": "",
    "mime_type": "",
    "size": 1
  }
}'
{
  "uuid": "88cccccc-dddd-eeee-ffff-888888888888",
  "url": "https://api.100hires.com/v2/attachments/application/88cccccc-dddd-eeee-ffff-888888888888/offer_letter.pdf",
  "relative_time": "a few seconds ago",
  "file": {
    "is_image": false,
    "orig_file_name": "offer_letter.pdf",
    "file_ext": "pdf",
    "file_type": "application/pdf",
    "readable_size": "200 KB"
  },
  "created_at": 1711036800
}

Batch move applications to stage

Moves multiple applications to a specified pipeline stage in one request. Returns per-item results with partial success support.

Body
required
application/json
  • ids
    Type: array integer[] …100
    required

    Application IDs to move (max 100)

  • stage_id
    Type: integer
    required

    Target pipeline stage ID

Responses
  • Batch results with per-item success/failure

    Type: object
    • results
      Type: array object[] · BatchResultItem[]
      required

      Array of per-item results.

      • id
        required
        • Type: integer

          Entity ID or alias from the request

      • data
        Type: object

        Entity payload on success. Present only when the item succeeded.

      • error
        Type: object

        Structured error object on failure. Present only when the item failed. Same format as top-level API errors.

        • code
          Type: integer

          Integer numbers.

        • message
          Type: string
        • name
          Type: string
        • status
          Type: integer

          Integer numbers.

        • validation_errors
          Type: object
          • propertyName
            Type: string
  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/applications/batch/move
curl https://api.100hires.com/v2/applications/batch/move \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "ids": [
    101,
    102,
    103
  ],
  "stage_id": 456
}'
{
  "results": [
    {
      "id": 101,
      "data": {
        "id": 101,
        "candidate_id": 42,
        "job_id": 7,
        "stage": {
          "id": 456,
          "name": "Technical interview"
        },
        "status": "active"
      }
    },
    {
      "id": 102,
      "data": {
        "id": 102,
        "candidate_id": 43,
        "job_id": 7,
        "stage": {
          "id": 456,
          "name": "Technical interview"
        },
        "status": "active"
      }
    },
    {
      "id": 103,
      "error": {
        "name": "Application not found",
        "message": "",
        "code": 0,
        "status": 404
      }
    }
  ]
}

Batch reject applications

Rejects multiple applications in one request with optional rejection reason. Returns per-item results with partial success support.

Body
required
application/json
  • ids
    Type: array integer[] …100
    required

    Application IDs to reject (max 100)

  • rejection_reason_id
    Type: integer

    Optional rejection reason ID

Responses
  • Batch results with per-item success/failure

    Type: object
    • results
      Type: array object[] · BatchResultItem[]
      required

      Array of per-item results.

      • id
        required
        • Type: integer

          Entity ID or alias from the request

      • data
        Type: object

        Entity payload on success. Present only when the item succeeded.

      • error
        Type: object

        Structured error object on failure. Present only when the item failed. Same format as top-level API errors.

        • code
          Type: integer

          Integer numbers.

        • message
          Type: string
        • name
          Type: string
        • status
          Type: integer

          Integer numbers.

        • validation_errors
          Type: object
          • propertyName
            Type: string
  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/applications/batch/reject
curl https://api.100hires.com/v2/applications/batch/reject \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "ids": [
    1
  ],
  "rejection_reason_id": 1
}'
{
  "results": [
    {
      "id": 201,
      "data": {
        "id": 201,
        "candidate_id": 42,
        "job_id": 7,
        "status": "rejected",
        "rejected_at": 1711209600,
        "rejection_reason": [
          {
            "id": 3,
            "name": "Not enough experience"
          }
        ]
      }
    },
    {
      "id": 202,
      "data": {
        "id": 202,
        "candidate_id": 43,
        "job_id": 7,
        "status": "rejected",
        "rejected_at": 1711209600,
        "rejection_reason": [
          {
            "id": 3,
            "name": "Not enough experience"
          }
        ]
      }
    },
    {
      "id": 203,
      "error": {
        "name": "Application not found",
        "message": "",
        "code": 0,
        "status": 404
      }
    }
  ]
}

Interviews

Interview scheduling: list, view, and create interviews linked to applications and candidates.

List candidate interviews

Returns all interviews linked to a candidate across all their applications. Useful for candidate timeline views and scheduling conflict detection.

Path Parameters
  • id
    Type: string Pattern: ^[A-Za-z0-9_-]+$
    required

    Candidate ID (numeric) or alias

Query Parameters
  • page
    Type: integer
    min:  
    1

    Page number (1-based). Defaults to 1.

  • size
    Type: integer
    min:  
    1
    max:  
    100

    Number of items per page (1–100). Defaults to 20.

Responses
  • Interview list

    Type: object
    • interviews
      Type: array object[] · Interview[]
      required

      Array of interviews.

      • application_id
        Type: integer
        required

        ID of the related application

      • candidate_id
        Type: integer
        required

        ID of the related candidate

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • end_time
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • id
        Type: integer
        required

        Unique identifier

      • interviewers
        Type: array object[]
        required

        List of interviewers participating in this interview

        • email
          Type: string
        • name
          Type: string
        • user_id
          Type: integer

          Integer numbers.

      • job_id
        Type: integer
        required

        ID of the related job

      • start_time
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • status
        Type: stringenum
        required

        Interview status

        • scheduled
        • completed
      • updated_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • application
        Type: object · Application

        Embedded application data (included when requested)

        • candidate_id
          Type: integer
          required

          ID of the candidate

        • company_id
          Type: integer
          required

          ID of the company

        • created_at
          Type: integerFormat: int64
          required

          Unix timestamp (seconds)

        • id
          Type: integer
          required

          Unique identifier

        • is_disqualified
          Type: boolean
          required

          Whether the candidate is disqualified for this application

        • job_id
          Type: integer
          required

          ID of the job

        • status
          Type: stringenum
          required

          Application status. Changes via hire/reject/unreject actions.

          • active
          • hired
          • rejected
        • updated_at
          Type: integerFormat: int64
          required

          Unix timestamp (seconds)

        • ai_recommendation
          Type: string | null

          AI-generated recommendation label (e.g. Strong, Good, Weak)

        • ai_score
          Type: integer | null

          AI-generated candidate fit score (0-100)

        • ai_scoring_updated_at
          Type: integer | nullFormat: int64

          Unix timestamp (seconds) of the latest completed AI scoring result

        • candidate
          Type: object · ApplicationCandidate nullable

          Embedded candidate data (included when requested via include=candidate)

          • company_id
            Type: integer
            required

            ID of the company this candidate belongs to

          • created_at
            Type: integerFormat: int64
            required

            Unix timestamp (seconds)

          • id
            Type: integer
            required

            Unique identifier

          • profile
            Type: array object[] · ProfileAnswer[]
            required

            Candidate profile field answers

            • question_id
              Type: integer
              required

              Question ID.

            • question_text
              Type: string
              required

              Question label.

            • value
              required

              Answer value (string, array, or null).

          • updated_at
            Type: integerFormat: int64
            required

            Unix timestamp (seconds)

          • days_since_last_message
            Type: integer | null

            Number of whole days since the last message. Computed at request time. Null if no messages exist.

          • emails
            Type: array string[] | null nullable

            List of candidate email addresses

          • first_name
            Type: string | null

            Candidate's first name

          • ip
            Type: string | null

            IP address from which the candidate applied

          • last_message_at
            Type: integer | nullFormat: int64

            Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.

          • last_name
            Type: string | null

            Candidate's last name

          • origin
            Type: object · IdName nullable

            Where the candidate originally came from

            • id
              Type: integer
              required

              Unique identifier.

            • name
              Type: string
              required

              Display name.

          • phones
            Type: array string[] | null nullable

            List of candidate phone numbers

          • source
            Type: object · IdName nullable

            How the candidate was sourced

            • id
              Type: integer
              required

              Unique identifier.

            • name
              Type: string
              required

              Display name.

        • custom_fields
          Type: object nullable

          Custom field values as key-value pairs

          • propertyName
            Type: anything
        • cv
          nullable

          Application CV. Returns standard attachment metadata + download URL. When ?include=cv.text is requested, a text field with parsed plain-text content is added.

          • file
            Type: object · AttachmentFile
            required
            • file_ext
              Type: string
              required

              File extension.

            • file_type
              Type: string
              required

              File type category.

            • is_image
              Type: boolean nullable
              required

              Whether the file is an image.

            • orig_file_name
              Type: string
              required

              Original file name.

            • readable_size
              Type: string
              required

              Human-readable file size.

          • relative_time
            Type: string
            required

            Human-readable time since upload (e.g. "2 days ago").

          • url
            Type: stringFormat: uri nullable
            required

            Absolute download URL (e.g. https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit with Authorization: Bearer <API_KEY>.

          • uuid
            Type: stringFormat: uuid
            required

            Unique attachment identifier. Stable across API calls; use in referencing endpoints.

          • text
            Type: 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.

        • days_since_last_message
          Type: integer | null

          Number of whole days since the last message. Computed at request time. Null if no messages exist.

        • hired_at
          Type: integer | nullFormat: int64

          Unix timestamp (seconds)

        • hiring_team
          Type: array object[] | null · JobHiringTeamMember[] nullable

          Team members assigned to this application's job

          • full_name
            Type: string
            required

            User full name.

          • id
            Type: integer
            required

            User ID.

          • email
            Type: string | null

            User email.

          • role
            Type: string | null

            Role on hiring team (e.g. hiring_manager, recruiter).

        • internal_job_id
          Type: string | null

          Company's internal job identifier

        • job
          Type: object · Job nullable

          Embedded job payload (included when requested via include=job). Use job.url_backoffice to deep-link UI widgets to the job's pipeline view in the recruiter app.

          • company_id
            Type: integer
            required

            ID of the company this job belongs to

          • created_at
            Type: integerFormat: int64
            required

            Unix timestamp (seconds)

          • id
            Type: integer
            required

            Unique identifier

          • is_remote
            Type: boolean
            required

            Whether this is a remote position

          • status
            Type: string
            required

            Job status: open, closed, draft, or archived

          • title
            Type: string
            required

            Public job title shown to candidates

          • updated_at
            Type: integerFormat: int64
            required

            Unix timestamp (seconds)

          • url
            Type: string
            required

            Public URL of the job posting page

          • ai_scoring_criteria
            Type: array object[] · 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
              Type: integer
              required

              Unique identifier of the criterion.

            • position
              Type: integer
              required

              0-based ordinal of the criterion in the job's list.

            • text
              Type: string
              required

              Prompt text describing what to evaluate.

            • weight
              Type: integer
              min:  
              1
              max:  
              10
              required

              Relative importance of this criterion in the total score (1–10).

            • title
              Type: string | null

              Optional short label for the criterion.

          • alias
            Type: string | null

            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.

          • category
            Type: object · IdName nullable

            Job category (e.g. Engineering, Marketing)

            • id
              Type: integer
              required

              Unique identifier.

            • name
              Type: string
              required

              Display name.

          • department
            Type: object · IdName nullable

            Department this job belongs to

            • id
              Type: integer
              required

              Unique identifier.

            • name
              Type: string
              required

              Display name.

          • description
            Type: 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.

          • education_level
            Type: object · IdName nullable

            Required education level

            • id
              Type: integer
              required

              Unique identifier.

            • name
              Type: string
              required

              Display name.

          • employment_type
            Type: object · IdName nullable

            Employment type (e.g. Full-time, Part-time, Contract)

            • id
              Type: integer
              required

              Unique identifier.

            • name
              Type: string
              required

              Display name.

          • experience_level
            Type: object · IdName nullable

            Required experience level (e.g. Entry, Mid, Senior)

            • id
              Type: integer
              required

              Unique identifier.

            • name
              Type: string
              required

              Display name.

          • hiring_team
            Type: array object[] · JobHiringTeamMember[]

            Team members assigned to this job. Embedded via include=hiring_team. Suppressed when view=summary even if the include was requested.

            • full_name
              Type: string
              required

              User full name.

            • id
              Type: integer
              required

              User ID.

            • email
              Type: string | null

              User email.

            • role
              Type: string | null

              Role on hiring team (e.g. hiring_manager, recruiter).

          • hours_per_week_max
            Type: integer | null

            Maximum hours per week

          • hours_per_week_min
            Type: integer | null

            Minimum hours per week

          • indeed_posting_data
            Type: object

            Indeed job board posting metadata. Present only when view=full (default); omitted entirely when view=summary.

            • propertyName
              Type: anything
          • internal_job_id
            Type: string | null

            Company's internal job identifier (e.g. requisition number)

          • internal_title
            Type: string | null

            Internal job title visible only to the hiring team

          • is_satellite
            Type: boolean

            Whether this job is a satellite (child) of a canonical job. Satellite jobs share the candidate pipeline of their parent.

          • location
            Type: object · JobLocation nullable

            Job location details

            • city
              Type: string

              City.

            • country
              Type: string

              Country.

            • full_address
              Type: string

              Full formatted address.

            • postal_code
              Type: string

              Postal code.

            • state
              Type: string

              State or region.

            • street_address
              Type: string

              Street address.

          • parent_job_id
            Type: integer | null

            ID of the canonical (parent) job. Null for canonical jobs. Recruiting operations should target the canonical job.

          • pipeline_stages
            Type: array object[] | null 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
              Type: integer

              Integer numbers.

            • name
              Type: string
          • resume_field_status
            Type: string | nullenum

            Whether resume upload is required, optional, or hidden on the application form

            • required
            • optional
            • hidden
          • salary_currency
            Type: string | null

            Salary currency code (e.g. USD, EUR)

          • salary_max
            Type: number | null

            Maximum salary

          • salary_min
            Type: number | null

            Minimum salary

          • salary_period
            Type: string | nullenum

            Salary period

            • annually
            • monthly
            • daily
            • hourly
          • url_backoffice
            Type: 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.

          • workflow
            Type: object · IdName nullable

            Hiring workflow (pipeline) assigned to this job. Embedded via include=workflow. Suppressed when view=summary even if the include was requested.

            • id
              Type: integer
              required

              Unique identifier.

            • name
              Type: string
              required

              Display name.

          • workflow_id
            Type: integer | null

            ID of the hiring workflow (pipeline) assigned to this job

        • job_alias
          Type: string | null

          Short alias of the job, usable in URLs (e.g. 79SZHfT)

        • last_message_at
          Type: integer | nullFormat: int64

          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.

        • rejected_at
          Type: integer | nullFormat: int64

          Unix timestamp (seconds)

        • rejection_reason
          Type: array object[] | null · IdName[] nullable

          Reasons for rejection. Null if not rejected.

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • stage
          Type: object · IdName nullable

          Current pipeline stage of the application

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • url_backoffice
          Type: stringFormat: 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.

      • candidate
        Type: object · Candidate

        Embedded candidate data (included when requested)

        • company_id
          Type: integer
          required

          ID of the company this candidate belongs to

        • created_at
          Type: integerFormat: int64
          required

          Unix timestamp (seconds)

        • id
          Type: integer
          required

          Unique identifier

        • updated_at
          Type: integerFormat: int64
          required

          Unix timestamp (seconds)

        • alias
          Type: string | null

          Short alphanumeric alias used in profile URLs. Use this to build candidate profile links — https://app.100hires.com/candidate/{alias}. Also accepted as {id} in API requests.

        • applications
          Type: array object[] · CandidateApplicationSummary[]

          Summary of all applications this candidate has across jobs

          • id
            Type: integer
            required

            Application ID.

          • job
            Type: object
            required

            Job summary (id, title, status).

            • id
              Type: integer
              required

              Integer numbers.

            • title
              Type: string
              required
          • stage
            Type: object · IdName nullable
            • id
              Type: integer
              required

              Unique identifier.

            • name
              Type: string
              required

              Display name.

        • days_since_last_message
          Type: integer | null

          Number of whole days since the last message. Computed at request time. Null if no messages exist.

        • emails
          Type: array string[] | null nullable

          List of candidate email addresses

        • first_name
          Type: string | null

          Candidate's first name

        • ip
          Type: string | null

          IP address from which the candidate applied

        • last_message_at
          Type: integer | nullFormat: int64

          Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.

        • last_name
          Type: string | null

          Candidate's last name

        • origin
          Type: object · IdName nullable

          Where the candidate originally came from (e.g. job board name)

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • phones
          Type: array string[] | null nullable

          List of candidate phone numbers

        • profile
          Type: array object[] · ProfileAnswer[]

          Candidate profile field answers (application form responses). Present only when view=full (default); omitted entirely when view=summary to keep list responses inside the agent context budget — a single candidate can carry dozens of free-form answers.

          • question_id
            Type: integer
            required

            Question ID.

          • question_text
            Type: string
            required

            Question label.

          • value
            required

            Answer value (string, array, or null).

        • source
          Type: object · IdName nullable

          How the candidate was sourced (e.g. LinkedIn, Referral)

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • url_backoffice
          Type: stringFormat: uri

          Absolute backoffice URL of the candidate in the 100Hires recruiter app. Use to render deep-links in agent UIs.

      • job
        Type: object · Job

        Embedded job data (included when requested)

        • company_id
          Type: integer
          required

          ID of the company this job belongs to

        • created_at
          Type: integerFormat: int64
          required

          Unix timestamp (seconds)

        • id
          Type: integer
          required

          Unique identifier

        • is_remote
          Type: boolean
          required

          Whether this is a remote position

        • status
          Type: string
          required

          Job status: open, closed, draft, or archived

        • title
          Type: string
          required

          Public job title shown to candidates

        • updated_at
          Type: integerFormat: int64
          required

          Unix timestamp (seconds)

        • url
          Type: string
          required

          Public URL of the job posting page

        • ai_scoring_criteria
          Type: array object[] · 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
            Type: integer
            required

            Unique identifier of the criterion.

          • position
            Type: integer
            required

            0-based ordinal of the criterion in the job's list.

          • text
            Type: string
            required

            Prompt text describing what to evaluate.

          • weight
            Type: integer
            min:  
            1
            max:  
            10
            required

            Relative importance of this criterion in the total score (1–10).

          • title
            Type: string | null

            Optional short label for the criterion.

        • alias
          Type: string | null

          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.

        • category
          Type: object · IdName nullable

          Job category (e.g. Engineering, Marketing)

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • department
          Type: object · IdName nullable

          Department this job belongs to

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • description
          Type: 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.

        • education_level
          Type: object · IdName nullable

          Required education level

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • employment_type
          Type: object · IdName nullable

          Employment type (e.g. Full-time, Part-time, Contract)

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • experience_level
          Type: object · IdName nullable

          Required experience level (e.g. Entry, Mid, Senior)

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • hiring_team
          Type: array object[] · JobHiringTeamMember[]

          Team members assigned to this job. Embedded via include=hiring_team. Suppressed when view=summary even if the include was requested.

          • full_name
            Type: string
            required

            User full name.

          • id
            Type: integer
            required

            User ID.

          • email
            Type: string | null

            User email.

          • role
            Type: string | null

            Role on hiring team (e.g. hiring_manager, recruiter).

        • hours_per_week_max
          Type: integer | null

          Maximum hours per week

        • hours_per_week_min
          Type: integer | null

          Minimum hours per week

        • indeed_posting_data
          Type: object

          Indeed job board posting metadata. Present only when view=full (default); omitted entirely when view=summary.

          • propertyName
            Type: anything
        • internal_job_id
          Type: string | null

          Company's internal job identifier (e.g. requisition number)

        • internal_title
          Type: string | null

          Internal job title visible only to the hiring team

        • is_satellite
          Type: boolean

          Whether this job is a satellite (child) of a canonical job. Satellite jobs share the candidate pipeline of their parent.

        • location
          Type: object · JobLocation nullable

          Job location details

          • city
            Type: string

            City.

          • country
            Type: string

            Country.

          • full_address
            Type: string

            Full formatted address.

          • postal_code
            Type: string

            Postal code.

          • state
            Type: string

            State or region.

          • street_address
            Type: string

            Street address.

        • parent_job_id
          Type: integer | null

          ID of the canonical (parent) job. Null for canonical jobs. Recruiting operations should target the canonical job.

        • pipeline_stages
          Type: array object[] | null 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
            Type: integer

            Integer numbers.

          • name
            Type: string
        • resume_field_status
          Type: string | nullenum

          Whether resume upload is required, optional, or hidden on the application form

          • required
          • optional
          • hidden
        • salary_currency
          Type: string | null

          Salary currency code (e.g. USD, EUR)

        • salary_max
          Type: number | null

          Maximum salary

        • salary_min
          Type: number | null

          Minimum salary

        • salary_period
          Type: string | nullenum

          Salary period

          • annually
          • monthly
          • daily
          • hourly
        • url_backoffice
          Type: 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.

        • workflow
          Type: object · IdName nullable

          Hiring workflow (pipeline) assigned to this job. Embedded via include=workflow. Suppressed when view=summary even if the include was requested.

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • workflow_id
          Type: integer | null

          ID of the hiring workflow (pipeline) assigned to this job

      • location
        Type: string | null

        Physical location of the interview

      • meeting_url
        Type: string | null

        Video conferencing or meeting URL

      • stage
        Type: object · IdName nullable

        Pipeline stage at the time the interview was scheduled

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • url_backoffice
        Type: stringFormat: uri

        Absolute backoffice URL of the candidate's interviews tab in the 100Hires recruiter app where this interview appears. Use to render deep-links in agent UIs.

    • pagination
      Type: object · Pagination
      required
      • page
        Type: integer
        required

        Current page number.

      • page_count
        Type: integer
        required

        Total number of pages.

      • page_size
        Type: integer
        required

        Items per page.

      • total_count
        Type: integer
        required

        Total number of items.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/candidates/{id}/interviews
curl 'https://api.100hires.com/v2/candidates/{id}/interviews' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "interviews": [
    {
      "id": 7001,
      "application_id": 501,
      "job_id": 123,
      "candidate_id": 12345,
      "start_time": 1711195200,
      "end_time": 1711198800,
      "status": "scheduled",
      "interviewers": [
        {
          "user_id": 42,
          "name": "Jane Smith",
          "email": "jane.smith@example.com"
        }
      ],
      "location": null,
      "meeting_url": "https://meet.google.com/abc-defg-hij",
      "stage": {
        "id": 10,
        "name": "Interview"
      },
      "created_at": 1711036800,
      "updated_at": 1711036800,
      "last_message_at": null,
      "days_since_last_message": null
    }
  ],
  "pagination": {
    "page_size": 20,
    "page_count": 1,
    "page": 1,
    "total_count": 1
  }
}

Create interview

Schedules a new interview for an application. Creates a session if none exists for the given date. Location string is resolved to an existing location record or created automatically.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Query Parameters
  • include
    Type: string

    Comma-separated list of related resources to include. Supported: candidate, application, job.

Body
required
application/json
  • end_time
    Type: integerFormat: int64
    required

    Unix timestamp (seconds, must be greater than start_time)

  • interviewer_ids
    Type: array integer[]
    required

    List of user IDs who will conduct the interview

  • start_time
    Type: integerFormat: int64
    required

    Unix timestamp (seconds)

  • location
    Type: string
    max length:  
    255

    Location string; resolved to existing record or created automatically

Responses
  • Created interview

    Type: object
    • application_id
      Type: integer
      required

      ID of the related application

    • candidate_id
      Type: integer
      required

      ID of the related candidate

    • created_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • end_time
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • id
      Type: integer
      required

      Unique identifier

    • interviewers
      Type: array object[]
      required

      List of interviewers participating in this interview

      • email
        Type: string
      • name
        Type: string
      • user_id
        Type: integer

        Integer numbers.

    • job_id
      Type: integer
      required

      ID of the related job

    • start_time
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • status
      Type: stringenum
      required

      Interview status

      • scheduled
      • completed
    • updated_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • application
      Type: object · Application

      Embedded application data (included when requested)

      • candidate_id
        Type: integer
        required

        ID of the candidate

      • company_id
        Type: integer
        required

        ID of the company

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • id
        Type: integer
        required

        Unique identifier

      • is_disqualified
        Type: boolean
        required

        Whether the candidate is disqualified for this application

      • job_id
        Type: integer
        required

        ID of the job

      • status
        Type: stringenum
        required

        Application status. Changes via hire/reject/unreject actions.

        • active
        • hired
        • rejected
      • updated_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • ai_recommendation
        Type: string | null

        AI-generated recommendation label (e.g. Strong, Good, Weak)

      • ai_score
        Type: integer | null

        AI-generated candidate fit score (0-100)

      • ai_scoring_updated_at
        Type: integer | nullFormat: int64

        Unix timestamp (seconds) of the latest completed AI scoring result

      • candidate
        Type: object · ApplicationCandidate nullable

        Embedded candidate data (included when requested via include=candidate)

        • company_id
          Type: integer
          required

          ID of the company this candidate belongs to

        • created_at
          Type: integerFormat: int64
          required

          Unix timestamp (seconds)

        • id
          Type: integer
          required

          Unique identifier

        • profile
          Type: array object[] · ProfileAnswer[]
          required

          Candidate profile field answers

          • question_id
            Type: integer
            required

            Question ID.

          • question_text
            Type: string
            required

            Question label.

          • value
            required

            Answer value (string, array, or null).

        • updated_at
          Type: integerFormat: int64
          required

          Unix timestamp (seconds)

        • days_since_last_message
          Type: integer | null

          Number of whole days since the last message. Computed at request time. Null if no messages exist.

        • emails
          Type: array string[] | null nullable

          List of candidate email addresses

        • first_name
          Type: string | null

          Candidate's first name

        • ip
          Type: string | null

          IP address from which the candidate applied

        • last_message_at
          Type: integer | nullFormat: int64

          Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.

        • last_name
          Type: string | null

          Candidate's last name

        • origin
          Type: object · IdName nullable

          Where the candidate originally came from

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • phones
          Type: array string[] | null nullable

          List of candidate phone numbers

        • source
          Type: object · IdName nullable

          How the candidate was sourced

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

      • custom_fields
        Type: object nullable

        Custom field values as key-value pairs

        • propertyName
          Type: anything
      • cv
        nullable

        Application CV. Returns standard attachment metadata + download URL. When ?include=cv.text is requested, a text field with parsed plain-text content is added.

        • file
          Type: object · AttachmentFile
          required
          • file_ext
            Type: string
            required

            File extension.

          • file_type
            Type: string
            required

            File type category.

          • is_image
            Type: boolean nullable
            required

            Whether the file is an image.

          • orig_file_name
            Type: string
            required

            Original file name.

          • readable_size
            Type: string
            required

            Human-readable file size.

        • relative_time
          Type: string
          required

          Human-readable time since upload (e.g. "2 days ago").

        • url
          Type: stringFormat: uri nullable
          required

          Absolute download URL (e.g. https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit with Authorization: Bearer <API_KEY>.

        • uuid
          Type: stringFormat: uuid
          required

          Unique attachment identifier. Stable across API calls; use in referencing endpoints.

        • text
          Type: 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.

      • days_since_last_message
        Type: integer | null

        Number of whole days since the last message. Computed at request time. Null if no messages exist.

      • hired_at
        Type: integer | nullFormat: int64

        Unix timestamp (seconds)

      • hiring_team
        Type: array object[] | null · JobHiringTeamMember[] nullable

        Team members assigned to this application's job

        • full_name
          Type: string
          required

          User full name.

        • id
          Type: integer
          required

          User ID.

        • email
          Type: string | null

          User email.

        • role
          Type: string | null

          Role on hiring team (e.g. hiring_manager, recruiter).

      • internal_job_id
        Type: string | null

        Company's internal job identifier

      • job
        Type: object · Job nullable

        Embedded job payload (included when requested via include=job). Use job.url_backoffice to deep-link UI widgets to the job's pipeline view in the recruiter app.

        • company_id
          Type: integer
          required

          ID of the company this job belongs to

        • created_at
          Type: integerFormat: int64
          required

          Unix timestamp (seconds)

        • id
          Type: integer
          required

          Unique identifier

        • is_remote
          Type: boolean
          required

          Whether this is a remote position

        • status
          Type: string
          required

          Job status: open, closed, draft, or archived

        • title
          Type: string
          required

          Public job title shown to candidates

        • updated_at
          Type: integerFormat: int64
          required

          Unix timestamp (seconds)

        • url
          Type: string
          required

          Public URL of the job posting page

        • ai_scoring_criteria
          Type: array object[] · 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
            Type: integer
            required

            Unique identifier of the criterion.

          • position
            Type: integer
            required

            0-based ordinal of the criterion in the job's list.

          • text
            Type: string
            required

            Prompt text describing what to evaluate.

          • weight
            Type: integer
            min:  
            1
            max:  
            10
            required

            Relative importance of this criterion in the total score (1–10).

          • title
            Type: string | null

            Optional short label for the criterion.

        • alias
          Type: string | null

          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.

        • category
          Type: object · IdName nullable

          Job category (e.g. Engineering, Marketing)

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • department
          Type: object · IdName nullable

          Department this job belongs to

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • description
          Type: 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.

        • education_level
          Type: object · IdName nullable

          Required education level

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • employment_type
          Type: object · IdName nullable

          Employment type (e.g. Full-time, Part-time, Contract)

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • experience_level
          Type: object · IdName nullable

          Required experience level (e.g. Entry, Mid, Senior)

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • hiring_team
          Type: array object[] · JobHiringTeamMember[]

          Team members assigned to this job. Embedded via include=hiring_team. Suppressed when view=summary even if the include was requested.

          • full_name
            Type: string
            required

            User full name.

          • id
            Type: integer
            required

            User ID.

          • email
            Type: string | null

            User email.

          • role
            Type: string | null

            Role on hiring team (e.g. hiring_manager, recruiter).

        • hours_per_week_max
          Type: integer | null

          Maximum hours per week

        • hours_per_week_min
          Type: integer | null

          Minimum hours per week

        • indeed_posting_data
          Type: object

          Indeed job board posting metadata. Present only when view=full (default); omitted entirely when view=summary.

          • propertyName
            Type: anything
        • internal_job_id
          Type: string | null

          Company's internal job identifier (e.g. requisition number)

        • internal_title
          Type: string | null

          Internal job title visible only to the hiring team

        • is_satellite
          Type: boolean

          Whether this job is a satellite (child) of a canonical job. Satellite jobs share the candidate pipeline of their parent.

        • location
          Type: object · JobLocation nullable

          Job location details

          • city
            Type: string

            City.

          • country
            Type: string

            Country.

          • full_address
            Type: string

            Full formatted address.

          • postal_code
            Type: string

            Postal code.

          • state
            Type: string

            State or region.

          • street_address
            Type: string

            Street address.

        • parent_job_id
          Type: integer | null

          ID of the canonical (parent) job. Null for canonical jobs. Recruiting operations should target the canonical job.

        • pipeline_stages
          Type: array object[] | null 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
            Type: integer

            Integer numbers.

          • name
            Type: string
        • resume_field_status
          Type: string | nullenum

          Whether resume upload is required, optional, or hidden on the application form

          • required
          • optional
          • hidden
        • salary_currency
          Type: string | null

          Salary currency code (e.g. USD, EUR)

        • salary_max
          Type: number | null

          Maximum salary

        • salary_min
          Type: number | null

          Minimum salary

        • salary_period
          Type: string | nullenum

          Salary period

          • annually
          • monthly
          • daily
          • hourly
        • url_backoffice
          Type: 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.

        • workflow
          Type: object · IdName nullable

          Hiring workflow (pipeline) assigned to this job. Embedded via include=workflow. Suppressed when view=summary even if the include was requested.

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • workflow_id
          Type: integer | null

          ID of the hiring workflow (pipeline) assigned to this job

      • job_alias
        Type: string | null

        Short alias of the job, usable in URLs (e.g. 79SZHfT)

      • last_message_at
        Type: integer | nullFormat: int64

        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.

      • rejected_at
        Type: integer | nullFormat: int64

        Unix timestamp (seconds)

      • rejection_reason
        Type: array object[] | null · IdName[] nullable

        Reasons for rejection. Null if not rejected.

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • stage
        Type: object · IdName nullable

        Current pipeline stage of the application

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • url_backoffice
        Type: stringFormat: 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.

    • candidate
      Type: object · Candidate

      Embedded candidate data (included when requested)

      • company_id
        Type: integer
        required

        ID of the company this candidate belongs to

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • id
        Type: integer
        required

        Unique identifier

      • updated_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • alias
        Type: string | null

        Short alphanumeric alias used in profile URLs. Use this to build candidate profile links — https://app.100hires.com/candidate/{alias}. Also accepted as {id} in API requests.

      • applications
        Type: array object[] · CandidateApplicationSummary[]

        Summary of all applications this candidate has across jobs

        • id
          Type: integer
          required

          Application ID.

        • job
          Type: object
          required

          Job summary (id, title, status).

          • id
            Type: integer
            required

            Integer numbers.

          • title
            Type: string
            required
        • stage
          Type: object · IdName nullable
          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

      • days_since_last_message
        Type: integer | null

        Number of whole days since the last message. Computed at request time. Null if no messages exist.

      • emails
        Type: array string[] | null nullable

        List of candidate email addresses

      • first_name
        Type: string | null

        Candidate's first name

      • ip
        Type: string | null

        IP address from which the candidate applied

      • last_message_at
        Type: integer | nullFormat: int64

        Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.

      • last_name
        Type: string | null

        Candidate's last name

      • origin
        Type: object · IdName nullable

        Where the candidate originally came from (e.g. job board name)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • phones
        Type: array string[] | null nullable

        List of candidate phone numbers

      • profile
        Type: array object[] · ProfileAnswer[]

        Candidate profile field answers (application form responses). Present only when view=full (default); omitted entirely when view=summary to keep list responses inside the agent context budget — a single candidate can carry dozens of free-form answers.

        • question_id
          Type: integer
          required

          Question ID.

        • question_text
          Type: string
          required

          Question label.

        • value
          required

          Answer value (string, array, or null).

      • source
        Type: object · IdName nullable

        How the candidate was sourced (e.g. LinkedIn, Referral)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • url_backoffice
        Type: stringFormat: uri

        Absolute backoffice URL of the candidate in the 100Hires recruiter app. Use to render deep-links in agent UIs.

    • job
      Type: object · Job

      Embedded job data (included when requested)

      • company_id
        Type: integer
        required

        ID of the company this job belongs to

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • id
        Type: integer
        required

        Unique identifier

      • is_remote
        Type: boolean
        required

        Whether this is a remote position

      • status
        Type: string
        required

        Job status: open, closed, draft, or archived

      • title
        Type: string
        required

        Public job title shown to candidates

      • updated_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • url
        Type: string
        required

        Public URL of the job posting page

      • ai_scoring_criteria
        Type: array object[] · 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
          Type: integer
          required

          Unique identifier of the criterion.

        • position
          Type: integer
          required

          0-based ordinal of the criterion in the job's list.

        • text
          Type: string
          required

          Prompt text describing what to evaluate.

        • weight
          Type: integer
          min:  
          1
          max:  
          10
          required

          Relative importance of this criterion in the total score (1–10).

        • title
          Type: string | null

          Optional short label for the criterion.

      • alias
        Type: string | null

        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.

      • category
        Type: object · IdName nullable

        Job category (e.g. Engineering, Marketing)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • department
        Type: object · IdName nullable

        Department this job belongs to

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • description
        Type: 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.

      • education_level
        Type: object · IdName nullable

        Required education level

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • employment_type
        Type: object · IdName nullable

        Employment type (e.g. Full-time, Part-time, Contract)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • experience_level
        Type: object · IdName nullable

        Required experience level (e.g. Entry, Mid, Senior)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • hiring_team
        Type: array object[] · JobHiringTeamMember[]

        Team members assigned to this job. Embedded via include=hiring_team. Suppressed when view=summary even if the include was requested.

        • full_name
          Type: string
          required

          User full name.

        • id
          Type: integer
          required

          User ID.

        • email
          Type: string | null

          User email.

        • role
          Type: string | null

          Role on hiring team (e.g. hiring_manager, recruiter).

      • hours_per_week_max
        Type: integer | null

        Maximum hours per week

      • hours_per_week_min
        Type: integer | null

        Minimum hours per week

      • indeed_posting_data
        Type: object

        Indeed job board posting metadata. Present only when view=full (default); omitted entirely when view=summary.

        • propertyName
          Type: anything
      • internal_job_id
        Type: string | null

        Company's internal job identifier (e.g. requisition number)

      • internal_title
        Type: string | null

        Internal job title visible only to the hiring team

      • is_satellite
        Type: boolean

        Whether this job is a satellite (child) of a canonical job. Satellite jobs share the candidate pipeline of their parent.

      • location
        Type: object · JobLocation nullable

        Job location details

        • city
          Type: string

          City.

        • country
          Type: string

          Country.

        • full_address
          Type: string

          Full formatted address.

        • postal_code
          Type: string

          Postal code.

        • state
          Type: string

          State or region.

        • street_address
          Type: string

          Street address.

      • parent_job_id
        Type: integer | null

        ID of the canonical (parent) job. Null for canonical jobs. Recruiting operations should target the canonical job.

      • pipeline_stages
        Type: array object[] | null 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
          Type: integer

          Integer numbers.

        • name
          Type: string
      • resume_field_status
        Type: string | nullenum

        Whether resume upload is required, optional, or hidden on the application form

        • required
        • optional
        • hidden
      • salary_currency
        Type: string | null

        Salary currency code (e.g. USD, EUR)

      • salary_max
        Type: number | null

        Maximum salary

      • salary_min
        Type: number | null

        Minimum salary

      • salary_period
        Type: string | nullenum

        Salary period

        • annually
        • monthly
        • daily
        • hourly
      • url_backoffice
        Type: 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.

      • workflow
        Type: object · IdName nullable

        Hiring workflow (pipeline) assigned to this job. Embedded via include=workflow. Suppressed when view=summary even if the include was requested.

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • workflow_id
        Type: integer | null

        ID of the hiring workflow (pipeline) assigned to this job

    • location
      Type: string | null

      Physical location of the interview

    • meeting_url
      Type: string | null

      Video conferencing or meeting URL

    • stage
      Type: object · IdName nullable

      Pipeline stage at the time the interview was scheduled

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • url_backoffice
      Type: stringFormat: uri

      Absolute backoffice URL of the candidate's interviews tab in the 100Hires recruiter app where this interview appears. Use to render deep-links in agent UIs.

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/applications/{id}/interviews
curl https://api.100hires.com/v2/applications/1/interviews \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "start_time": 1,
  "end_time": 1,
  "interviewer_ids": [
    1
  ],
  "location": ""
}'
{
  "id": 501,
  "application_id": 100,
  "job_id": 10,
  "candidate_id": 12345,
  "start_time": 1711180800,
  "end_time": 1711184400,
  "status": "scheduled",
  "interviewers": [
    {
      "user_id": 5,
      "name": "Sarah Connor",
      "email": "sarah@example.com"
    }
  ],
  "location": "Conference Room A",
  "meeting_url": "https://zoom.us/j/123456789",
  "stage": {
    "id": 3,
    "name": "Technical interview"
  },
  "created_at": 1711036800,
  "updated_at": 1711036800
}

List interviews

Returns a paginated list of interviews. Supports filtering by job, application, candidate, date, and timestamp for incremental sync.

Query Parameters
  • company_id
    Type: integer

    Optional target company ID. Since each API key is already bound to one company, this is only needed when the key owner has access to multiple companies.

  • job_id
    Type: integer

    Filter interviews by job ID.

  • application_id
    Type: integer

    Filter interviews by application ID.

  • candidate_id
    Type: integer

    Filter interviews by candidate ID.

  • interviewer_user_id
    Type: integer

    Filter interviews by interviewer user ID. Can be combined with other interview list filters.

  • date
    Type: stringFormat: date

    Filter by interview date (YYYY-MM-DD, UTC).

  • created_after

    Return only interviews created at or after this time. Accepts a Unix timestamp in seconds (not milliseconds) or an ISO-8601 string with timezone offset (e.g. 2026-05-11T00:00:00Z, 2026-05-11T00:00:00.123+03:00). Fractional seconds are accepted but truncated to whole seconds.

    • Type: integer
      min:  
      0

      Integer numbers.

  • updated_after

    Return only interviews updated at or after this time. Accepts a Unix timestamp in seconds (not milliseconds) or an ISO-8601 string with timezone offset (e.g. 2026-05-11T00:00:00Z, 2026-05-11T00:00:00.123+03:00). Fractional seconds are accepted but truncated to whole seconds.

    • Type: integer
      min:  
      0

      Integer numbers.

  • include
    Type: string

    Comma-separated list of related resources to include. Supported: candidate, application, job.

  • page
    Type: integer
    min:  
    1

    Page number (1-based). Defaults to 1.

  • size
    Type: integer
    min:  
    1
    max:  
    100

    Number of items per page (1–100). Defaults to 20.

  • view
    Type: stringenum

    Response shape selector for list endpoints. full (default) returns every field — backward-compatible with pre-existing clients. summary returns a thinned payload designed for agent-friendly list browsing: heavy fields (description HTML, embedded profile answers, full message bodies, embedded relations, etc.) are omitted or replaced with *_preview truncations. Use summary when paging through large result sets and fetch a single record with the corresponding GET /{resource}/{id} endpoint when full data is needed.

    • full
    • summary
Responses
  • Interview list

    Type: object
    • interviews
      Type: array object[] · Interview[]
      required

      Array of interviews.

      • application_id
        Type: integer
        required

        ID of the related application

      • candidate_id
        Type: integer
        required

        ID of the related candidate

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • end_time
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • id
        Type: integer
        required

        Unique identifier

      • interviewers
        Type: array object[]
        required

        List of interviewers participating in this interview

        • email
          Type: string
        • name
          Type: string
        • user_id
          Type: integer

          Integer numbers.

      • job_id
        Type: integer
        required

        ID of the related job

      • start_time
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • status
        Type: stringenum
        required

        Interview status

        • scheduled
        • completed
      • updated_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • application
        Type: object · Application

        Embedded application data (included when requested)

        • candidate_id
          Type: integer
          required

          ID of the candidate

        • company_id
          Type: integer
          required

          ID of the company

        • created_at
          Type: integerFormat: int64
          required

          Unix timestamp (seconds)

        • id
          Type: integer
          required

          Unique identifier

        • is_disqualified
          Type: boolean
          required

          Whether the candidate is disqualified for this application

        • job_id
          Type: integer
          required

          ID of the job

        • status
          Type: stringenum
          required

          Application status. Changes via hire/reject/unreject actions.

          • active
          • hired
          • rejected
        • updated_at
          Type: integerFormat: int64
          required

          Unix timestamp (seconds)

        • ai_recommendation
          Type: string | null

          AI-generated recommendation label (e.g. Strong, Good, Weak)

        • ai_score
          Type: integer | null

          AI-generated candidate fit score (0-100)

        • ai_scoring_updated_at
          Type: integer | nullFormat: int64

          Unix timestamp (seconds) of the latest completed AI scoring result

        • candidate
          Type: object · ApplicationCandidate nullable

          Embedded candidate data (included when requested via include=candidate)

          • company_id
            Type: integer
            required

            ID of the company this candidate belongs to

          • created_at
            Type: integerFormat: int64
            required

            Unix timestamp (seconds)

          • id
            Type: integer
            required

            Unique identifier

          • profile
            Type: array object[] · ProfileAnswer[]
            required

            Candidate profile field answers

            • question_id
              Type: integer
              required

              Question ID.

            • question_text
              Type: string
              required

              Question label.

            • value
              required

              Answer value (string, array, or null).

          • updated_at
            Type: integerFormat: int64
            required

            Unix timestamp (seconds)

          • days_since_last_message
            Type: integer | null

            Number of whole days since the last message. Computed at request time. Null if no messages exist.

          • emails
            Type: array string[] | null nullable

            List of candidate email addresses

          • first_name
            Type: string | null

            Candidate's first name

          • ip
            Type: string | null

            IP address from which the candidate applied

          • last_message_at
            Type: integer | nullFormat: int64

            Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.

          • last_name
            Type: string | null

            Candidate's last name

          • origin
            Type: object · IdName nullable

            Where the candidate originally came from

            • id
              Type: integer
              required

              Unique identifier.

            • name
              Type: string
              required

              Display name.

          • phones
            Type: array string[] | null nullable

            List of candidate phone numbers

          • source
            Type: object · IdName nullable

            How the candidate was sourced

            • id
              Type: integer
              required

              Unique identifier.

            • name
              Type: string
              required

              Display name.

        • custom_fields
          Type: object nullable

          Custom field values as key-value pairs

          • propertyName
            Type: anything
        • cv
          nullable

          Application CV. Returns standard attachment metadata + download URL. When ?include=cv.text is requested, a text field with parsed plain-text content is added.

          • file
            Type: object · AttachmentFile
            required
            • file_ext
              Type: string
              required

              File extension.

            • file_type
              Type: string
              required

              File type category.

            • is_image
              Type: boolean nullable
              required

              Whether the file is an image.

            • orig_file_name
              Type: string
              required

              Original file name.

            • readable_size
              Type: string
              required

              Human-readable file size.

          • relative_time
            Type: string
            required

            Human-readable time since upload (e.g. "2 days ago").

          • url
            Type: stringFormat: uri nullable
            required

            Absolute download URL (e.g. https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit with Authorization: Bearer <API_KEY>.

          • uuid
            Type: stringFormat: uuid
            required

            Unique attachment identifier. Stable across API calls; use in referencing endpoints.

          • text
            Type: 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.

        • days_since_last_message
          Type: integer | null

          Number of whole days since the last message. Computed at request time. Null if no messages exist.

        • hired_at
          Type: integer | nullFormat: int64

          Unix timestamp (seconds)

        • hiring_team
          Type: array object[] | null · JobHiringTeamMember[] nullable

          Team members assigned to this application's job

          • full_name
            Type: string
            required

            User full name.

          • id
            Type: integer
            required

            User ID.

          • email
            Type: string | null

            User email.

          • role
            Type: string | null

            Role on hiring team (e.g. hiring_manager, recruiter).

        • internal_job_id
          Type: string | null

          Company's internal job identifier

        • job
          Type: object · Job nullable

          Embedded job payload (included when requested via include=job). Use job.url_backoffice to deep-link UI widgets to the job's pipeline view in the recruiter app.

          • company_id
            Type: integer
            required

            ID of the company this job belongs to

          • created_at
            Type: integerFormat: int64
            required

            Unix timestamp (seconds)

          • id
            Type: integer
            required

            Unique identifier

          • is_remote
            Type: boolean
            required

            Whether this is a remote position

          • status
            Type: string
            required

            Job status: open, closed, draft, or archived

          • title
            Type: string
            required

            Public job title shown to candidates

          • updated_at
            Type: integerFormat: int64
            required

            Unix timestamp (seconds)

          • url
            Type: string
            required

            Public URL of the job posting page

          • ai_scoring_criteria
            Type: array object[] · 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
              Type: integer
              required

              Unique identifier of the criterion.

            • position
              Type: integer
              required

              0-based ordinal of the criterion in the job's list.

            • text
              Type: string
              required

              Prompt text describing what to evaluate.

            • weight
              Type: integer
              min:  
              1
              max:  
              10
              required

              Relative importance of this criterion in the total score (1–10).

            • title
              Type: string | null

              Optional short label for the criterion.

          • alias
            Type: string | null

            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.

          • category
            Type: object · IdName nullable

            Job category (e.g. Engineering, Marketing)

            • id
              Type: integer
              required

              Unique identifier.

            • name
              Type: string
              required

              Display name.

          • department
            Type: object · IdName nullable

            Department this job belongs to

            • id
              Type: integer
              required

              Unique identifier.

            • name
              Type: string
              required

              Display name.

          • description
            Type: 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.

          • education_level
            Type: object · IdName nullable

            Required education level

            • id
              Type: integer
              required

              Unique identifier.

            • name
              Type: string
              required

              Display name.

          • employment_type
            Type: object · IdName nullable

            Employment type (e.g. Full-time, Part-time, Contract)

            • id
              Type: integer
              required

              Unique identifier.

            • name
              Type: string
              required

              Display name.

          • experience_level
            Type: object · IdName nullable

            Required experience level (e.g. Entry, Mid, Senior)

            • id
              Type: integer
              required

              Unique identifier.

            • name
              Type: string
              required

              Display name.

          • hiring_team
            Type: array object[] · JobHiringTeamMember[]

            Team members assigned to this job. Embedded via include=hiring_team. Suppressed when view=summary even if the include was requested.

            • full_name
              Type: string
              required

              User full name.

            • id
              Type: integer
              required

              User ID.

            • email
              Type: string | null

              User email.

            • role
              Type: string | null

              Role on hiring team (e.g. hiring_manager, recruiter).

          • hours_per_week_max
            Type: integer | null

            Maximum hours per week

          • hours_per_week_min
            Type: integer | null

            Minimum hours per week

          • indeed_posting_data
            Type: object

            Indeed job board posting metadata. Present only when view=full (default); omitted entirely when view=summary.

            • propertyName
              Type: anything
          • internal_job_id
            Type: string | null

            Company's internal job identifier (e.g. requisition number)

          • internal_title
            Type: string | null

            Internal job title visible only to the hiring team

          • is_satellite
            Type: boolean

            Whether this job is a satellite (child) of a canonical job. Satellite jobs share the candidate pipeline of their parent.

          • location
            Type: object · JobLocation nullable

            Job location details

            • city
              Type: string

              City.

            • country
              Type: string

              Country.

            • full_address
              Type: string

              Full formatted address.

            • postal_code
              Type: string

              Postal code.

            • state
              Type: string

              State or region.

            • street_address
              Type: string

              Street address.

          • parent_job_id
            Type: integer | null

            ID of the canonical (parent) job. Null for canonical jobs. Recruiting operations should target the canonical job.

          • pipeline_stages
            Type: array object[] | null 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
              Type: integer

              Integer numbers.

            • name
              Type: string
          • resume_field_status
            Type: string | nullenum

            Whether resume upload is required, optional, or hidden on the application form

            • required
            • optional
            • hidden
          • salary_currency
            Type: string | null

            Salary currency code (e.g. USD, EUR)

          • salary_max
            Type: number | null

            Maximum salary

          • salary_min
            Type: number | null

            Minimum salary

          • salary_period
            Type: string | nullenum

            Salary period

            • annually
            • monthly
            • daily
            • hourly
          • url_backoffice
            Type: 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.

          • workflow
            Type: object · IdName nullable

            Hiring workflow (pipeline) assigned to this job. Embedded via include=workflow. Suppressed when view=summary even if the include was requested.

            • id
              Type: integer
              required

              Unique identifier.

            • name
              Type: string
              required

              Display name.

          • workflow_id
            Type: integer | null

            ID of the hiring workflow (pipeline) assigned to this job

        • job_alias
          Type: string | null

          Short alias of the job, usable in URLs (e.g. 79SZHfT)

        • last_message_at
          Type: integer | nullFormat: int64

          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.

        • rejected_at
          Type: integer | nullFormat: int64

          Unix timestamp (seconds)

        • rejection_reason
          Type: array object[] | null · IdName[] nullable

          Reasons for rejection. Null if not rejected.

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • stage
          Type: object · IdName nullable

          Current pipeline stage of the application

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • url_backoffice
          Type: stringFormat: 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.

      • candidate
        Type: object · Candidate

        Embedded candidate data (included when requested)

        • company_id
          Type: integer
          required

          ID of the company this candidate belongs to

        • created_at
          Type: integerFormat: int64
          required

          Unix timestamp (seconds)

        • id
          Type: integer
          required

          Unique identifier

        • updated_at
          Type: integerFormat: int64
          required

          Unix timestamp (seconds)

        • alias
          Type: string | null

          Short alphanumeric alias used in profile URLs. Use this to build candidate profile links — https://app.100hires.com/candidate/{alias}. Also accepted as {id} in API requests.

        • applications
          Type: array object[] · CandidateApplicationSummary[]

          Summary of all applications this candidate has across jobs

          • id
            Type: integer
            required

            Application ID.

          • job
            Type: object
            required

            Job summary (id, title, status).

            • id
              Type: integer
              required

              Integer numbers.

            • title
              Type: string
              required
          • stage
            Type: object · IdName nullable
            • id
              Type: integer
              required

              Unique identifier.

            • name
              Type: string
              required

              Display name.

        • days_since_last_message
          Type: integer | null

          Number of whole days since the last message. Computed at request time. Null if no messages exist.

        • emails
          Type: array string[] | null nullable

          List of candidate email addresses

        • first_name
          Type: string | null

          Candidate's first name

        • ip
          Type: string | null

          IP address from which the candidate applied

        • last_message_at
          Type: integer | nullFormat: int64

          Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.

        • last_name
          Type: string | null

          Candidate's last name

        • origin
          Type: object · IdName nullable

          Where the candidate originally came from (e.g. job board name)

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • phones
          Type: array string[] | null nullable

          List of candidate phone numbers

        • profile
          Type: array object[] · ProfileAnswer[]

          Candidate profile field answers (application form responses). Present only when view=full (default); omitted entirely when view=summary to keep list responses inside the agent context budget — a single candidate can carry dozens of free-form answers.

          • question_id
            Type: integer
            required

            Question ID.

          • question_text
            Type: string
            required

            Question label.

          • value
            required

            Answer value (string, array, or null).

        • source
          Type: object · IdName nullable

          How the candidate was sourced (e.g. LinkedIn, Referral)

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • url_backoffice
          Type: stringFormat: uri

          Absolute backoffice URL of the candidate in the 100Hires recruiter app. Use to render deep-links in agent UIs.

      • job
        Type: object · Job

        Embedded job data (included when requested)

        • company_id
          Type: integer
          required

          ID of the company this job belongs to

        • created_at
          Type: integerFormat: int64
          required

          Unix timestamp (seconds)

        • id
          Type: integer
          required

          Unique identifier

        • is_remote
          Type: boolean
          required

          Whether this is a remote position

        • status
          Type: string
          required

          Job status: open, closed, draft, or archived

        • title
          Type: string
          required

          Public job title shown to candidates

        • updated_at
          Type: integerFormat: int64
          required

          Unix timestamp (seconds)

        • url
          Type: string
          required

          Public URL of the job posting page

        • ai_scoring_criteria
          Type: array object[] · 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
            Type: integer
            required

            Unique identifier of the criterion.

          • position
            Type: integer
            required

            0-based ordinal of the criterion in the job's list.

          • text
            Type: string
            required

            Prompt text describing what to evaluate.

          • weight
            Type: integer
            min:  
            1
            max:  
            10
            required

            Relative importance of this criterion in the total score (1–10).

          • title
            Type: string | null

            Optional short label for the criterion.

        • alias
          Type: string | null

          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.

        • category
          Type: object · IdName nullable

          Job category (e.g. Engineering, Marketing)

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • department
          Type: object · IdName nullable

          Department this job belongs to

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • description
          Type: 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.

        • education_level
          Type: object · IdName nullable

          Required education level

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • employment_type
          Type: object · IdName nullable

          Employment type (e.g. Full-time, Part-time, Contract)

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • experience_level
          Type: object · IdName nullable

          Required experience level (e.g. Entry, Mid, Senior)

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • hiring_team
          Type: array object[] · JobHiringTeamMember[]

          Team members assigned to this job. Embedded via include=hiring_team. Suppressed when view=summary even if the include was requested.

          • full_name
            Type: string
            required

            User full name.

          • id
            Type: integer
            required

            User ID.

          • email
            Type: string | null

            User email.

          • role
            Type: string | null

            Role on hiring team (e.g. hiring_manager, recruiter).

        • hours_per_week_max
          Type: integer | null

          Maximum hours per week

        • hours_per_week_min
          Type: integer | null

          Minimum hours per week

        • indeed_posting_data
          Type: object

          Indeed job board posting metadata. Present only when view=full (default); omitted entirely when view=summary.

          • propertyName
            Type: anything
        • internal_job_id
          Type: string | null

          Company's internal job identifier (e.g. requisition number)

        • internal_title
          Type: string | null

          Internal job title visible only to the hiring team

        • is_satellite
          Type: boolean

          Whether this job is a satellite (child) of a canonical job. Satellite jobs share the candidate pipeline of their parent.

        • location
          Type: object · JobLocation nullable

          Job location details

          • city
            Type: string

            City.

          • country
            Type: string

            Country.

          • full_address
            Type: string

            Full formatted address.

          • postal_code
            Type: string

            Postal code.

          • state
            Type: string

            State or region.

          • street_address
            Type: string

            Street address.

        • parent_job_id
          Type: integer | null

          ID of the canonical (parent) job. Null for canonical jobs. Recruiting operations should target the canonical job.

        • pipeline_stages
          Type: array object[] | null 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
            Type: integer

            Integer numbers.

          • name
            Type: string
        • resume_field_status
          Type: string | nullenum

          Whether resume upload is required, optional, or hidden on the application form

          • required
          • optional
          • hidden
        • salary_currency
          Type: string | null

          Salary currency code (e.g. USD, EUR)

        • salary_max
          Type: number | null

          Maximum salary

        • salary_min
          Type: number | null

          Minimum salary

        • salary_period
          Type: string | nullenum

          Salary period

          • annually
          • monthly
          • daily
          • hourly
        • url_backoffice
          Type: 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.

        • workflow
          Type: object · IdName nullable

          Hiring workflow (pipeline) assigned to this job. Embedded via include=workflow. Suppressed when view=summary even if the include was requested.

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • workflow_id
          Type: integer | null

          ID of the hiring workflow (pipeline) assigned to this job

      • location
        Type: string | null

        Physical location of the interview

      • meeting_url
        Type: string | null

        Video conferencing or meeting URL

      • stage
        Type: object · IdName nullable

        Pipeline stage at the time the interview was scheduled

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • url_backoffice
        Type: stringFormat: uri

        Absolute backoffice URL of the candidate's interviews tab in the 100Hires recruiter app where this interview appears. Use to render deep-links in agent UIs.

    • pagination
      Type: object · Pagination
      required
      • page
        Type: integer
        required

        Current page number.

      • page_count
        Type: integer
        required

        Total number of pages.

      • page_size
        Type: integer
        required

        Items per page.

      • total_count
        Type: integer
        required

        Total number of items.

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/interviews
curl https://api.100hires.com/v2/interviews \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "interviews": [
    {
      "id": 501,
      "application_id": 100,
      "job_id": 10,
      "candidate_id": 12345,
      "start_time": 1711180800,
      "end_time": 1711184400,
      "status": "scheduled",
      "interviewers": [
        {
          "user_id": 5,
          "name": "Sarah Connor",
          "email": "sarah@example.com"
        }
      ],
      "location": "Conference Room A",
      "meeting_url": "https://zoom.us/j/123456789",
      "stage": {
        "id": 3,
        "name": "Technical interview"
      },
      "created_at": 1711036800,
      "updated_at": 1711036800
    }
  ],
  "pagination": {
    "page_size": 20,
    "page_count": 1,
    "page": 1,
    "total_count": 1
  }
}

Get interview

Returns full interview details. Use include to load related candidate, application, or job payloads.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Query Parameters
  • include
    Type: string

    Comma-separated list of related resources to include. Supported: candidate, application, job.

Responses
  • Interview

    Type: object
    • application_id
      Type: integer
      required

      ID of the related application

    • candidate_id
      Type: integer
      required

      ID of the related candidate

    • created_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • end_time
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • id
      Type: integer
      required

      Unique identifier

    • interviewers
      Type: array object[]
      required

      List of interviewers participating in this interview

      • email
        Type: string
      • name
        Type: string
      • user_id
        Type: integer

        Integer numbers.

    • job_id
      Type: integer
      required

      ID of the related job

    • start_time
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • status
      Type: stringenum
      required

      Interview status

      • scheduled
      • completed
    • updated_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • application
      Type: object · Application

      Embedded application data (included when requested)

      • candidate_id
        Type: integer
        required

        ID of the candidate

      • company_id
        Type: integer
        required

        ID of the company

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • id
        Type: integer
        required

        Unique identifier

      • is_disqualified
        Type: boolean
        required

        Whether the candidate is disqualified for this application

      • job_id
        Type: integer
        required

        ID of the job

      • status
        Type: stringenum
        required

        Application status. Changes via hire/reject/unreject actions.

        • active
        • hired
        • rejected
      • updated_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • ai_recommendation
        Type: string | null

        AI-generated recommendation label (e.g. Strong, Good, Weak)

      • ai_score
        Type: integer | null

        AI-generated candidate fit score (0-100)

      • ai_scoring_updated_at
        Type: integer | nullFormat: int64

        Unix timestamp (seconds) of the latest completed AI scoring result

      • candidate
        Type: object · ApplicationCandidate nullable

        Embedded candidate data (included when requested via include=candidate)

        • company_id
          Type: integer
          required

          ID of the company this candidate belongs to

        • created_at
          Type: integerFormat: int64
          required

          Unix timestamp (seconds)

        • id
          Type: integer
          required

          Unique identifier

        • profile
          Type: array object[] · ProfileAnswer[]
          required

          Candidate profile field answers

          • question_id
            Type: integer
            required

            Question ID.

          • question_text
            Type: string
            required

            Question label.

          • value
            required

            Answer value (string, array, or null).

        • updated_at
          Type: integerFormat: int64
          required

          Unix timestamp (seconds)

        • days_since_last_message
          Type: integer | null

          Number of whole days since the last message. Computed at request time. Null if no messages exist.

        • emails
          Type: array string[] | null nullable

          List of candidate email addresses

        • first_name
          Type: string | null

          Candidate's first name

        • ip
          Type: string | null

          IP address from which the candidate applied

        • last_message_at
          Type: integer | nullFormat: int64

          Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.

        • last_name
          Type: string | null

          Candidate's last name

        • origin
          Type: object · IdName nullable

          Where the candidate originally came from

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • phones
          Type: array string[] | null nullable

          List of candidate phone numbers

        • source
          Type: object · IdName nullable

          How the candidate was sourced

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

      • custom_fields
        Type: object nullable

        Custom field values as key-value pairs

        • propertyName
          Type: anything
      • cv
        nullable

        Application CV. Returns standard attachment metadata + download URL. When ?include=cv.text is requested, a text field with parsed plain-text content is added.

        • file
          Type: object · AttachmentFile
          required
          • file_ext
            Type: string
            required

            File extension.

          • file_type
            Type: string
            required

            File type category.

          • is_image
            Type: boolean nullable
            required

            Whether the file is an image.

          • orig_file_name
            Type: string
            required

            Original file name.

          • readable_size
            Type: string
            required

            Human-readable file size.

        • relative_time
          Type: string
          required

          Human-readable time since upload (e.g. "2 days ago").

        • url
          Type: stringFormat: uri nullable
          required

          Absolute download URL (e.g. https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit with Authorization: Bearer <API_KEY>.

        • uuid
          Type: stringFormat: uuid
          required

          Unique attachment identifier. Stable across API calls; use in referencing endpoints.

        • text
          Type: 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.

      • days_since_last_message
        Type: integer | null

        Number of whole days since the last message. Computed at request time. Null if no messages exist.

      • hired_at
        Type: integer | nullFormat: int64

        Unix timestamp (seconds)

      • hiring_team
        Type: array object[] | null · JobHiringTeamMember[] nullable

        Team members assigned to this application's job

        • full_name
          Type: string
          required

          User full name.

        • id
          Type: integer
          required

          User ID.

        • email
          Type: string | null

          User email.

        • role
          Type: string | null

          Role on hiring team (e.g. hiring_manager, recruiter).

      • internal_job_id
        Type: string | null

        Company's internal job identifier

      • job
        Type: object · Job nullable

        Embedded job payload (included when requested via include=job). Use job.url_backoffice to deep-link UI widgets to the job's pipeline view in the recruiter app.

        • company_id
          Type: integer
          required

          ID of the company this job belongs to

        • created_at
          Type: integerFormat: int64
          required

          Unix timestamp (seconds)

        • id
          Type: integer
          required

          Unique identifier

        • is_remote
          Type: boolean
          required

          Whether this is a remote position

        • status
          Type: string
          required

          Job status: open, closed, draft, or archived

        • title
          Type: string
          required

          Public job title shown to candidates

        • updated_at
          Type: integerFormat: int64
          required

          Unix timestamp (seconds)

        • url
          Type: string
          required

          Public URL of the job posting page

        • ai_scoring_criteria
          Type: array object[] · 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
            Type: integer
            required

            Unique identifier of the criterion.

          • position
            Type: integer
            required

            0-based ordinal of the criterion in the job's list.

          • text
            Type: string
            required

            Prompt text describing what to evaluate.

          • weight
            Type: integer
            min:  
            1
            max:  
            10
            required

            Relative importance of this criterion in the total score (1–10).

          • title
            Type: string | null

            Optional short label for the criterion.

        • alias
          Type: string | null

          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.

        • category
          Type: object · IdName nullable

          Job category (e.g. Engineering, Marketing)

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • department
          Type: object · IdName nullable

          Department this job belongs to

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • description
          Type: 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.

        • education_level
          Type: object · IdName nullable

          Required education level

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • employment_type
          Type: object · IdName nullable

          Employment type (e.g. Full-time, Part-time, Contract)

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • experience_level
          Type: object · IdName nullable

          Required experience level (e.g. Entry, Mid, Senior)

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • hiring_team
          Type: array object[] · JobHiringTeamMember[]

          Team members assigned to this job. Embedded via include=hiring_team. Suppressed when view=summary even if the include was requested.

          • full_name
            Type: string
            required

            User full name.

          • id
            Type: integer
            required

            User ID.

          • email
            Type: string | null

            User email.

          • role
            Type: string | null

            Role on hiring team (e.g. hiring_manager, recruiter).

        • hours_per_week_max
          Type: integer | null

          Maximum hours per week

        • hours_per_week_min
          Type: integer | null

          Minimum hours per week

        • indeed_posting_data
          Type: object

          Indeed job board posting metadata. Present only when view=full (default); omitted entirely when view=summary.

          • propertyName
            Type: anything
        • internal_job_id
          Type: string | null

          Company's internal job identifier (e.g. requisition number)

        • internal_title
          Type: string | null

          Internal job title visible only to the hiring team

        • is_satellite
          Type: boolean

          Whether this job is a satellite (child) of a canonical job. Satellite jobs share the candidate pipeline of their parent.

        • location
          Type: object · JobLocation nullable

          Job location details

          • city
            Type: string

            City.

          • country
            Type: string

            Country.

          • full_address
            Type: string

            Full formatted address.

          • postal_code
            Type: string

            Postal code.

          • state
            Type: string

            State or region.

          • street_address
            Type: string

            Street address.

        • parent_job_id
          Type: integer | null

          ID of the canonical (parent) job. Null for canonical jobs. Recruiting operations should target the canonical job.

        • pipeline_stages
          Type: array object[] | null 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
            Type: integer

            Integer numbers.

          • name
            Type: string
        • resume_field_status
          Type: string | nullenum

          Whether resume upload is required, optional, or hidden on the application form

          • required
          • optional
          • hidden
        • salary_currency
          Type: string | null

          Salary currency code (e.g. USD, EUR)

        • salary_max
          Type: number | null

          Maximum salary

        • salary_min
          Type: number | null

          Minimum salary

        • salary_period
          Type: string | nullenum

          Salary period

          • annually
          • monthly
          • daily
          • hourly
        • url_backoffice
          Type: 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.

        • workflow
          Type: object · IdName nullable

          Hiring workflow (pipeline) assigned to this job. Embedded via include=workflow. Suppressed when view=summary even if the include was requested.

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • workflow_id
          Type: integer | null

          ID of the hiring workflow (pipeline) assigned to this job

      • job_alias
        Type: string | null

        Short alias of the job, usable in URLs (e.g. 79SZHfT)

      • last_message_at
        Type: integer | nullFormat: int64

        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.

      • rejected_at
        Type: integer | nullFormat: int64

        Unix timestamp (seconds)

      • rejection_reason
        Type: array object[] | null · IdName[] nullable

        Reasons for rejection. Null if not rejected.

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • stage
        Type: object · IdName nullable

        Current pipeline stage of the application

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • url_backoffice
        Type: stringFormat: 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.

    • candidate
      Type: object · Candidate

      Embedded candidate data (included when requested)

      • company_id
        Type: integer
        required

        ID of the company this candidate belongs to

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • id
        Type: integer
        required

        Unique identifier

      • updated_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • alias
        Type: string | null

        Short alphanumeric alias used in profile URLs. Use this to build candidate profile links — https://app.100hires.com/candidate/{alias}. Also accepted as {id} in API requests.

      • applications
        Type: array object[] · CandidateApplicationSummary[]

        Summary of all applications this candidate has across jobs

        • id
          Type: integer
          required

          Application ID.

        • job
          Type: object
          required

          Job summary (id, title, status).

          • id
            Type: integer
            required

            Integer numbers.

          • title
            Type: string
            required
        • stage
          Type: object · IdName nullable
          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

      • days_since_last_message
        Type: integer | null

        Number of whole days since the last message. Computed at request time. Null if no messages exist.

      • emails
        Type: array string[] | null nullable

        List of candidate email addresses

      • first_name
        Type: string | null

        Candidate's first name

      • ip
        Type: string | null

        IP address from which the candidate applied

      • last_message_at
        Type: integer | nullFormat: int64

        Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.

      • last_name
        Type: string | null

        Candidate's last name

      • origin
        Type: object · IdName nullable

        Where the candidate originally came from (e.g. job board name)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • phones
        Type: array string[] | null nullable

        List of candidate phone numbers

      • profile
        Type: array object[] · ProfileAnswer[]

        Candidate profile field answers (application form responses). Present only when view=full (default); omitted entirely when view=summary to keep list responses inside the agent context budget — a single candidate can carry dozens of free-form answers.

        • question_id
          Type: integer
          required

          Question ID.

        • question_text
          Type: string
          required

          Question label.

        • value
          required

          Answer value (string, array, or null).

      • source
        Type: object · IdName nullable

        How the candidate was sourced (e.g. LinkedIn, Referral)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • url_backoffice
        Type: stringFormat: uri

        Absolute backoffice URL of the candidate in the 100Hires recruiter app. Use to render deep-links in agent UIs.

    • job
      Type: object · Job

      Embedded job data (included when requested)

      • company_id
        Type: integer
        required

        ID of the company this job belongs to

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • id
        Type: integer
        required

        Unique identifier

      • is_remote
        Type: boolean
        required

        Whether this is a remote position

      • status
        Type: string
        required

        Job status: open, closed, draft, or archived

      • title
        Type: string
        required

        Public job title shown to candidates

      • updated_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • url
        Type: string
        required

        Public URL of the job posting page

      • ai_scoring_criteria
        Type: array object[] · 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
          Type: integer
          required

          Unique identifier of the criterion.

        • position
          Type: integer
          required

          0-based ordinal of the criterion in the job's list.

        • text
          Type: string
          required

          Prompt text describing what to evaluate.

        • weight
          Type: integer
          min:  
          1
          max:  
          10
          required

          Relative importance of this criterion in the total score (1–10).

        • title
          Type: string | null

          Optional short label for the criterion.

      • alias
        Type: string | null

        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.

      • category
        Type: object · IdName nullable

        Job category (e.g. Engineering, Marketing)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • department
        Type: object · IdName nullable

        Department this job belongs to

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • description
        Type: 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.

      • education_level
        Type: object · IdName nullable

        Required education level

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • employment_type
        Type: object · IdName nullable

        Employment type (e.g. Full-time, Part-time, Contract)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • experience_level
        Type: object · IdName nullable

        Required experience level (e.g. Entry, Mid, Senior)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • hiring_team
        Type: array object[] · JobHiringTeamMember[]

        Team members assigned to this job. Embedded via include=hiring_team. Suppressed when view=summary even if the include was requested.

        • full_name
          Type: string
          required

          User full name.

        • id
          Type: integer
          required

          User ID.

        • email
          Type: string | null

          User email.

        • role
          Type: string | null

          Role on hiring team (e.g. hiring_manager, recruiter).

      • hours_per_week_max
        Type: integer | null

        Maximum hours per week

      • hours_per_week_min
        Type: integer | null

        Minimum hours per week

      • indeed_posting_data
        Type: object

        Indeed job board posting metadata. Present only when view=full (default); omitted entirely when view=summary.

        • propertyName
          Type: anything
      • internal_job_id
        Type: string | null

        Company's internal job identifier (e.g. requisition number)

      • internal_title
        Type: string | null

        Internal job title visible only to the hiring team

      • is_satellite
        Type: boolean

        Whether this job is a satellite (child) of a canonical job. Satellite jobs share the candidate pipeline of their parent.

      • location
        Type: object · JobLocation nullable

        Job location details

        • city
          Type: string

          City.

        • country
          Type: string

          Country.

        • full_address
          Type: string

          Full formatted address.

        • postal_code
          Type: string

          Postal code.

        • state
          Type: string

          State or region.

        • street_address
          Type: string

          Street address.

      • parent_job_id
        Type: integer | null

        ID of the canonical (parent) job. Null for canonical jobs. Recruiting operations should target the canonical job.

      • pipeline_stages
        Type: array object[] | null 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
          Type: integer

          Integer numbers.

        • name
          Type: string
      • resume_field_status
        Type: string | nullenum

        Whether resume upload is required, optional, or hidden on the application form

        • required
        • optional
        • hidden
      • salary_currency
        Type: string | null

        Salary currency code (e.g. USD, EUR)

      • salary_max
        Type: number | null

        Maximum salary

      • salary_min
        Type: number | null

        Minimum salary

      • salary_period
        Type: string | nullenum

        Salary period

        • annually
        • monthly
        • daily
        • hourly
      • url_backoffice
        Type: 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.

      • workflow
        Type: object · IdName nullable

        Hiring workflow (pipeline) assigned to this job. Embedded via include=workflow. Suppressed when view=summary even if the include was requested.

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • workflow_id
        Type: integer | null

        ID of the hiring workflow (pipeline) assigned to this job

    • location
      Type: string | null

      Physical location of the interview

    • meeting_url
      Type: string | null

      Video conferencing or meeting URL

    • stage
      Type: object · IdName nullable

      Pipeline stage at the time the interview was scheduled

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • url_backoffice
      Type: stringFormat: uri

      Absolute backoffice URL of the candidate's interviews tab in the 100Hires recruiter app where this interview appears. Use to render deep-links in agent UIs.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/interviews/{id}
curl https://api.100hires.com/v2/interviews/1 \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "id": 501,
  "application_id": 100,
  "job_id": 10,
  "candidate_id": 12345,
  "start_time": 1711180800,
  "end_time": 1711184400,
  "status": "scheduled",
  "interviewers": [
    {
      "user_id": 5,
      "name": "Sarah Connor",
      "email": "sarah@example.com"
    }
  ],
  "location": "Conference Room A",
  "meeting_url": "https://zoom.us/j/123456789",
  "stage": {
    "id": 3,
    "name": "Technical interview"
  },
  "created_at": 1711036800,
  "updated_at": 1711036800
}

Jobs

List jobs

Returns paginated jobs with status/date filters. Use for career-site sync, reporting, and external system indexing.

Query Parameters
  • company_id
    Type: integer

    Optional target company ID. Since each API key is already bound to one company, this is only needed when the key owner has access to multiple companies.

  • status
    Type: string

    Filter by job status name (from GET /taxonomy/statuses, e.g. Public, Draft, Archived).

  • created_at_start

    Return only jobs created at or after this time. Accepts a Unix timestamp in seconds (not milliseconds) or an ISO-8601 string with timezone offset (e.g. 2026-05-11T00:00:00Z, 2026-05-11T00:00:00.123+03:00). Fractional seconds are accepted but truncated to whole seconds.

    • Type: integer
      min:  
      0

      Integer numbers.

  • created_at_end

    Return only jobs created at or before this time. Accepts a Unix timestamp in seconds (not milliseconds) or an ISO-8601 string with timezone offset (e.g. 2026-05-11T00:00:00Z, 2026-05-11T00:00:00.123+03:00). Fractional seconds are accepted but truncated to whole seconds.

    • Type: integer
      min:  
      0

      Integer numbers.

  • updated_after

    Return only jobs updated at or after this time. Accepts a Unix timestamp in seconds (not milliseconds) or an ISO-8601 string with timezone offset (e.g. 2026-05-11T00:00:00Z, 2026-05-11T00:00:00.123+03:00). Fractional seconds are accepted but truncated to whole seconds. Use for incremental sync.

    • Type: integer
      min:  
      0

      Integer numbers.

  • department_id
    Type: integer

    Filter jobs by department ID (from GET /taxonomy/departments).

  • q
    Type: string

    Search by job title or internal title (partial match)

  • include
    Type: string

    Comma-separated list of related resources to include. Supported: workflow, hiring_team, pipeline_stages.

  • page
    Type: integer
    min:  
    1

    Page number (1-based). Defaults to 1.

  • size
    Type: integer
    min:  
    1
    max:  
    100

    Number of items per page (1–100). Defaults to 20.

  • view
    Type: stringenum

    Response shape selector for list endpoints. full (default) returns every field — backward-compatible with pre-existing clients. summary returns a thinned payload designed for agent-friendly list browsing: heavy fields (description HTML, embedded profile answers, full message bodies, embedded relations, etc.) are omitted or replaced with *_preview truncations. Use summary when paging through large result sets and fetch a single record with the corresponding GET /{resource}/{id} endpoint when full data is needed.

    • full
    • summary
Responses
  • Job list

    Type: object
    • jobs
      Type: array object[] · Job[]
      required

      Array of jobs.

      • company_id
        Type: integer
        required

        ID of the company this job belongs to

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • id
        Type: integer
        required

        Unique identifier

      • is_remote
        Type: boolean
        required

        Whether this is a remote position

      • status
        Type: string
        required

        Job status: open, closed, draft, or archived

      • title
        Type: string
        required

        Public job title shown to candidates

      • updated_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • url
        Type: string
        required

        Public URL of the job posting page

      • ai_scoring_criteria
        Type: array object[] · 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
          Type: integer
          required

          Unique identifier of the criterion.

        • position
          Type: integer
          required

          0-based ordinal of the criterion in the job's list.

        • text
          Type: string
          required

          Prompt text describing what to evaluate.

        • weight
          Type: integer
          min:  
          1
          max:  
          10
          required

          Relative importance of this criterion in the total score (1–10).

        • title
          Type: string | null

          Optional short label for the criterion.

      • alias
        Type: string | null

        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.

      • category
        Type: object · IdName nullable

        Job category (e.g. Engineering, Marketing)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • department
        Type: object · IdName nullable

        Department this job belongs to

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • description
        Type: 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.

      • education_level
        Type: object · IdName nullable

        Required education level

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • employment_type
        Type: object · IdName nullable

        Employment type (e.g. Full-time, Part-time, Contract)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • experience_level
        Type: object · IdName nullable

        Required experience level (e.g. Entry, Mid, Senior)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • hiring_team
        Type: array object[] · JobHiringTeamMember[]

        Team members assigned to this job. Embedded via include=hiring_team. Suppressed when view=summary even if the include was requested.

        • full_name
          Type: string
          required

          User full name.

        • id
          Type: integer
          required

          User ID.

        • email
          Type: string | null

          User email.

        • role
          Type: string | null

          Role on hiring team (e.g. hiring_manager, recruiter).

      • hours_per_week_max
        Type: integer | null

        Maximum hours per week

      • hours_per_week_min
        Type: integer | null

        Minimum hours per week

      • indeed_posting_data
        Type: object

        Indeed job board posting metadata. Present only when view=full (default); omitted entirely when view=summary.

        • propertyName
          Type: anything
      • internal_job_id
        Type: string | null

        Company's internal job identifier (e.g. requisition number)

      • internal_title
        Type: string | null

        Internal job title visible only to the hiring team

      • is_satellite
        Type: boolean

        Whether this job is a satellite (child) of a canonical job. Satellite jobs share the candidate pipeline of their parent.

      • location
        Type: object · JobLocation nullable

        Job location details

        • city
          Type: string

          City.

        • country
          Type: string

          Country.

        • full_address
          Type: string

          Full formatted address.

        • postal_code
          Type: string

          Postal code.

        • state
          Type: string

          State or region.

        • street_address
          Type: string

          Street address.

      • parent_job_id
        Type: integer | null

        ID of the canonical (parent) job. Null for canonical jobs. Recruiting operations should target the canonical job.

      • pipeline_stages
        Type: array object[] | null 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
          Type: integer

          Integer numbers.

        • name
          Type: string
      • resume_field_status
        Type: string | nullenum

        Whether resume upload is required, optional, or hidden on the application form

        • required
        • optional
        • hidden
      • salary_currency
        Type: string | null

        Salary currency code (e.g. USD, EUR)

      • salary_max
        Type: number | null

        Maximum salary

      • salary_min
        Type: number | null

        Minimum salary

      • salary_period
        Type: string | nullenum

        Salary period

        • annually
        • monthly
        • daily
        • hourly
      • url_backoffice
        Type: 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.

      • workflow
        Type: object · IdName nullable

        Hiring workflow (pipeline) assigned to this job. Embedded via include=workflow. Suppressed when view=summary even if the include was requested.

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • workflow_id
        Type: integer | null

        ID of the hiring workflow (pipeline) assigned to this job

    • pagination
      Type: object · Pagination
      required
      • page
        Type: integer
        required

        Current page number.

      • page_count
        Type: integer
        required

        Total number of pages.

      • page_size
        Type: integer
        required

        Items per page.

      • total_count
        Type: integer
        required

        Total number of items.

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/jobs
curl https://api.100hires.com/v2/jobs \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "jobs": [
    {
      "id": 10,
      "alias": "79SZHfT",
      "company_id": 1,
      "title": "Senior Software Engineer",
      "internal_title": null,
      "internal_job_id": null,
      "description": "<p>We are looking for a senior engineer...</p>",
      "resume_field_status": "optional",
      "location": {
        "city": "San Francisco",
        "country": "United States",
        "state": "California",
        "street_address": null,
        "full_address": "San Francisco, California, United States",
        "postal_code": null
      },
      "url": "https://100hires.com/career/job/79SZHfT",
      "is_remote": false,
      "status": "Public",
      "department": {
        "id": 1,
        "name": "Engineering"
      },
      "category": {
        "id": 2,
        "name": "Software Development"
      },
      "employment_type": {
        "id": 1,
        "name": "Full-time"
      },
      "education_level": null,
      "experience_level": {
        "id": 3,
        "name": "Senior"
      },
      "workflow_id": 1,
      "workflow": null,
      "salary_min": 120000,
      "salary_max": 180000,
      "salary_currency": "USD",
      "salary_period": "annually",
      "hours_per_week_min": null,
      "hours_per_week_max": null,
      "indeed_posting_data": {},
      "hiring_team": [],
      "pipeline_stages": null,
      "is_satellite": false,
      "parent_job_id": null,
      "created_at": 1711036800,
      "updated_at": 1711036800
    }
  ],
  "pagination": {
    "page_size": 20,
    "page_count": 1,
    "page": 1,
    "total_count": 1
  }
}

Create job

Creates a job with taxonomy, location, salary, and workflow configuration. Primary endpoint for programmatic job publishing workflows.

Query Parameters
  • include
    Type: string

    Comma-separated list of related resources to include. Supported: workflow, hiring_team, pipeline_stages.

Body
required
application/json
  • description
    Type: string
    required

    Job description (HTML allowed).

  • location_city
    Type: string
    required

    Job city.

  • location_country
    Type: string
    required

    Job country.

  • status
    Type: string
    required

    Job status (e.g. Draft, Public). See GET /taxonomy/statuses.

  • title
    Type: string
    required

    Public job title.

  • ai_scoring_criteria
    Type: array object[] · AiScoringCriterionInput[]

    AI scoring criteria for evaluating candidates against this job. Providing this field is a full replace: existing criteria are detached (preserved if used in past evaluations, soft-deleted otherwise) and the supplied list becomes the current set. Omit the field to leave defaults untouched. Pass an empty array to detach all criteria.

    • text
      Type: string
      required

      Prompt text describing what to evaluate. Required.

    • weight
      Type: integer
      min:  
      1
      max:  
      10
      required

      Relative importance of this criterion in the total score (1–10).

    • id
      Type: integer

      ID of an existing criterion attached to this job. When present, the corresponding criterion is updated in place (or, if it has scores, detached and replaced — ManageCriteria::createOrUpdate semantics). Omit id to create a new criterion. Items existing on the job that are not present in the request (matched by id) are removed (soft-deleted if unscored, detached if used in past evaluations).

    • title
      Type: string

      Optional short label for the criterion.

  • category_id
    Type: integer

    Job category ID from GET /taxonomy/categories.

  • company_id
    Type: integer

    Target company ID. Required only when the API key has access to multiple companies.

  • department_id
    Type: integer

    Department ID from GET /taxonomy/departments.

  • education_level_id
    Type: integer

    Education level ID from GET /taxonomy/education-levels.

  • employment_type_id
    Type: integer

    Employment type ID from GET /taxonomy/employment-types.

  • experience_level_id
    Type: integer

    Experience level ID from GET /taxonomy/experience-levels.

  • form_id
    Type: integer

    Application form ID. If omitted, a new form named after the job title is created with default questions (First name, Last name, Email, Phone).

  • internal_job_id
    Type: string

    External reference ID from your ATS or HR system.

  • internal_title
    Type: string

    Internal-only title visible to the hiring team.

  • is_remote
    Type: boolean

    Whether this is a remote position.

  • knockout_questions
    Type: array object[]

    Boolean knockout questions added to the application form. Each question with disqualify_on_wrong_answer=true creates an auto-disqualify rule on the Applied stage.

    • disqualify_on_wrong_answer
      Type: boolean
      required

      If true, applicants who answer incorrectly are automatically disqualified.

    • expected_answer
      Type: stringenum
      required

      The correct/desired answer.

      • Yes
      • No
    • text
      Type: string
      required

      Question text shown to the applicant.

  • location_full_address
    Type: string

    Full formatted address.

  • location_postal_code
    Type: string

    Postal or ZIP code.

  • location_state
    Type: string

    Job state or region.

  • location_street_address
    Type: string

    Street address.

  • parent_job_id
    Type: integer

    Canonical parent job ID. If provided, the created job becomes a satellite job.

  • resume_field_status
    Type: stringenum

    Resume field behavior on the application form.

    • required
    • optional
    • hidden
  • salary_currency
    Type: string

    Salary currency code (e.g. USD, EUR).

  • salary_max
    Type: number

    Maximum salary.

  • salary_min
    Type: number

    Minimum salary.

  • salary_period
    Type: stringenum

    Salary period.

    • annually
    • monthly
    • daily
    • hourly
  • workflow_id
    Type: integer

    Workflow ID. If omitted, a new workflow named after the job title is created with default stages.

Responses
  • Created job

    Type: object
    • company_id
      Type: integer
      required

      ID of the company this job belongs to

    • created_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • id
      Type: integer
      required

      Unique identifier

    • is_remote
      Type: boolean
      required

      Whether this is a remote position

    • status
      Type: string
      required

      Job status: open, closed, draft, or archived

    • title
      Type: string
      required

      Public job title shown to candidates

    • updated_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • url
      Type: string
      required

      Public URL of the job posting page

    • ai_scoring_criteria
      Type: array object[] · 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
        Type: integer
        required

        Unique identifier of the criterion.

      • position
        Type: integer
        required

        0-based ordinal of the criterion in the job's list.

      • text
        Type: string
        required

        Prompt text describing what to evaluate.

      • weight
        Type: integer
        min:  
        1
        max:  
        10
        required

        Relative importance of this criterion in the total score (1–10).

      • title
        Type: string | null

        Optional short label for the criterion.

    • alias
      Type: string | null

      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.

    • category
      Type: object · IdName nullable

      Job category (e.g. Engineering, Marketing)

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • department
      Type: object · IdName nullable

      Department this job belongs to

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • description
      Type: 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.

    • education_level
      Type: object · IdName nullable

      Required education level

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • employment_type
      Type: object · IdName nullable

      Employment type (e.g. Full-time, Part-time, Contract)

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • experience_level
      Type: object · IdName nullable

      Required experience level (e.g. Entry, Mid, Senior)

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • hiring_team
      Type: array object[] · JobHiringTeamMember[]

      Team members assigned to this job. Embedded via include=hiring_team. Suppressed when view=summary even if the include was requested.

      • full_name
        Type: string
        required

        User full name.

      • id
        Type: integer
        required

        User ID.

      • email
        Type: string | null

        User email.

      • role
        Type: string | null

        Role on hiring team (e.g. hiring_manager, recruiter).

    • hours_per_week_max
      Type: integer | null

      Maximum hours per week

    • hours_per_week_min
      Type: integer | null

      Minimum hours per week

    • indeed_posting_data
      Type: object

      Indeed job board posting metadata. Present only when view=full (default); omitted entirely when view=summary.

      • propertyName
        Type: anything
    • internal_job_id
      Type: string | null

      Company's internal job identifier (e.g. requisition number)

    • internal_title
      Type: string | null

      Internal job title visible only to the hiring team

    • is_satellite
      Type: boolean

      Whether this job is a satellite (child) of a canonical job. Satellite jobs share the candidate pipeline of their parent.

    • location
      Type: object · JobLocation nullable

      Job location details

      • city
        Type: string

        City.

      • country
        Type: string

        Country.

      • full_address
        Type: string

        Full formatted address.

      • postal_code
        Type: string

        Postal code.

      • state
        Type: string

        State or region.

      • street_address
        Type: string

        Street address.

    • parent_job_id
      Type: integer | null

      ID of the canonical (parent) job. Null for canonical jobs. Recruiting operations should target the canonical job.

    • pipeline_stages
      Type: array object[] | null 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
        Type: integer

        Integer numbers.

      • name
        Type: string
    • resume_field_status
      Type: string | nullenum

      Whether resume upload is required, optional, or hidden on the application form

      • required
      • optional
      • hidden
    • salary_currency
      Type: string | null

      Salary currency code (e.g. USD, EUR)

    • salary_max
      Type: number | null

      Maximum salary

    • salary_min
      Type: number | null

      Minimum salary

    • salary_period
      Type: string | nullenum

      Salary period

      • annually
      • monthly
      • daily
      • hourly
    • url_backoffice
      Type: 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.

    • workflow
      Type: object · IdName nullable

      Hiring workflow (pipeline) assigned to this job. Embedded via include=workflow. Suppressed when view=summary even if the include was requested.

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • workflow_id
      Type: integer | null

      ID of the hiring workflow (pipeline) assigned to this job

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/jobs
curl https://api.100hires.com/v2/jobs \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "company_id": 1,
  "form_id": 1,
  "status": "",
  "title": "",
  "internal_title": "",
  "internal_job_id": "",
  "description": "",
  "resume_field_status": "required",
  "location_city": "",
  "location_country": "",
  "location_state": "",
  "location_street_address": "",
  "location_full_address": "",
  "location_postal_code": "",
  "salary_min": 1,
  "salary_max": 1,
  "salary_currency": "",
  "salary_period": "annually",
  "is_remote": true,
  "employment_type_id": 1,
  "department_id": 1,
  "category_id": 1,
  "education_level_id": 1,
  "experience_level_id": 1,
  "workflow_id": 1,
  "parent_job_id": 1,
  "knockout_questions": [
    {
      "text": "",
      "expected_answer": "Yes",
      "disqualify_on_wrong_answer": true
    }
  ],
  "ai_scoring_criteria": [
    {
      "id": 1,
      "title": "",
      "text": "",
      "weight": 1
    }
  ]
}'
{
  "id": 10,
  "alias": "79SZHfT",
  "company_id": 1,
  "title": "Senior Software Engineer",
  "internal_title": null,
  "internal_job_id": null,
  "description": "<p>We are looking for a senior engineer...</p>",
  "resume_field_status": "optional",
  "location": {
    "city": "San Francisco",
    "country": "United States",
    "state": "California",
    "street_address": null,
    "full_address": "San Francisco, California, United States",
    "postal_code": null
  },
  "url": "https://100hires.com/career/job/79SZHfT",
  "is_remote": false,
  "status": "Public",
  "department": {
    "id": 1,
    "name": "Engineering"
  },
  "category": {
    "id": 2,
    "name": "Software Development"
  },
  "employment_type": {
    "id": 1,
    "name": "Full-time"
  },
  "education_level": null,
  "experience_level": {
    "id": 3,
    "name": "Senior"
  },
  "workflow_id": 1,
  "workflow": null,
  "salary_min": 120000,
  "salary_max": 180000,
  "salary_currency": "USD",
  "salary_period": "annually",
  "hours_per_week_min": null,
  "hours_per_week_max": null,
  "indeed_posting_data": {},
  "hiring_team": [],
  "pipeline_stages": null,
  "is_satellite": false,
  "parent_job_id": null,
  "created_at": 1711036800,
  "updated_at": 1711036800
}

Get job

Returns the full job payload. Use include to load related workflow or hiring team data.

Path Parameters
  • id
    Type: string Pattern: ^[A-Za-z0-9_-]+$
    required

    Job ID (numeric) or alias

Query Parameters
  • include
    Type: string

    Comma-separated list of related resources to include. Supported: workflow, hiring_team, pipeline_stages.

Responses
  • Job

    Type: object
    • company_id
      Type: integer
      required

      ID of the company this job belongs to

    • created_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • id
      Type: integer
      required

      Unique identifier

    • is_remote
      Type: boolean
      required

      Whether this is a remote position

    • status
      Type: string
      required

      Job status: open, closed, draft, or archived

    • title
      Type: string
      required

      Public job title shown to candidates

    • updated_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • url
      Type: string
      required

      Public URL of the job posting page

    • ai_scoring_criteria
      Type: array object[] · 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
        Type: integer
        required

        Unique identifier of the criterion.

      • position
        Type: integer
        required

        0-based ordinal of the criterion in the job's list.

      • text
        Type: string
        required

        Prompt text describing what to evaluate.

      • weight
        Type: integer
        min:  
        1
        max:  
        10
        required

        Relative importance of this criterion in the total score (1–10).

      • title
        Type: string | null

        Optional short label for the criterion.

    • alias
      Type: string | null

      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.

    • category
      Type: object · IdName nullable

      Job category (e.g. Engineering, Marketing)

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • department
      Type: object · IdName nullable

      Department this job belongs to

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • description
      Type: 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.

    • education_level
      Type: object · IdName nullable

      Required education level

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • employment_type
      Type: object · IdName nullable

      Employment type (e.g. Full-time, Part-time, Contract)

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • experience_level
      Type: object · IdName nullable

      Required experience level (e.g. Entry, Mid, Senior)

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • hiring_team
      Type: array object[] · JobHiringTeamMember[]

      Team members assigned to this job. Embedded via include=hiring_team. Suppressed when view=summary even if the include was requested.

      • full_name
        Type: string
        required

        User full name.

      • id
        Type: integer
        required

        User ID.

      • email
        Type: string | null

        User email.

      • role
        Type: string | null

        Role on hiring team (e.g. hiring_manager, recruiter).

    • hours_per_week_max
      Type: integer | null

      Maximum hours per week

    • hours_per_week_min
      Type: integer | null

      Minimum hours per week

    • indeed_posting_data
      Type: object

      Indeed job board posting metadata. Present only when view=full (default); omitted entirely when view=summary.

      • propertyName
        Type: anything
    • internal_job_id
      Type: string | null

      Company's internal job identifier (e.g. requisition number)

    • internal_title
      Type: string | null

      Internal job title visible only to the hiring team

    • is_satellite
      Type: boolean

      Whether this job is a satellite (child) of a canonical job. Satellite jobs share the candidate pipeline of their parent.

    • location
      Type: object · JobLocation nullable

      Job location details

      • city
        Type: string

        City.

      • country
        Type: string

        Country.

      • full_address
        Type: string

        Full formatted address.

      • postal_code
        Type: string

        Postal code.

      • state
        Type: string

        State or region.

      • street_address
        Type: string

        Street address.

    • parent_job_id
      Type: integer | null

      ID of the canonical (parent) job. Null for canonical jobs. Recruiting operations should target the canonical job.

    • pipeline_stages
      Type: array object[] | null 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
        Type: integer

        Integer numbers.

      • name
        Type: string
    • resume_field_status
      Type: string | nullenum

      Whether resume upload is required, optional, or hidden on the application form

      • required
      • optional
      • hidden
    • salary_currency
      Type: string | null

      Salary currency code (e.g. USD, EUR)

    • salary_max
      Type: number | null

      Maximum salary

    • salary_min
      Type: number | null

      Minimum salary

    • salary_period
      Type: string | nullenum

      Salary period

      • annually
      • monthly
      • daily
      • hourly
    • url_backoffice
      Type: 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.

    • workflow
      Type: object · IdName nullable

      Hiring workflow (pipeline) assigned to this job. Embedded via include=workflow. Suppressed when view=summary even if the include was requested.

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • workflow_id
      Type: integer | null

      ID of the hiring workflow (pipeline) assigned to this job

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/jobs/{id}
curl 'https://api.100hires.com/v2/jobs/{id}' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "id": 10,
  "alias": "79SZHfT",
  "company_id": 1,
  "title": "Senior Software Engineer",
  "internal_title": null,
  "internal_job_id": null,
  "description": "<p>We are looking for a senior engineer...</p>",
  "resume_field_status": "optional",
  "location": {
    "city": "San Francisco",
    "country": "United States",
    "state": "California",
    "street_address": null,
    "full_address": "San Francisco, California, United States",
    "postal_code": null
  },
  "url": "https://100hires.com/career/job/79SZHfT",
  "is_remote": false,
  "status": "Public",
  "department": {
    "id": 1,
    "name": "Engineering"
  },
  "category": {
    "id": 2,
    "name": "Software Development"
  },
  "employment_type": {
    "id": 1,
    "name": "Full-time"
  },
  "education_level": null,
  "experience_level": {
    "id": 3,
    "name": "Senior"
  },
  "workflow_id": 1,
  "workflow": null,
  "salary_min": 120000,
  "salary_max": 180000,
  "salary_currency": "USD",
  "salary_period": "annually",
  "hours_per_week_min": null,
  "hours_per_week_max": null,
  "indeed_posting_data": {},
  "hiring_team": [],
  "pipeline_stages": null,
  "is_satellite": false,
  "parent_job_id": null,
  "created_at": 1711036800,
  "updated_at": 1711036800
}

Update job

Updates mutable job attributes. Preserves domain-level validation rules.

Path Parameters
  • id
    Type: string Pattern: ^[A-Za-z0-9_-]+$
    required

    Job ID (numeric) or alias

Query Parameters
  • include
    Type: string

    Comma-separated list of related resources to include. Supported: workflow, hiring_team, pipeline_stages.

Body
required
application/json
  • ai_scoring_criteria
    Type: array object[] · AiScoringCriterionInput[]

    AI scoring criteria for evaluating candidates against this job. Diff-replace by id: items with id update the matching existing criterion (preserving identity), items without id create new criteria, and existing criteria not referenced in the payload are removed. Omit the field to leave existing criteria untouched. Pass an empty array to detach all criteria. Each item's order in the array becomes its position.

    • text
      Type: string
      required

      Prompt text describing what to evaluate. Required.

    • weight
      Type: integer
      min:  
      1
      max:  
      10
      required

      Relative importance of this criterion in the total score (1–10).

    • id
      Type: integer

      ID of an existing criterion attached to this job. When present, the corresponding criterion is updated in place (or, if it has scores, detached and replaced — ManageCriteria::createOrUpdate semantics). Omit id to create a new criterion. Items existing on the job that are not present in the request (matched by id) are removed (soft-deleted if unscored, detached if used in past evaluations).

    • title
      Type: string

      Optional short label for the criterion.

  • category_id
    Type: integer

    Job category ID from GET /taxonomy/categories.

  • department_id
    Type: integer

    Department ID from GET /taxonomy/departments.

  • description
    Type: string

    Job description (HTML allowed).

  • education_level_id
    Type: integer

    Education level ID from GET /taxonomy/education-levels.

  • employment_type_id
    Type: integer

    Employment type ID from GET /taxonomy/employment-types.

  • experience_level_id
    Type: integer

    Experience level ID from GET /taxonomy/experience-levels.

  • form_id
    Type: integer

    Application form ID to assign to this job.

  • internal_job_id
    Type: string

    External reference ID from your ATS or HR system.

  • internal_title
    Type: string

    Internal-only title visible to the hiring team.

  • is_remote
    Type: boolean

    Whether this is a remote position.

  • knockout_questions
    Type: array object[]

    Boolean knockout questions added to the application form. Each question with disqualify_on_wrong_answer=true creates an auto-disqualify rule on the Applied stage.

    • disqualify_on_wrong_answer
      Type: boolean
      required

      If true, applicants who answer incorrectly are automatically disqualified.

    • expected_answer
      Type: stringenum
      required

      The correct/desired answer.

      • Yes
      • No
    • text
      Type: string
      required

      Question text shown to the applicant.

  • location_city
    Type: string

    Job city.

  • location_country
    Type: string

    Job country.

  • location_full_address
    Type: string

    Full formatted address.

  • location_postal_code
    Type: string

    Postal or ZIP code.

  • location_state
    Type: string

    Job state or region.

  • location_street_address
    Type: string

    Street address.

  • parent_job_id
    Type: integer

    Canonical parent job ID. If provided, the job becomes a satellite job.

  • resume_field_status
    Type: stringenum

    Resume field behavior on the application form.

    • required
    • optional
    • hidden
  • salary_currency
    Type: string

    Salary currency code (e.g. USD, EUR).

  • salary_max
    Type: number

    Maximum salary.

  • salary_min
    Type: number

    Minimum salary.

  • salary_period
    Type: stringenum

    Salary period.

    • annually
    • monthly
    • daily
    • hourly
  • status
    Type: string

    Job status (e.g. Draft, Public). See GET /taxonomy/statuses.

  • title
    Type: string

    Public job title.

  • workflow_id
    Type: integer

    Workflow ID to assign to this job.

Responses
  • Updated job

    Type: object
    • company_id
      Type: integer
      required

      ID of the company this job belongs to

    • created_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • id
      Type: integer
      required

      Unique identifier

    • is_remote
      Type: boolean
      required

      Whether this is a remote position

    • status
      Type: string
      required

      Job status: open, closed, draft, or archived

    • title
      Type: string
      required

      Public job title shown to candidates

    • updated_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • url
      Type: string
      required

      Public URL of the job posting page

    • ai_scoring_criteria
      Type: array object[] · 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
        Type: integer
        required

        Unique identifier of the criterion.

      • position
        Type: integer
        required

        0-based ordinal of the criterion in the job's list.

      • text
        Type: string
        required

        Prompt text describing what to evaluate.

      • weight
        Type: integer
        min:  
        1
        max:  
        10
        required

        Relative importance of this criterion in the total score (1–10).

      • title
        Type: string | null

        Optional short label for the criterion.

    • alias
      Type: string | null

      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.

    • category
      Type: object · IdName nullable

      Job category (e.g. Engineering, Marketing)

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • department
      Type: object · IdName nullable

      Department this job belongs to

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • description
      Type: 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.

    • education_level
      Type: object · IdName nullable

      Required education level

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • employment_type
      Type: object · IdName nullable

      Employment type (e.g. Full-time, Part-time, Contract)

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • experience_level
      Type: object · IdName nullable

      Required experience level (e.g. Entry, Mid, Senior)

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • hiring_team
      Type: array object[] · JobHiringTeamMember[]

      Team members assigned to this job. Embedded via include=hiring_team. Suppressed when view=summary even if the include was requested.

      • full_name
        Type: string
        required

        User full name.

      • id
        Type: integer
        required

        User ID.

      • email
        Type: string | null

        User email.

      • role
        Type: string | null

        Role on hiring team (e.g. hiring_manager, recruiter).

    • hours_per_week_max
      Type: integer | null

      Maximum hours per week

    • hours_per_week_min
      Type: integer | null

      Minimum hours per week

    • indeed_posting_data
      Type: object

      Indeed job board posting metadata. Present only when view=full (default); omitted entirely when view=summary.

      • propertyName
        Type: anything
    • internal_job_id
      Type: string | null

      Company's internal job identifier (e.g. requisition number)

    • internal_title
      Type: string | null

      Internal job title visible only to the hiring team

    • is_satellite
      Type: boolean

      Whether this job is a satellite (child) of a canonical job. Satellite jobs share the candidate pipeline of their parent.

    • location
      Type: object · JobLocation nullable

      Job location details

      • city
        Type: string

        City.

      • country
        Type: string

        Country.

      • full_address
        Type: string

        Full formatted address.

      • postal_code
        Type: string

        Postal code.

      • state
        Type: string

        State or region.

      • street_address
        Type: string

        Street address.

    • parent_job_id
      Type: integer | null

      ID of the canonical (parent) job. Null for canonical jobs. Recruiting operations should target the canonical job.

    • pipeline_stages
      Type: array object[] | null 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
        Type: integer

        Integer numbers.

      • name
        Type: string
    • resume_field_status
      Type: string | nullenum

      Whether resume upload is required, optional, or hidden on the application form

      • required
      • optional
      • hidden
    • salary_currency
      Type: string | null

      Salary currency code (e.g. USD, EUR)

    • salary_max
      Type: number | null

      Maximum salary

    • salary_min
      Type: number | null

      Minimum salary

    • salary_period
      Type: string | nullenum

      Salary period

      • annually
      • monthly
      • daily
      • hourly
    • url_backoffice
      Type: 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.

    • workflow
      Type: object · IdName nullable

      Hiring workflow (pipeline) assigned to this job. Embedded via include=workflow. Suppressed when view=summary even if the include was requested.

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • workflow_id
      Type: integer | null

      ID of the hiring workflow (pipeline) assigned to this job

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for put/jobs/{id}
curl 'https://api.100hires.com/v2/jobs/{id}' \
  --request PUT \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "form_id": 1,
  "status": "",
  "title": "",
  "internal_title": "",
  "internal_job_id": "",
  "description": "",
  "resume_field_status": "required",
  "location_city": "",
  "location_country": "",
  "location_state": "",
  "location_street_address": "",
  "location_full_address": "",
  "location_postal_code": "",
  "salary_min": 1,
  "salary_max": 1,
  "salary_currency": "",
  "salary_period": "annually",
  "is_remote": true,
  "employment_type_id": 1,
  "department_id": 1,
  "category_id": 1,
  "education_level_id": 1,
  "experience_level_id": 1,
  "workflow_id": 1,
  "parent_job_id": 1,
  "knockout_questions": [
    {
      "text": "",
      "expected_answer": "Yes",
      "disqualify_on_wrong_answer": true
    }
  ],
  "ai_scoring_criteria": [
    {
      "id": 1,
      "title": "",
      "text": "",
      "weight": 1
    }
  ]
}'
{
  "id": 10,
  "alias": "79SZHfT",
  "company_id": 1,
  "title": "Senior Software Engineer",
  "internal_title": null,
  "internal_job_id": null,
  "description": "<p>We are looking for a senior engineer...</p>",
  "resume_field_status": "optional",
  "location": {
    "city": "San Francisco",
    "country": "United States",
    "state": "California",
    "street_address": null,
    "full_address": "San Francisco, California, United States",
    "postal_code": null
  },
  "url": "https://100hires.com/career/job/79SZHfT",
  "is_remote": false,
  "status": "Public",
  "department": {
    "id": 1,
    "name": "Engineering"
  },
  "category": {
    "id": 2,
    "name": "Software Development"
  },
  "employment_type": {
    "id": 1,
    "name": "Full-time"
  },
  "education_level": null,
  "experience_level": {
    "id": 3,
    "name": "Senior"
  },
  "workflow_id": 1,
  "workflow": null,
  "salary_min": 120000,
  "salary_max": 180000,
  "salary_currency": "USD",
  "salary_period": "annually",
  "hours_per_week_min": null,
  "hours_per_week_max": null,
  "indeed_posting_data": {},
  "hiring_team": [],
  "pipeline_stages": null,
  "is_satellite": false,
  "parent_job_id": null,
  "created_at": 1711036800,
  "updated_at": 1711036800
}

Delete job

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

Path Parameters
  • id
    Type: string Pattern: ^[A-Za-z0-9_-]+$
    required

    Job ID (numeric) or alias

Responses
  • Deleted

    Type: object
    • success
      Type: boolean
      required

      Always true on success.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for delete/jobs/{id}
curl 'https://api.100hires.com/v2/jobs/{id}' \
  --request DELETE \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "success": true
}

Update job status

Changes job status via dedicated endpoint for status automation. Recommended for publish/unpublish/archive transitions.

Path Parameters
  • id
    Type: string Pattern: ^[A-Za-z0-9_-]+$
    required

    Job ID (numeric) or alias

Query Parameters
  • include
    Type: string

    Comma-separated list of related resources to include. Supported: workflow, hiring_team, pipeline_stages.

Body
required
application/json
  • status
    Type: string
    required

    New job status (e.g. Draft, Public, Archived). See GET /taxonomy/statuses.

Responses
  • Updated job

    Type: object
    • company_id
      Type: integer
      required

      ID of the company this job belongs to

    • created_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • id
      Type: integer
      required

      Unique identifier

    • is_remote
      Type: boolean
      required

      Whether this is a remote position

    • status
      Type: string
      required

      Job status: open, closed, draft, or archived

    • title
      Type: string
      required

      Public job title shown to candidates

    • updated_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • url
      Type: string
      required

      Public URL of the job posting page

    • ai_scoring_criteria
      Type: array object[] · 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
        Type: integer
        required

        Unique identifier of the criterion.

      • position
        Type: integer
        required

        0-based ordinal of the criterion in the job's list.

      • text
        Type: string
        required

        Prompt text describing what to evaluate.

      • weight
        Type: integer
        min:  
        1
        max:  
        10
        required

        Relative importance of this criterion in the total score (1–10).

      • title
        Type: string | null

        Optional short label for the criterion.

    • alias
      Type: string | null

      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.

    • category
      Type: object · IdName nullable

      Job category (e.g. Engineering, Marketing)

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • department
      Type: object · IdName nullable

      Department this job belongs to

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • description
      Type: 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.

    • education_level
      Type: object · IdName nullable

      Required education level

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • employment_type
      Type: object · IdName nullable

      Employment type (e.g. Full-time, Part-time, Contract)

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • experience_level
      Type: object · IdName nullable

      Required experience level (e.g. Entry, Mid, Senior)

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • hiring_team
      Type: array object[] · JobHiringTeamMember[]

      Team members assigned to this job. Embedded via include=hiring_team. Suppressed when view=summary even if the include was requested.

      • full_name
        Type: string
        required

        User full name.

      • id
        Type: integer
        required

        User ID.

      • email
        Type: string | null

        User email.

      • role
        Type: string | null

        Role on hiring team (e.g. hiring_manager, recruiter).

    • hours_per_week_max
      Type: integer | null

      Maximum hours per week

    • hours_per_week_min
      Type: integer | null

      Minimum hours per week

    • indeed_posting_data
      Type: object

      Indeed job board posting metadata. Present only when view=full (default); omitted entirely when view=summary.

      • propertyName
        Type: anything
    • internal_job_id
      Type: string | null

      Company's internal job identifier (e.g. requisition number)

    • internal_title
      Type: string | null

      Internal job title visible only to the hiring team

    • is_satellite
      Type: boolean

      Whether this job is a satellite (child) of a canonical job. Satellite jobs share the candidate pipeline of their parent.

    • location
      Type: object · JobLocation nullable

      Job location details

      • city
        Type: string

        City.

      • country
        Type: string

        Country.

      • full_address
        Type: string

        Full formatted address.

      • postal_code
        Type: string

        Postal code.

      • state
        Type: string

        State or region.

      • street_address
        Type: string

        Street address.

    • parent_job_id
      Type: integer | null

      ID of the canonical (parent) job. Null for canonical jobs. Recruiting operations should target the canonical job.

    • pipeline_stages
      Type: array object[] | null 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
        Type: integer

        Integer numbers.

      • name
        Type: string
    • resume_field_status
      Type: string | nullenum

      Whether resume upload is required, optional, or hidden on the application form

      • required
      • optional
      • hidden
    • salary_currency
      Type: string | null

      Salary currency code (e.g. USD, EUR)

    • salary_max
      Type: number | null

      Maximum salary

    • salary_min
      Type: number | null

      Minimum salary

    • salary_period
      Type: string | nullenum

      Salary period

      • annually
      • monthly
      • daily
      • hourly
    • url_backoffice
      Type: 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.

    • workflow
      Type: object · IdName nullable

      Hiring workflow (pipeline) assigned to this job. Embedded via include=workflow. Suppressed when view=summary even if the include was requested.

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • workflow_id
      Type: integer | null

      ID of the hiring workflow (pipeline) assigned to this job

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for patch/jobs/{id}/status
curl 'https://api.100hires.com/v2/jobs/{id}/status' \
  --request PATCH \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "status": ""
}'
{
  "id": 10,
  "alias": "79SZHfT",
  "company_id": 1,
  "title": "Senior Software Engineer",
  "internal_title": null,
  "internal_job_id": null,
  "description": "<p>We are looking for a senior engineer...</p>",
  "resume_field_status": "optional",
  "location": {
    "city": "San Francisco",
    "country": "United States",
    "state": "California",
    "street_address": null,
    "full_address": "San Francisco, California, United States",
    "postal_code": null
  },
  "url": "https://100hires.com/career/job/79SZHfT",
  "is_remote": false,
  "status": "Draft",
  "department": {
    "id": 1,
    "name": "Engineering"
  },
  "category": {
    "id": 2,
    "name": "Software Development"
  },
  "employment_type": {
    "id": 1,
    "name": "Full-time"
  },
  "education_level": null,
  "experience_level": {
    "id": 3,
    "name": "Senior"
  },
  "workflow_id": 1,
  "workflow": null,
  "salary_min": 120000,
  "salary_max": 180000,
  "salary_currency": "USD",
  "salary_period": "annually",
  "hours_per_week_min": null,
  "hours_per_week_max": null,
  "indeed_posting_data": {},
  "hiring_team": [],
  "pipeline_stages": null,
  "is_satellite": false,
  "parent_job_id": null,
  "created_at": 1711036800,
  "updated_at": 1711036800
}

List job hiring team

Returns users currently assigned to the job hiring team. Useful for notification routing and collaboration tooling.

Path Parameters
  • id
    Type: string Pattern: ^[A-Za-z0-9_-]+$
    required

    Job ID (numeric) or alias

Responses
  • Hiring team

    Type: object
    • hiring_team
      Type: array object[] · JobHiringTeamMember[]
      required

      Array of hiring team members.

      • full_name
        Type: string
        required

        User full name.

      • id
        Type: integer
        required

        User ID.

      • email
        Type: string | null

        User email.

      • role
        Type: string | null

        Role on hiring team (e.g. hiring_manager, recruiter).

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/jobs/{id}/hiring-team
curl 'https://api.100hires.com/v2/jobs/{id}/hiring-team' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "hiring_team": [
    {
      "id": 5,
      "full_name": "Sarah Connor",
      "email": "sarah@example.com",
      "role": "hiring_manager"
    }
  ]
}

Add hiring team member

Adds a company member to job hiring team assignments. Use in workflow setup and ownership automation.

Path Parameters
  • id
    Type: string Pattern: ^[A-Za-z0-9_-]+$
    required

    Job ID (numeric) or alias

Body
required
application/json
  • user_id
    Type: integer
    required

    User ID to add to the hiring team.

Responses
  • Hiring team

    Type: object
    • hiring_team
      Type: array object[] · JobHiringTeamMember[]
      required

      Array of hiring team members.

      • full_name
        Type: string
        required

        User full name.

      • id
        Type: integer
        required

        User ID.

      • email
        Type: string | null

        User email.

      • role
        Type: string | null

        Role on hiring team (e.g. hiring_manager, recruiter).

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/jobs/{id}/hiring-team
curl 'https://api.100hires.com/v2/jobs/{id}/hiring-team' \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "user_id": 1
}'
{
  "hiring_team": [
    {
      "id": 5,
      "full_name": "Sarah Connor",
      "email": "sarah@example.com",
      "role": "hiring_manager"
    }
  ]
}

List job webhooks

Lists webhooks configured for a job-level event stream. Use to audit subscriptions and deployment state.

Path Parameters
  • id
    Type: string Pattern: ^[A-Za-z0-9_-]+$
    required

    Job ID (numeric) or alias

Responses
  • Job webhooks

    Type: object
    • pagination
      Type: object · Pagination
      required
      • page
        Type: integer
        required

        Current page number.

      • page_count
        Type: integer
        required

        Total number of pages.

      • page_size
        Type: integer
        required

        Items per page.

      • total_count
        Type: integer
        required

        Total number of items.

    • webhooks
      Type: array object[] · Webhook[]
      required

      Array of webhooks.

      • id
        Type: integer

        Unique identifier

      • url
        Type: string

        Endpoint URL that receives webhook event payloads

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/jobs/{id}/webhooks
curl 'https://api.100hires.com/v2/jobs/{id}/webhooks' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "webhooks": [
    {
      "id": 1,
      "url": "https://example.com/webhook"
    }
  ],
  "pagination": {
    "page_size": 20,
    "page_count": 1,
    "page": 1,
    "total_count": 1
  }
}

Create job webhook

Registers a webhook URL for job-related events. Core step for outbound integration setup.

Path Parameters
  • id
    Type: string Pattern: ^[A-Za-z0-9_-]+$
    required

    Job ID (numeric) or alias

Body
required
application/json
  • url
    Type: string
    max length:  
    2048
    required

    Webhook destination URL. Must be HTTPS.

Responses
  • Created webhook. signing_secret is returned only here — store it securely.

    Type: object
    • id
      Type: integer

      Unique identifier

    • signing_secret
      Type: string

      HMAC-SHA256 signing secret for this webhook, used to verify the x-hires-signature-v2 header. Returned ONLY in create and rotate-secret responses — store it securely, it is never shown again.

    • url
      Type: string

      Endpoint URL that receives webhook event payloads

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/jobs/{id}/webhooks
curl 'https://api.100hires.com/v2/jobs/{id}/webhooks' \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "url": ""
}'
{
  "id": 1,
  "url": "https://example.com/webhook",
  "signing_secret": "3f9a8b7c6d5e4f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a"
}

Rotate job webhook signing secret

Rotates the webhook's signing secret with zero downtime. The previous secret remains valid for a grace window so both old and new x-hires-signature-v2 signatures are accepted while you switch over.

Path Parameters
  • id
    Type: string Pattern: ^[A-Za-z0-9_-]+$
    required

    Job ID (numeric) or alias

  • webhook_id
    Type: integer
    required

    Webhook subscription ID.

Responses
  • New signing secret (the previous one stays valid for a grace window).

    Type: object
    • id
      Type: integer

      Unique identifier

    • signing_secret
      Type: string

      HMAC-SHA256 signing secret for this webhook, used to verify the x-hires-signature-v2 header. Returned ONLY in create and rotate-secret responses — store it securely, it is never shown again.

    • url
      Type: string

      Endpoint URL that receives webhook event payloads

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/jobs/{id}/webhooks/{webhook_id}/rotate-secret
curl 'https://api.100hires.com/v2/jobs/{id}/webhooks/1/rotate-secret' \
  --request POST \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "id": 1,
  "url": "https://example.com/webhook",
  "signing_secret": "9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c"
}

Delete job webhook

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

Path Parameters
  • id
    Type: string Pattern: ^[A-Za-z0-9_-]+$
    required

    Job ID (numeric) or alias

  • webhook_id
    Type: integer
    required

    Webhook subscription ID.

Responses
  • Deleted

    Type: object
    • success
      Type: boolean
      required

      Always true on success.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for delete/jobs/{id}/webhooks/{webhook_id}
curl 'https://api.100hires.com/v2/jobs/{id}/webhooks/1' \
  --request DELETE \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "success": true
}

Get job boards state for job

Returns current board publication state for a specific job. Useful for distribution dashboards and posting audits.

Path Parameters
  • id
    Type: string Pattern: ^[A-Za-z0-9_-]+$
    required

    Job ID (numeric) or alias

Responses
  • Job boards

    Type: object
    • boards
      Type: array object[] · JobBoardItem[]
      required

      Array of job boards for this job.

      • indeed_posting_url
        Type: string nullable

        Public Indeed posting URL when the job has been sourced/posted to Indeed; null otherwise. Populated only for the Indeed board.

      • name
        Type: string

        Board identifier.

      • title
        Type: string

        Board display name.

      • ziprecruiter_posting_url
        Type: string nullable

        Public ZipRecruiter posting URL (the API preview_url) when the job has been posted to ZipRecruiter; null otherwise. Populated only for the ZipRecruiter board.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/jobs/{id}/job-boards
curl 'https://api.100hires.com/v2/jobs/{id}/job-boards' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "boards": [
    {
      "name": "indeed",
      "title": "Indeed"
    },
    {
      "name": "linkedin",
      "title": "LinkedIn"
    }
  ]
}

Activate boards for job

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

Path Parameters
  • id
    Type: string Pattern: ^[A-Za-z0-9_-]+$
    required

    Job ID (numeric) or alias

Body
application/json
  • boards
    Type: array string[]

    Array of board IDs to activate or deactivate.

Responses
  • Job boards

    Type: object
    • boards
      Type: array object[] · JobBoardItem[]
      required

      Array of job boards for this job.

      • indeed_posting_url
        Type: string nullable

        Public Indeed posting URL when the job has been sourced/posted to Indeed; null otherwise. Populated only for the Indeed board.

      • name
        Type: string

        Board identifier.

      • title
        Type: string

        Board display name.

      • ziprecruiter_posting_url
        Type: string nullable

        Public ZipRecruiter posting URL (the API preview_url) when the job has been posted to ZipRecruiter; null otherwise. Populated only for the ZipRecruiter board.

  • Bad request

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/jobs/{id}/job-boards
curl 'https://api.100hires.com/v2/jobs/{id}/job-boards' \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "boards": [
    ""
  ]
}'
{
  "boards": [
    {
      "name": "indeed",
      "title": "Indeed"
    },
    {
      "name": "linkedin",
      "title": "LinkedIn"
    }
  ]
}

Deactivate boards for job

Stops selected board publications for a job.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Body
application/json
  • boards
    Type: array string[]

    Array of board IDs to activate or deactivate.

Responses
  • Job boards

    Type: object
    • boards
      Type: array object[] · JobBoardItem[]
      required

      Array of job boards for this job.

      • indeed_posting_url
        Type: string nullable

        Public Indeed posting URL when the job has been sourced/posted to Indeed; null otherwise. Populated only for the Indeed board.

      • name
        Type: string

        Board identifier.

      • title
        Type: string

        Board display name.

      • ziprecruiter_posting_url
        Type: string nullable

        Public ZipRecruiter posting URL (the API preview_url) when the job has been posted to ZipRecruiter; null otherwise. Populated only for the ZipRecruiter board.

  • Bad request

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for delete/jobs/{id}/job-boards
curl https://api.100hires.com/v2/jobs/1/job-boards \
  --request DELETE \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "boards": [
    ""
  ]
}'
{
  "boards": [
    {
      "name": "indeed",
      "title": "Indeed"
    },
    {
      "name": "linkedin",
      "title": "LinkedIn"
    }
  ]
}

Get boards state for multiple jobs

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

Query Parameters
  • jobs
    Type: array integer[]

    Array of job IDs to filter or batch-operate on.

Responses
  • Job boards by jobs

    Type: object
    • jobs
      Type: array object[]
      required

      Array of per-job board results.

      • boards
        Type: array object[] · JobBoardItem[]
        required
        • indeed_posting_url
          Type: string nullable

          Public Indeed posting URL when the job has been sourced/posted to Indeed; null otherwise. Populated only for the Indeed board.

        • name
          Type: string

          Board identifier.

        • title
          Type: string

          Board display name.

        • ziprecruiter_posting_url
          Type: string nullable

          Public ZipRecruiter posting URL (the API preview_url) when the job has been posted to ZipRecruiter; null otherwise. Populated only for the ZipRecruiter board.

      • job_id
        Type: integer
        required

        Integer numbers.

  • Bad request

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/jobs/batch-job-boards
curl https://api.100hires.com/v2/jobs/batch-job-boards \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "jobs": [
    {
      "job_id": 10,
      "boards": [
        {
          "name": "indeed",
          "title": "Indeed"
        },
        {
          "name": "linkedin",
          "title": "LinkedIn"
        }
      ]
    }
  ]
}

Activate boards for multiple jobs

Activates board publication for multiple jobs in one request.

Body
required
application/json
  • jobs
    Type: array integer[]
    required

    Array of job IDs.

  • boards
    Type: array string[]

    Array of board IDs.

Responses
  • Job boards by jobs

    Type: object
    • jobs
      Type: array object[]
      required

      Array of per-job board results.

      • boards
        Type: array object[] · JobBoardItem[]
        required
        • indeed_posting_url
          Type: string nullable

          Public Indeed posting URL when the job has been sourced/posted to Indeed; null otherwise. Populated only for the Indeed board.

        • name
          Type: string

          Board identifier.

        • title
          Type: string

          Board display name.

        • ziprecruiter_posting_url
          Type: string nullable

          Public ZipRecruiter posting URL (the API preview_url) when the job has been posted to ZipRecruiter; null otherwise. Populated only for the ZipRecruiter board.

      • job_id
        Type: integer
        required

        Integer numbers.

  • Bad request

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/jobs/batch-job-boards
curl https://api.100hires.com/v2/jobs/batch-job-boards \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "jobs": [
    1
  ],
  "boards": [
    ""
  ]
}'
{
  "jobs": [
    {
      "job_id": 10,
      "boards": [
        {
          "name": "indeed",
          "title": "Indeed"
        },
        {
          "name": "linkedin",
          "title": "LinkedIn"
        }
      ]
    }
  ]
}

Deactivate boards for multiple jobs

Deactivates board publication for multiple jobs in one request.

Body
required
application/json
  • jobs
    Type: array integer[]
    required

    Array of job IDs.

  • boards
    Type: array string[]

    Array of board IDs.

Responses
  • Job boards by jobs

    Type: object
    • jobs
      Type: array object[]
      required

      Array of per-job board results.

      • boards
        Type: array object[] · JobBoardItem[]
        required
        • indeed_posting_url
          Type: string nullable

          Public Indeed posting URL when the job has been sourced/posted to Indeed; null otherwise. Populated only for the Indeed board.

        • name
          Type: string

          Board identifier.

        • title
          Type: string

          Board display name.

        • ziprecruiter_posting_url
          Type: string nullable

          Public ZipRecruiter posting URL (the API preview_url) when the job has been posted to ZipRecruiter; null otherwise. Populated only for the ZipRecruiter board.

      • job_id
        Type: integer
        required

        Integer numbers.

  • Bad request

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for delete/jobs/batch-job-boards
curl https://api.100hires.com/v2/jobs/batch-job-boards \
  --request DELETE \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "jobs": [
    1
  ],
  "boards": [
    ""
  ]
}'
{
  "jobs": [
    {
      "job_id": 10,
      "boards": [
        {
          "name": "indeed",
          "title": "Indeed"
        },
        {
          "name": "linkedin",
          "title": "LinkedIn"
        }
      ]
    }
  ]
}

Evaluations

Filled evaluation forms with scores and answers submitted by interviewers for applications.

List filled evaluation forms for application

Returns all filled evaluation forms for an application. Each evaluation includes the evaluator, score, and summary text.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Query Parameters
  • view
    Type: stringenum

    Response shape selector for list endpoints. full (default) returns every field — backward-compatible with pre-existing clients. summary returns a thinned payload designed for agent-friendly list browsing: heavy fields (description HTML, embedded profile answers, full message bodies, embedded relations, etc.) are omitted or replaced with *_preview truncations. Use summary when paging through large result sets and fetch a single record with the corresponding GET /{resource}/{id} endpoint when full data is needed.

    • full
    • summary
Responses
  • List of filled evaluations

    Type: object
    • evaluations
      Type: array object[] · EvaluationSummary[]
      required

      Array of evaluation summaries.

      • application_id
        Type: integer
        required

        Application ID.

      • created_at
        Type: integer | nullFormat: int64
        required

        Unix timestamp (seconds)

      • form_id
        Type: integer
        required

        Source form template ID.

      • form_name
        Type: string
        required

        Form name.

      • id
        Type: integer
        required

        Evaluation form ID.

      • summary_score
        Type: stringenum
        required

        Average score.

        • strong-yes
        • probably-yes
        • neutral
        • probably-no
        • strong-no
      • updated_at
        Type: integer | nullFormat: int64
        required

        Unix timestamp (seconds)

      • user
        Type: object
        required

        Evaluator details.

        • full_name
          Type: string
        • id
          Type: integer

          Integer numbers.

      • form_url_backoffice
        Type: stringFormat: uri

        Absolute backoffice URL to edit the source evaluation form template in the 100Hires recruiter app.

      • summary_text
        Type: string | null

        Evaluator summary. Present only when view=full (default); replaced with summary_text_preview when view=summary.

      • summary_text_preview
        Type: string | null

        First 200 UTF-8 characters of the evaluator summary with a ... suffix when truncated. Present only when view=summary; replaces summary_text to keep list responses inside the agent context budget.

      • url_backoffice
        Type: stringFormat: uri

        Absolute backoffice URL of the candidate's evaluations tab in the 100Hires recruiter app where this evaluation appears. Use to render deep-links in agent UIs.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/applications/{id}/evaluation-forms
curl https://api.100hires.com/v2/applications/1/evaluation-forms \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "evaluations": [
    {
      "id": 301,
      "application_id": 501,
      "form_id": 5,
      "form_name": "Technical Interview",
      "user": {
        "id": 12,
        "full_name": "Alice Johnson"
      },
      "summary_score": "strong-yes",
      "summary_text": "Excellent problem-solving skills and strong system design knowledge.",
      "created_at": 1711209600,
      "updated_at": 1711209600
    },
    {
      "id": 302,
      "application_id": 501,
      "form_id": 6,
      "form_name": "Culture Fit",
      "user": {
        "id": 15,
        "full_name": "Bob Williams"
      },
      "summary_score": "probably-yes",
      "summary_text": "Good team player, aligns well with company values.",
      "created_at": 1711296000,
      "updated_at": 1711296000
    }
  ]
}

Get filled evaluation form with answers

Returns a single filled evaluation form with all answers. Use for detailed review of evaluator feedback.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Responses
  • Evaluation with answers

    • answers
      Type: array object[] · EvaluationAnswer[]
      required
      • question_id
        Type: integer
        required

        Question ID.

      • question_text
        Type: string
        required

        Question text.

      • value
        Type: string | null
        required

        Answer value. Null if unanswered.

    • application_id
      Type: integer
      required

      Application ID.

    • created_at
      Type: integer | nullFormat: int64
      required

      Unix timestamp (seconds)

    • form_id
      Type: integer
      required

      Source form template ID.

    • form_name
      Type: string
      required

      Form name.

    • id
      Type: integer
      required

      Evaluation form ID.

    • summary_score
      Type: stringenum
      required

      Average score.

      • strong-yes
      • probably-yes
      • neutral
      • probably-no
      • strong-no
    • updated_at
      Type: integer | nullFormat: int64
      required

      Unix timestamp (seconds)

    • user
      Type: object
      required

      Evaluator details.

      • full_name
        Type: string
      • id
        Type: integer

        Integer numbers.

    • form_url_backoffice
      Type: stringFormat: uri

      Absolute backoffice URL to edit the source evaluation form template in the 100Hires recruiter app.

    • summary_text
      Type: string | null

      Evaluator summary. Present only when view=full (default); replaced with summary_text_preview when view=summary.

    • summary_text_preview
      Type: string | null

      First 200 UTF-8 characters of the evaluator summary with a ... suffix when truncated. Present only when view=summary; replaces summary_text to keep list responses inside the agent context budget.

    • url_backoffice
      Type: stringFormat: uri

      Absolute backoffice URL of the candidate's evaluations tab in the 100Hires recruiter app where this evaluation appears. Use to render deep-links in agent UIs.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/evaluation-forms/{id}
curl https://api.100hires.com/v2/evaluation-forms/1 \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "id": 301,
  "application_id": 501,
  "form_id": 5,
  "form_name": "Technical Interview",
  "user": {
    "id": 12,
    "full_name": "Alice Johnson"
  },
  "summary_score": "strong-yes",
  "summary_text": "Excellent problem-solving skills and strong system design knowledge.",
  "created_at": 1711209600,
  "updated_at": 1711209600,
  "answers": [
    {
      "question_id": 1,
      "question_text": "How would you rate the candidate's coding skills?",
      "value": "5"
    },
    {
      "question_id": 2,
      "question_text": "How well does the candidate communicate technical concepts?",
      "value": "4"
    },
    {
      "question_id": 3,
      "question_text": "Additional comments",
      "value": "Strong candidate with deep backend expertise."
    }
  ]
}

Notes

Discussion notes linked to candidates for recruiter collaboration and context sharing.

List notes by candidate

Returns paginated discussion notes for a candidate. Use for shared recruiter context and timeline synchronization.

Query Parameters
  • candidate_id
    Type: string Pattern: ^[A-Za-z0-9_-]+$
    required

    Candidate ID (numeric) or alias

  • include
    Type: string

    Comma-separated list of related resources to include. Supported: user — author details, candidate — full candidate payload with url_backoffice for UI deep-linking.

  • page
    Type: integer
    min:  
    1

    Page number (1-based). Defaults to 1.

  • size
    Type: integer
    min:  
    1
    max:  
    100

    Number of items per page (1–100). Defaults to 20.

  • view
    Type: stringenum

    Response shape selector for list endpoints. full (default) returns every field — backward-compatible with pre-existing clients. summary returns a thinned payload designed for agent-friendly list browsing: heavy fields (description HTML, embedded profile answers, full message bodies, embedded relations, etc.) are omitted or replaced with *_preview truncations. Use summary when paging through large result sets and fetch a single record with the corresponding GET /{resource}/{id} endpoint when full data is needed.

    • full
    • summary
Responses
  • Note list

    Type: object
    • notes
      Type: array object[] · Note[]
      required

      Array of notes.

      • candidate_id
        Type: integer
        required

        ID of the candidate this note belongs to

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • id
        Type: integer
        required

        Unique identifier

      • updated_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • user_id
        Type: integer
        required

        Author user ID (always present)

      • visibility
        Type: string
        required

        Visibility: 'all' (visible to team) or 'private' (author only)

      • body
        Type: string

        Note content (may contain HTML). Mentioned users are wrapped in <span class="mention-area"> markup. Present only when view=full (default); replaced with body_preview when view=summary.

      • body_preview
        Type: string

        First 200 UTF-8 characters of the note content with a ... suffix when truncated. Present only when view=summary; replaces body to keep list responses inside the agent context budget.

      • candidate
        Type: object · Candidate nullable

        Embedded candidate payload (included when requested via include=candidate). Use candidate.url_backoffice to deep-link UI widgets to the candidate profile in the recruiter app.

        • company_id
          Type: integer
          required

          ID of the company this candidate belongs to

        • created_at
          Type: integerFormat: int64
          required

          Unix timestamp (seconds)

        • id
          Type: integer
          required

          Unique identifier

        • updated_at
          Type: integerFormat: int64
          required

          Unix timestamp (seconds)

        • alias
          Type: string | null

          Short alphanumeric alias used in profile URLs. Use this to build candidate profile links — https://app.100hires.com/candidate/{alias}. Also accepted as {id} in API requests.

        • applications
          Type: array object[] · CandidateApplicationSummary[]

          Summary of all applications this candidate has across jobs

          • id
            Type: integer
            required

            Application ID.

          • job
            Type: object
            required

            Job summary (id, title, status).

            • id
              Type: integer
              required

              Integer numbers.

            • title
              Type: string
              required
          • stage
            Type: object · IdName nullable
            • id
              Type: integer
              required

              Unique identifier.

            • name
              Type: string
              required

              Display name.

        • days_since_last_message
          Type: integer | null

          Number of whole days since the last message. Computed at request time. Null if no messages exist.

        • emails
          Type: array string[] | null nullable

          List of candidate email addresses

        • first_name
          Type: string | null

          Candidate's first name

        • ip
          Type: string | null

          IP address from which the candidate applied

        • last_message_at
          Type: integer | nullFormat: int64

          Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.

        • last_name
          Type: string | null

          Candidate's last name

        • origin
          Type: object · IdName nullable

          Where the candidate originally came from (e.g. job board name)

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • phones
          Type: array string[] | null nullable

          List of candidate phone numbers

        • profile
          Type: array object[] · ProfileAnswer[]

          Candidate profile field answers (application form responses). Present only when view=full (default); omitted entirely when view=summary to keep list responses inside the agent context budget — a single candidate can carry dozens of free-form answers.

          • question_id
            Type: integer
            required

            Question ID.

          • question_text
            Type: string
            required

            Question label.

          • value
            required

            Answer value (string, array, or null).

        • source
          Type: object · IdName nullable

          How the candidate was sourced (e.g. LinkedIn, Referral)

          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

        • url_backoffice
          Type: stringFormat: uri

          Absolute backoffice URL of the candidate in the 100Hires recruiter app. Use to render deep-links in agent UIs.

      • url_backoffice
        Type: stringFormat: uri

        Absolute backoffice URL to the candidate's discussion tab where this note appears in the 100Hires recruiter app. Use to render deep-links in agent UIs.

      • user
        Type: object · NoteUser

        Author details (only with include=user)

        • full_name
          Type: string
          required

          User full name.

        • id
          Type: integer
          required

          User ID.

        • photo
          Type: string | null

          Profile photo URL.

    • pagination
      Type: object · Pagination
      required
      • page
        Type: integer
        required

        Current page number.

      • page_count
        Type: integer
        required

        Total number of pages.

      • page_size
        Type: integer
        required

        Items per page.

      • total_count
        Type: integer
        required

        Total number of items.

  • Bad request

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/notes
curl 'https://api.100hires.com/v2/notes?candidate_id=' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "notes": [
    {
      "id": 67890,
      "candidate_id": 12345,
      "user_id": 1,
      "body": "Strong technical background, moving to next round.",
      "visibility": "all",
      "created_at": 1711036800,
      "updated_at": 1711036800
    }
  ],
  "pagination": {
    "page_size": 25,
    "page_count": 1,
    "page": 1,
    "total_count": 1
  }
}

Create note

Creates a new discussion note for a candidate. Supports visibility control (all or private) and @mentions with email notifications.

Query Parameters
  • include
    Type: string

    Comma-separated list of related resources to include. Supported: user — author details, candidate — full candidate payload with url_backoffice for UI deep-linking.

Body
required
application/json
  • body
    Type: string
    required

    Note content. Supports HTML.

  • candidate_id
    Type: string Pattern: ^[A-Za-z0-9_-]+$
    required

    Candidate ID (numeric) or alias

  • mention_user_ids
    Type: array integer[]

    Array of user IDs to mention. Mentioned users receive email notifications and their @name or @login references in the body are replaced with HTML mention markup.

  • user_id
    Type: integer

    Author user ID. If omitted, the authenticated user is used

  • visibility
    Type: string

    Visibility: 'all' (default) or 'private'

Responses
  • Created note

    Type: object
    • candidate_id
      Type: integer
      required

      ID of the candidate this note belongs to

    • created_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • id
      Type: integer
      required

      Unique identifier

    • updated_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • user_id
      Type: integer
      required

      Author user ID (always present)

    • visibility
      Type: string
      required

      Visibility: 'all' (visible to team) or 'private' (author only)

    • body
      Type: string

      Note content (may contain HTML). Mentioned users are wrapped in <span class="mention-area"> markup. Present only when view=full (default); replaced with body_preview when view=summary.

    • body_preview
      Type: string

      First 200 UTF-8 characters of the note content with a ... suffix when truncated. Present only when view=summary; replaces body to keep list responses inside the agent context budget.

    • candidate
      Type: object · Candidate nullable

      Embedded candidate payload (included when requested via include=candidate). Use candidate.url_backoffice to deep-link UI widgets to the candidate profile in the recruiter app.

      • company_id
        Type: integer
        required

        ID of the company this candidate belongs to

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • id
        Type: integer
        required

        Unique identifier

      • updated_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • alias
        Type: string | null

        Short alphanumeric alias used in profile URLs. Use this to build candidate profile links — https://app.100hires.com/candidate/{alias}. Also accepted as {id} in API requests.

      • applications
        Type: array object[] · CandidateApplicationSummary[]

        Summary of all applications this candidate has across jobs

        • id
          Type: integer
          required

          Application ID.

        • job
          Type: object
          required

          Job summary (id, title, status).

          • id
            Type: integer
            required

            Integer numbers.

          • title
            Type: string
            required
        • stage
          Type: object · IdName nullable
          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

      • days_since_last_message
        Type: integer | null

        Number of whole days since the last message. Computed at request time. Null if no messages exist.

      • emails
        Type: array string[] | null nullable

        List of candidate email addresses

      • first_name
        Type: string | null

        Candidate's first name

      • ip
        Type: string | null

        IP address from which the candidate applied

      • last_message_at
        Type: integer | nullFormat: int64

        Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.

      • last_name
        Type: string | null

        Candidate's last name

      • origin
        Type: object · IdName nullable

        Where the candidate originally came from (e.g. job board name)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • phones
        Type: array string[] | null nullable

        List of candidate phone numbers

      • profile
        Type: array object[] · ProfileAnswer[]

        Candidate profile field answers (application form responses). Present only when view=full (default); omitted entirely when view=summary to keep list responses inside the agent context budget — a single candidate can carry dozens of free-form answers.

        • question_id
          Type: integer
          required

          Question ID.

        • question_text
          Type: string
          required

          Question label.

        • value
          required

          Answer value (string, array, or null).

      • source
        Type: object · IdName nullable

        How the candidate was sourced (e.g. LinkedIn, Referral)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • url_backoffice
        Type: stringFormat: uri

        Absolute backoffice URL of the candidate in the 100Hires recruiter app. Use to render deep-links in agent UIs.

    • url_backoffice
      Type: stringFormat: uri

      Absolute backoffice URL to the candidate's discussion tab where this note appears in the 100Hires recruiter app. Use to render deep-links in agent UIs.

    • user
      Type: object · NoteUser

      Author details (only with include=user)

      • full_name
        Type: string
        required

        User full name.

      • id
        Type: integer
        required

        User ID.

      • photo
        Type: string | null

        Profile photo URL.

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/notes
curl https://api.100hires.com/v2/notes \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "candidate_id": 12345,
  "body": "Hey @Alice Smith, please review this candidate.",
  "visibility": "all",
  "mention_user_ids": [
    42
  ]
}'
{
  "id": 67890,
  "candidate_id": 12345,
  "user_id": 1,
  "body": "Hey <span class=\"mention-area\" contenteditable=\"false\"><span class=\"highlight\"><span class=\"mentiony-link\">Alice Smith</span></span></span>, please review this candidate.",
  "visibility": "all",
  "created_at": 1711036800,
  "updated_at": 1711036800
}

Get note

Returns a single note with author and visibility metadata. Use include=user to load author details, include=candidate to embed the full candidate payload (with url_backoffice).

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Query Parameters
  • include
    Type: string

    Comma-separated list of related resources to include. Supported: user — author details, candidate — full candidate payload with url_backoffice for UI deep-linking.

Responses
  • Note

    Type: object
    • candidate_id
      Type: integer
      required

      ID of the candidate this note belongs to

    • created_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • id
      Type: integer
      required

      Unique identifier

    • updated_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • user_id
      Type: integer
      required

      Author user ID (always present)

    • visibility
      Type: string
      required

      Visibility: 'all' (visible to team) or 'private' (author only)

    • body
      Type: string

      Note content (may contain HTML). Mentioned users are wrapped in <span class="mention-area"> markup. Present only when view=full (default); replaced with body_preview when view=summary.

    • body_preview
      Type: string

      First 200 UTF-8 characters of the note content with a ... suffix when truncated. Present only when view=summary; replaces body to keep list responses inside the agent context budget.

    • candidate
      Type: object · Candidate nullable

      Embedded candidate payload (included when requested via include=candidate). Use candidate.url_backoffice to deep-link UI widgets to the candidate profile in the recruiter app.

      • company_id
        Type: integer
        required

        ID of the company this candidate belongs to

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • id
        Type: integer
        required

        Unique identifier

      • updated_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • alias
        Type: string | null

        Short alphanumeric alias used in profile URLs. Use this to build candidate profile links — https://app.100hires.com/candidate/{alias}. Also accepted as {id} in API requests.

      • applications
        Type: array object[] · CandidateApplicationSummary[]

        Summary of all applications this candidate has across jobs

        • id
          Type: integer
          required

          Application ID.

        • job
          Type: object
          required

          Job summary (id, title, status).

          • id
            Type: integer
            required

            Integer numbers.

          • title
            Type: string
            required
        • stage
          Type: object · IdName nullable
          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

      • days_since_last_message
        Type: integer | null

        Number of whole days since the last message. Computed at request time. Null if no messages exist.

      • emails
        Type: array string[] | null nullable

        List of candidate email addresses

      • first_name
        Type: string | null

        Candidate's first name

      • ip
        Type: string | null

        IP address from which the candidate applied

      • last_message_at
        Type: integer | nullFormat: int64

        Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.

      • last_name
        Type: string | null

        Candidate's last name

      • origin
        Type: object · IdName nullable

        Where the candidate originally came from (e.g. job board name)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • phones
        Type: array string[] | null nullable

        List of candidate phone numbers

      • profile
        Type: array object[] · ProfileAnswer[]

        Candidate profile field answers (application form responses). Present only when view=full (default); omitted entirely when view=summary to keep list responses inside the agent context budget — a single candidate can carry dozens of free-form answers.

        • question_id
          Type: integer
          required

          Question ID.

        • question_text
          Type: string
          required

          Question label.

        • value
          required

          Answer value (string, array, or null).

      • source
        Type: object · IdName nullable

        How the candidate was sourced (e.g. LinkedIn, Referral)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • url_backoffice
        Type: stringFormat: uri

        Absolute backoffice URL of the candidate in the 100Hires recruiter app. Use to render deep-links in agent UIs.

    • url_backoffice
      Type: stringFormat: uri

      Absolute backoffice URL to the candidate's discussion tab where this note appears in the 100Hires recruiter app. Use to render deep-links in agent UIs.

    • user
      Type: object · NoteUser

      Author details (only with include=user)

      • full_name
        Type: string
        required

        User full name.

      • id
        Type: integer
        required

        User ID.

      • photo
        Type: string | null

        Profile photo URL.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/notes/{id}
curl https://api.100hires.com/v2/notes/1 \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "id": 67890,
  "candidate_id": 12345,
  "user_id": 1,
  "body": "Strong technical background, moving to next round.",
  "visibility": "all",
  "created_at": 1711036800,
  "updated_at": 1711036800,
  "user": {
    "id": 1,
    "full_name": "Alice Smith",
    "photo": "https://cdn.100hires.com/photos/alice.jpg"
  }
}

Update note

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

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Query Parameters
  • include
    Type: string

    Comma-separated list of related resources to include. Supported: user — author details, candidate — full candidate payload with url_backoffice for UI deep-linking.

Body
required
application/json
  • body
    Type: string

    Note content. Supports HTML.

  • visibility
    Type: string

    Visibility: 'all' (default) or 'private'.

Responses
  • Updated note

    Type: object
    • candidate_id
      Type: integer
      required

      ID of the candidate this note belongs to

    • created_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • id
      Type: integer
      required

      Unique identifier

    • updated_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • user_id
      Type: integer
      required

      Author user ID (always present)

    • visibility
      Type: string
      required

      Visibility: 'all' (visible to team) or 'private' (author only)

    • body
      Type: string

      Note content (may contain HTML). Mentioned users are wrapped in <span class="mention-area"> markup. Present only when view=full (default); replaced with body_preview when view=summary.

    • body_preview
      Type: string

      First 200 UTF-8 characters of the note content with a ... suffix when truncated. Present only when view=summary; replaces body to keep list responses inside the agent context budget.

    • candidate
      Type: object · Candidate nullable

      Embedded candidate payload (included when requested via include=candidate). Use candidate.url_backoffice to deep-link UI widgets to the candidate profile in the recruiter app.

      • company_id
        Type: integer
        required

        ID of the company this candidate belongs to

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • id
        Type: integer
        required

        Unique identifier

      • updated_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • alias
        Type: string | null

        Short alphanumeric alias used in profile URLs. Use this to build candidate profile links — https://app.100hires.com/candidate/{alias}. Also accepted as {id} in API requests.

      • applications
        Type: array object[] · CandidateApplicationSummary[]

        Summary of all applications this candidate has across jobs

        • id
          Type: integer
          required

          Application ID.

        • job
          Type: object
          required

          Job summary (id, title, status).

          • id
            Type: integer
            required

            Integer numbers.

          • title
            Type: string
            required
        • stage
          Type: object · IdName nullable
          • id
            Type: integer
            required

            Unique identifier.

          • name
            Type: string
            required

            Display name.

      • days_since_last_message
        Type: integer | null

        Number of whole days since the last message. Computed at request time. Null if no messages exist.

      • emails
        Type: array string[] | null nullable

        List of candidate email addresses

      • first_name
        Type: string | null

        Candidate's first name

      • ip
        Type: string | null

        IP address from which the candidate applied

      • last_message_at
        Type: integer | nullFormat: int64

        Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.

      • last_name
        Type: string | null

        Candidate's last name

      • origin
        Type: object · IdName nullable

        Where the candidate originally came from (e.g. job board name)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • phones
        Type: array string[] | null nullable

        List of candidate phone numbers

      • profile
        Type: array object[] · ProfileAnswer[]

        Candidate profile field answers (application form responses). Present only when view=full (default); omitted entirely when view=summary to keep list responses inside the agent context budget — a single candidate can carry dozens of free-form answers.

        • question_id
          Type: integer
          required

          Question ID.

        • question_text
          Type: string
          required

          Question label.

        • value
          required

          Answer value (string, array, or null).

      • source
        Type: object · IdName nullable

        How the candidate was sourced (e.g. LinkedIn, Referral)

        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • url_backoffice
        Type: stringFormat: uri

        Absolute backoffice URL of the candidate in the 100Hires recruiter app. Use to render deep-links in agent UIs.

    • url_backoffice
      Type: stringFormat: uri

      Absolute backoffice URL to the candidate's discussion tab where this note appears in the 100Hires recruiter app. Use to render deep-links in agent UIs.

    • user
      Type: object · NoteUser

      Author details (only with include=user)

      • full_name
        Type: string
        required

        User full name.

      • id
        Type: integer
        required

        User ID.

      • photo
        Type: string | null

        Profile photo URL.

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for put/notes/{id}
curl https://api.100hires.com/v2/notes/1 \
  --request PUT \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "body": "",
  "visibility": ""
}'
{
  "id": 67890,
  "candidate_id": 12345,
  "user_id": 1,
  "body": "Updated: Strong technical background, scheduled final interview.",
  "visibility": "all",
  "created_at": 1711036800,
  "updated_at": 1711123200
}

Delete note

Deletes a note from active collaboration views. Use for moderation policies and data cleanup operations.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Responses
  • Deleted

    Type: object
    • success
      Type: boolean
      required

      Always true on success.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for delete/notes/{id}
curl https://api.100hires.com/v2/notes/1 \
  --request DELETE \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "success": true
}

Messages

List candidate messages

Returns paginated email and messaging history for a candidate. Useful for communication timeline and audit trails. Use is_scheduled=1 to filter only scheduled (pending) messages.

Path Parameters
  • id
    Type: string Pattern: ^[A-Za-z0-9_-]+$
    required

    Candidate ID (numeric) or alias

Query Parameters
  • page
    Type: integer
    min:  
    1

    Page number (1-based). Defaults to 1.

  • size
    Type: integer
    min:  
    1
    max:  
    100

    Number of items per page (1–100). Defaults to 20.

  • view
    Type: stringenum

    Response shape selector for list endpoints. full (default) returns every field — backward-compatible with pre-existing clients. summary returns a thinned payload designed for agent-friendly list browsing: heavy fields (description HTML, embedded profile answers, full message bodies, embedded relations, etc.) are omitted or replaced with *_preview truncations. Use summary when paging through large result sets and fetch a single record with the corresponding GET /{resource}/{id} endpoint when full data is needed.

    • full
    • summary
  • is_scheduled
    enum
    const:  
    1

    When set to 1, returns only scheduled (not yet sent) messages. Useful for auditing pending outreach.

    • 1
Responses
  • Message list

    Type: object
    • messages
      Type: array · CandidateMessage[]
      required

      Array of messages.

        • type
          Discriminator
          enum
          const:  
          mailbox
          required

          Message type discriminator.

          • mailbox
        • is_sent_by_candidate
          Type: boolean
          required

          Whether the candidate sent this message.

        • message
          Type: object · MailboxMessage
          required
          • autoJobId
            required
            • Type: integer

              Integer numbers.

          • cc
            Type: string
            required

            CC recipients.

          • date
            Type: string
            required

            Message date.

          • from
            Type: string nullable
            required

            Sender address.

          • id
            Type: integer
            required

            Message ID.

          • isNurtured
            Type: boolean
            required

            Whether sent via nurture campaign.

          • opens
            Type: array object[] · MailboxOpenEvent[]
            required

            Array of open tracking events.

            • label
              Type: string
              required

              Open event label.

          • opensCount
            Type: integer
            required

            Number of times opened.

          • schedule
            required
            • Type: stringenum
              const:  
              ''
          • subject
            Type: string
            required

            Message subject.

          • to
            Type: string
            required

            Recipient address.

          • attachments
            Type: array · Attachment[]

            Message attachments. Present only when view=full (default); omitted entirely when view=summary.

            • Type: object · ApiAttachment

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

              • file
                Type: object · AttachmentFile
                required
                • file_ext
                  Type: string
                  required

                  File extension.

                • file_type
                  Type: string
                  required

                  File type category.

                • is_image
                  Type: boolean nullable
                  required

                  Whether the file is an image.

                • orig_file_name
                  Type: string
                  required

                  Original file name.

                • readable_size
                  Type: string
                  required

                  Human-readable file size.

              • relative_time
                Type: string
                required

                Human-readable time since upload (e.g. "2 days ago").

              • url
                Type: stringFormat: uri nullable
                required

                Absolute download URL (e.g. https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit with Authorization: Bearer <API_KEY>.

              • uuid
                Type: stringFormat: uuid
                required

                Unique attachment identifier. Stable across API calls; use in referencing endpoints.

          • body
            Type: string

            Message body content. Present only when view=full (default); omitted entirely when view=summary — message bodies can run into tens of KB.

    • pagination
      Type: object · Pagination
      required
      • page
        Type: integer
        required

        Current page number.

      • page_count
        Type: integer
        required

        Total number of pages.

      • page_size
        Type: integer
        required

        Items per page.

      • total_count
        Type: integer
        required

        Total number of items.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/candidates/{id}/messages
curl 'https://api.100hires.com/v2/candidates/{id}/messages' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "messages": [
    {
      "type": "mailbox",
      "is_sent_by_candidate": false,
      "message": {
        "id": 60001,
        "from": "recruiter@example.com",
        "to": "john.doe@example.com",
        "cc": "",
        "subject": "Exciting opportunity at Acme Corp",
        "body": "<p>Hi John, I came across your profile and wanted to reach out...</p>",
        "date": "2024-03-22 09:00:00",
        "attachments": [],
        "schedule": "",
        "opensCount": 2,
        "opens": [],
        "autoJobId": 123,
        "isNurtured": false
      }
    }
  ],
  "pagination": {
    "page_size": 20,
    "page_count": 1,
    "page": 1,
    "total_count": 1
  }
}

Create scheduled message for candidate

Creates a candidate message through mailbox scheduler. If scheduled_at is omitted, the message is scheduled for 15 minutes after creation instead of being sent immediately.

Path Parameters
  • id
    Type: string Pattern: ^[A-Za-z0-9_-]+$
    required

    Candidate ID (numeric) or alias

Body
required
application/json
  • body
    Type: string
    required

    Email body as HTML.

  • subject
    Type: string
    required

    Email subject line.

  • to
    Type: array string[]
    required

    Primary recipient email addresses.

  • application_id
    Type: integer nullable

    Optional application ID linked to this message.

  • bcc
    Type: array string[]

    Blind carbon-copy recipient email addresses.

  • cc
    Type: array string[]

    Carbon-copy recipient email addresses.

  • from_account_id
    Type: integer nullable

    Optional sending mail account ID. Use GET /users/{user_id}/mail-accounts to list available accounts for a user, or GET /companies/mail-accounts to list all accounts. If omitted, the API key owner's default mail account is used.

  • reply_to_email_id
    Type: integer nullable

    Optional mailbox message ID to reply to.

  • scheduled_at
    Type: integerFormat: int64 nullable

    Unix timestamp (seconds). If omitted, defaults to created time plus 900 seconds.

  • send_in_new_thread
    Type: boolean

    Whether to send the message as a new thread instead of replying in an existing thread.

Responses
  • Created scheduled message

    Type: object
    • message
      Type: object · MailboxMessage
      required

      Mailbox message payload, including envelope, body, attachments, and schedule metadata.

      • autoJobId
        required
        • Type: integer

          Integer numbers.

      • cc
        Type: string
        required

        CC recipients.

      • date
        Type: string
        required

        Message date.

      • from
        Type: string nullable
        required

        Sender address.

      • id
        Type: integer
        required

        Message ID.

      • isNurtured
        Type: boolean
        required

        Whether sent via nurture campaign.

      • opens
        Type: array object[] · MailboxOpenEvent[]
        required

        Array of open tracking events.

        • label
          Type: string
          required

          Open event label.

      • opensCount
        Type: integer
        required

        Number of times opened.

      • schedule
        required
        • Type: stringenum
          const:  
          ''
      • subject
        Type: string
        required

        Message subject.

      • to
        Type: string
        required

        Recipient address.

      • attachments
        Type: array · Attachment[]

        Message attachments. Present only when view=full (default); omitted entirely when view=summary.

        • Type: object · ApiAttachment

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

          • file
            Type: object · AttachmentFile
            required
            • file_ext
              Type: string
              required

              File extension.

            • file_type
              Type: string
              required

              File type category.

            • is_image
              Type: boolean nullable
              required

              Whether the file is an image.

            • orig_file_name
              Type: string
              required

              Original file name.

            • readable_size
              Type: string
              required

              Human-readable file size.

          • relative_time
            Type: string
            required

            Human-readable time since upload (e.g. "2 days ago").

          • url
            Type: stringFormat: uri nullable
            required

            Absolute download URL (e.g. https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit with Authorization: Bearer <API_KEY>.

          • uuid
            Type: stringFormat: uuid
            required

            Unique attachment identifier. Stable across API calls; use in referencing endpoints.

      • body
        Type: string

        Message body content. Present only when view=full (default); omitted entirely when view=summary — message bodies can run into tens of KB.

    • type
      enum
      const:  
      mailbox
      required

      Message channel type for scheduler-backed message endpoints.

      • mailbox
  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/candidates/{id}/messages
curl 'https://api.100hires.com/v2/candidates/{id}/messages' \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "to": [
    "alice@example.com"
  ],
  "subject": "Interview invitation — Senior Engineer",
  "body": "<p>Hi Alice, we'\''d like to invite you for an interview.</p>",
  "from_account_id": 1,
  "application_id": 789
}'
{
  "type": "mailbox",
  "message": {
    "id": 60010,
    "from": "recruiter@example.com",
    "to": "alice@example.com",
    "cc": "",
    "subject": "Interview invitation — Senior Engineer",
    "body": "<p>Hi Alice, we'd like to invite you for an interview.</p>",
    "date": "Mar 22, 2024 09:00 AM",
    "attachments": [],
    "schedule": {
      "senderId": 1,
      "isForceSend": false,
      "isFailed": false,
      "scheduleSendError": null,
      "isScheduled": true,
      "scheduledDay": "Mar 22, 2024",
      "sendAt": 1711098000,
      "humanDatetime": "Mar 22, 2024 09:00 AM",
      "systemDatetime": "2024-03-22 09:00:00"
    },
    "opensCount": 0,
    "opens": [],
    "autoJobId": "",
    "isNurtured": false
  }
}

List messages by mail account

Returns messages sent or scheduled from a specific mail account. Useful for monitoring cold outreach campaigns — check pending queue, delivery history, and plan next sends. Only returns outbound messages (sent and scheduled), not received.

Query Parameters
  • from_account_id
    Type: integer
    required

    ID of the mail account (from GET /companies/mail-accounts or GET /users/{user_id}/mail-accounts).

  • status
    Type: stringenum

    Filter by message status: scheduled (pending send), sent (delivered), all (both). Default: all.

    • scheduled
    • sent
    • all
  • date_from
    Type: integer

    Start of period (unix timestamp, seconds). Filters on scheduled/sent time.

  • date_to
    Type: integer

    End of period (unix timestamp, seconds). Filters on scheduled/sent time.

  • page
    Type: integer
    min:  
    1

    Page number (1-based).

  • size
    Type: integer
    min:  
    1
    max:  
    100

    Number of items per page (1–100).

  • view
    Type: stringenum

    Response shape selector for list endpoints. full (default) returns every field — backward-compatible with pre-existing clients. summary returns a thinned payload designed for agent-friendly list browsing: heavy fields (description HTML, embedded profile answers, full message bodies, embedded relations, etc.) are omitted or replaced with *_preview truncations. Use summary when paging through large result sets and fetch a single record with the corresponding GET /{resource}/{id} endpoint when full data is needed.

    • full
    • summary
Responses
  • Paginated list of messages for the specified mail account.

    Type: object
    • messages
      Type: array object[] · ScheduledEmail[]
      required

      Array of messages for the specified mail account. Each item uses the same format as GET /messages/{id}.

      • message
        Type: object · MailboxMessage
        required

        Mailbox message payload, including envelope, body, attachments, and schedule metadata.

        • autoJobId
          required
          • Type: integer

            Integer numbers.

        • cc
          Type: string
          required

          CC recipients.

        • date
          Type: string
          required

          Message date.

        • from
          Type: string nullable
          required

          Sender address.

        • id
          Type: integer
          required

          Message ID.

        • isNurtured
          Type: boolean
          required

          Whether sent via nurture campaign.

        • opens
          Type: array object[] · MailboxOpenEvent[]
          required

          Array of open tracking events.

          • label
            Type: string
            required

            Open event label.

        • opensCount
          Type: integer
          required

          Number of times opened.

        • schedule
          required
          • Type: stringenum
            const:  
            ''
        • subject
          Type: string
          required

          Message subject.

        • to
          Type: string
          required

          Recipient address.

        • attachments
          Type: array · Attachment[]

          Message attachments. Present only when view=full (default); omitted entirely when view=summary.

          • Type: object · ApiAttachment

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

            • file
              Type: object · AttachmentFile
              required
              • file_ext
                Type: string
                required

                File extension.

              • file_type
                Type: string
                required

                File type category.

              • is_image
                Type: boolean nullable
                required

                Whether the file is an image.

              • orig_file_name
                Type: string
                required

                Original file name.

              • readable_size
                Type: string
                required

                Human-readable file size.

            • relative_time
              Type: string
              required

              Human-readable time since upload (e.g. "2 days ago").

            • url
              Type: stringFormat: uri nullable
              required

              Absolute download URL (e.g. https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit with Authorization: Bearer <API_KEY>.

            • uuid
              Type: stringFormat: uuid
              required

              Unique attachment identifier. Stable across API calls; use in referencing endpoints.

        • body
          Type: string

          Message body content. Present only when view=full (default); omitted entirely when view=summary — message bodies can run into tens of KB.

      • type
        enum
        const:  
        mailbox
        required

        Message channel type for scheduler-backed message endpoints.

        • mailbox
    • pagination
      Type: object · Pagination
      required
      • page
        Type: integer
        required

        Current page number.

      • page_count
        Type: integer
        required

        Total number of pages.

      • page_size
        Type: integer
        required

        Items per page.

      • total_count
        Type: integer
        required

        Total number of items.

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/messages
curl 'https://api.100hires.com/v2/messages?from_account_id=1' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "messages": [
    {
      "type": "mailbox",
      "message": {
        "id": 12345,
        "from": "sender@example.com",
        "to": "prospect@company.com",
        "cc": "",
        "subject": "Exciting opportunity",
        "body": "<p>Hi, I found your profile...</p>",
        "date": "Apr 09, 2026 10:00 AM",
        "attachments": [],
        "schedule": "",
        "opensCount": 2,
        "opens": [],
        "autoJobId": "",
        "isNurtured": false
      }
    }
  ],
  "pagination": {
    "page_size": 20,
    "page_count": 7,
    "page": 1,
    "total_count": 134
  }
}

Get scheduled message

Returns scheduler-backed message details, including sender account, schedule timestamps, and cancelability.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Responses
  • Scheduled message

    Type: object
    • message
      Type: object · MailboxMessage
      required

      Mailbox message payload, including envelope, body, attachments, and schedule metadata.

      • autoJobId
        required
        • Type: integer

          Integer numbers.

      • cc
        Type: string
        required

        CC recipients.

      • date
        Type: string
        required

        Message date.

      • from
        Type: string nullable
        required

        Sender address.

      • id
        Type: integer
        required

        Message ID.

      • isNurtured
        Type: boolean
        required

        Whether sent via nurture campaign.

      • opens
        Type: array object[] · MailboxOpenEvent[]
        required

        Array of open tracking events.

        • label
          Type: string
          required

          Open event label.

      • opensCount
        Type: integer
        required

        Number of times opened.

      • schedule
        required
        • Type: stringenum
          const:  
          ''
      • subject
        Type: string
        required

        Message subject.

      • to
        Type: string
        required

        Recipient address.

      • attachments
        Type: array · Attachment[]

        Message attachments. Present only when view=full (default); omitted entirely when view=summary.

        • Type: object · ApiAttachment

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

          • file
            Type: object · AttachmentFile
            required
            • file_ext
              Type: string
              required

              File extension.

            • file_type
              Type: string
              required

              File type category.

            • is_image
              Type: boolean nullable
              required

              Whether the file is an image.

            • orig_file_name
              Type: string
              required

              Original file name.

            • readable_size
              Type: string
              required

              Human-readable file size.

          • relative_time
            Type: string
            required

            Human-readable time since upload (e.g. "2 days ago").

          • url
            Type: stringFormat: uri nullable
            required

            Absolute download URL (e.g. https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit with Authorization: Bearer <API_KEY>.

          • uuid
            Type: stringFormat: uuid
            required

            Unique attachment identifier. Stable across API calls; use in referencing endpoints.

      • body
        Type: string

        Message body content. Present only when view=full (default); omitted entirely when view=summary — message bodies can run into tens of KB.

    • type
      enum
      const:  
      mailbox
      required

      Message channel type for scheduler-backed message endpoints.

      • mailbox
  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/messages/{id}
curl https://api.100hires.com/v2/messages/1 \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "type": "mailbox",
  "message": {
    "id": 60010,
    "from": "recruiter@example.com",
    "to": "alice@example.com",
    "cc": "",
    "subject": "Interview invitation — Senior Engineer",
    "body": "<p>Hi Alice, we'd like to invite you for an interview.</p>",
    "date": "Mar 22, 2024 09:00 AM",
    "attachments": [],
    "schedule": {
      "senderId": 1,
      "isForceSend": false,
      "isFailed": false,
      "scheduleSendError": null,
      "isScheduled": true,
      "scheduledDay": "Mar 22, 2024",
      "sendAt": 1711098000,
      "humanDatetime": "Mar 22, 2024 09:00 AM",
      "systemDatetime": "2024-03-22 09:00:00"
    },
    "opensCount": 0,
    "opens": [],
    "autoJobId": "",
    "isNurtured": false
  }
}

Update scheduled message

Rewrites a scheduled message before send time. The same endpoint also accepts PATCH for partial updates.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Body
required
application/json
  • body
    Type: string
    required

    Updated email body as HTML.

  • subject
    Type: string
    required

    Updated email subject line.

  • to
    Type: array string[]
    required

    Primary recipient email addresses.

  • bcc
    Type: array string[]

    Blind carbon-copy recipient email addresses.

  • cc
    Type: array string[]

    Carbon-copy recipient email addresses.

  • from_account_id
    Type: integer nullable

    Optional sending mail account ID. Use GET /users/{user_id}/mail-accounts to list available accounts for a user, or GET /companies/mail-accounts to list all accounts. If omitted, the API key owner's default mail account is used.

  • reply_to_email_id
    Type: integer nullable

    Optional mailbox message ID to reply to.

  • scheduled_at
    Type: integerFormat: int64 nullable

    Updated send time as a Unix timestamp in seconds.

  • send_in_new_thread
    Type: boolean

    Whether to send the updated message as a new thread.

Responses
  • Updated scheduled message

    Type: object
    • message
      Type: object · MailboxMessage
      required

      Mailbox message payload, including envelope, body, attachments, and schedule metadata.

      • autoJobId
        required
        • Type: integer

          Integer numbers.

      • cc
        Type: string
        required

        CC recipients.

      • date
        Type: string
        required

        Message date.

      • from
        Type: string nullable
        required

        Sender address.

      • id
        Type: integer
        required

        Message ID.

      • isNurtured
        Type: boolean
        required

        Whether sent via nurture campaign.

      • opens
        Type: array object[] · MailboxOpenEvent[]
        required

        Array of open tracking events.

        • label
          Type: string
          required

          Open event label.

      • opensCount
        Type: integer
        required

        Number of times opened.

      • schedule
        required
        • Type: stringenum
          const:  
          ''
      • subject
        Type: string
        required

        Message subject.

      • to
        Type: string
        required

        Recipient address.

      • attachments
        Type: array · Attachment[]

        Message attachments. Present only when view=full (default); omitted entirely when view=summary.

        • Type: object · ApiAttachment

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

          • file
            Type: object · AttachmentFile
            required
            • file_ext
              Type: string
              required

              File extension.

            • file_type
              Type: string
              required

              File type category.

            • is_image
              Type: boolean nullable
              required

              Whether the file is an image.

            • orig_file_name
              Type: string
              required

              Original file name.

            • readable_size
              Type: string
              required

              Human-readable file size.

          • relative_time
            Type: string
            required

            Human-readable time since upload (e.g. "2 days ago").

          • url
            Type: stringFormat: uri nullable
            required

            Absolute download URL (e.g. https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit with Authorization: Bearer <API_KEY>.

          • uuid
            Type: stringFormat: uuid
            required

            Unique attachment identifier. Stable across API calls; use in referencing endpoints.

      • body
        Type: string

        Message body content. Present only when view=full (default); omitted entirely when view=summary — message bodies can run into tens of KB.

    • type
      enum
      const:  
      mailbox
      required

      Message channel type for scheduler-backed message endpoints.

      • mailbox
  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for put/messages/{id}
curl https://api.100hires.com/v2/messages/1 \
  --request PUT \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "from_account_id": 1,
  "to": [
    ""
  ],
  "cc": [
    ""
  ],
  "bcc": [
    ""
  ],
  "subject": "",
  "body": "",
  "scheduled_at": 1,
  "reply_to_email_id": 1,
  "send_in_new_thread": true
}'
{
  "type": "mailbox",
  "message": {
    "id": 60010,
    "from": "recruiter@example.com",
    "to": "alice@example.com",
    "cc": "",
    "subject": "Interview invitation — Senior Engineer (updated)",
    "body": "<p>Hi Alice, we've moved your interview to Friday.</p>",
    "date": "Mar 22, 2024 09:00 AM",
    "attachments": [],
    "schedule": {
      "senderId": 1,
      "isForceSend": false,
      "isFailed": false,
      "scheduleSendError": null,
      "isScheduled": true,
      "scheduledDay": "Mar 24, 2024",
      "sendAt": 1711270800,
      "humanDatetime": "Mar 24, 2024 09:00 AM",
      "systemDatetime": "2024-03-24 09:00:00"
    },
    "opensCount": 0,
    "opens": [],
    "autoJobId": "",
    "isNurtured": false
  }
}

Partially update scheduled message

Partially updates a scheduled message before send time.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Body
required
application/json
  • body
    Type: string
    required

    Updated email body as HTML.

  • subject
    Type: string
    required

    Updated email subject line.

  • to
    Type: array string[]
    required

    Primary recipient email addresses.

  • bcc
    Type: array string[]

    Blind carbon-copy recipient email addresses.

  • cc
    Type: array string[]

    Carbon-copy recipient email addresses.

  • from_account_id
    Type: integer nullable

    Optional sending mail account ID. Use GET /users/{user_id}/mail-accounts to list available accounts for a user, or GET /companies/mail-accounts to list all accounts. If omitted, the API key owner's default mail account is used.

  • reply_to_email_id
    Type: integer nullable

    Optional mailbox message ID to reply to.

  • scheduled_at
    Type: integerFormat: int64 nullable

    Updated send time as a Unix timestamp in seconds.

  • send_in_new_thread
    Type: boolean

    Whether to send the updated message as a new thread.

Responses
  • Updated scheduled message

    Type: object
    • message
      Type: object · MailboxMessage
      required

      Mailbox message payload, including envelope, body, attachments, and schedule metadata.

      • autoJobId
        required
        • Type: integer

          Integer numbers.

      • cc
        Type: string
        required

        CC recipients.

      • date
        Type: string
        required

        Message date.

      • from
        Type: string nullable
        required

        Sender address.

      • id
        Type: integer
        required

        Message ID.

      • isNurtured
        Type: boolean
        required

        Whether sent via nurture campaign.

      • opens
        Type: array object[] · MailboxOpenEvent[]
        required

        Array of open tracking events.

        • label
          Type: string
          required

          Open event label.

      • opensCount
        Type: integer
        required

        Number of times opened.

      • schedule
        required
        • Type: stringenum
          const:  
          ''
      • subject
        Type: string
        required

        Message subject.

      • to
        Type: string
        required

        Recipient address.

      • attachments
        Type: array · Attachment[]

        Message attachments. Present only when view=full (default); omitted entirely when view=summary.

        • Type: object · ApiAttachment

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

          • file
            Type: object · AttachmentFile
            required
            • file_ext
              Type: string
              required

              File extension.

            • file_type
              Type: string
              required

              File type category.

            • is_image
              Type: boolean nullable
              required

              Whether the file is an image.

            • orig_file_name
              Type: string
              required

              Original file name.

            • readable_size
              Type: string
              required

              Human-readable file size.

          • relative_time
            Type: string
            required

            Human-readable time since upload (e.g. "2 days ago").

          • url
            Type: stringFormat: uri nullable
            required

            Absolute download URL (e.g. https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit with Authorization: Bearer <API_KEY>.

          • uuid
            Type: stringFormat: uuid
            required

            Unique attachment identifier. Stable across API calls; use in referencing endpoints.

      • body
        Type: string

        Message body content. Present only when view=full (default); omitted entirely when view=summary — message bodies can run into tens of KB.

    • type
      enum
      const:  
      mailbox
      required

      Message channel type for scheduler-backed message endpoints.

      • mailbox
  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for patch/messages/{id}
curl https://api.100hires.com/v2/messages/1 \
  --request PATCH \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "from_account_id": 1,
  "to": [
    ""
  ],
  "cc": [
    ""
  ],
  "bcc": [
    ""
  ],
  "subject": "",
  "body": "",
  "scheduled_at": 1,
  "reply_to_email_id": 1,
  "send_in_new_thread": true
}'
{
  "type": "mailbox",
  "message": {
    "id": 60010,
    "from": "recruiter@example.com",
    "to": "alice@example.com",
    "cc": "",
    "subject": "Interview invitation — Senior Engineer (updated)",
    "body": "<p>Hi Alice, we've moved your interview to Friday.</p>",
    "date": "Mar 22, 2024 09:00 AM",
    "attachments": [],
    "schedule": {
      "senderId": 1,
      "isForceSend": false,
      "isFailed": false,
      "scheduleSendError": null,
      "isScheduled": true,
      "scheduledDay": "Mar 24, 2024",
      "sendAt": 1711270800,
      "humanDatetime": "Mar 24, 2024 09:00 AM",
      "systemDatetime": "2024-03-24 09:00:00"
    },
    "opensCount": 0,
    "opens": [],
    "autoJobId": "",
    "isNurtured": false
  }
}

Cancel scheduled message

Cancels a scheduled message before it is processed by mailbox scheduler.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Responses
  • Message canceled

    Type: object
    • success
      Type: boolean
      required

      Always true on success.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for delete/messages/{id}
curl https://api.100hires.com/v2/messages/1 \
  --request DELETE \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "success": true
}

Batch create scheduled messages

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

Body
required
application/json
  • messages
    Type: array …100
    required

    Array of message payloads to create (max 100).

      • body
        Type: string
        required

        Email body as HTML.

      • candidate_id
        Type: integer
        required

        Target candidate ID for this message.

      • subject
        Type: string
        required

        Email subject line.

      • to
        Type: array string[]
        required

        Primary recipient email addresses.

      • application_id
        Type: integer nullable

        Optional application ID linked to this message.

      • bcc
        Type: array string[]

        Blind carbon-copy recipient email addresses.

      • cc
        Type: array string[]

        Carbon-copy recipient email addresses.

      • from_account_id
        Type: integer nullable

        Optional sending mail account ID. Use GET /users/{user_id}/mail-accounts to list available accounts for a user, or GET /companies/mail-accounts to list all accounts. If omitted, the API key owner's default mail account is used.

      • reply_to_email_id
        Type: integer nullable

        Optional mailbox message ID to reply to.

      • scheduled_at
        Type: integerFormat: int64 nullable

        Unix timestamp (seconds). If omitted, defaults to created time plus 900 seconds.

      • send_in_new_thread
        Type: boolean

        Whether to send the message as a new thread instead of replying in an existing thread.

Responses
  • Batch results with per-item success or error

    Type: object
    • results
      Type: array object[] · BatchCreateMessagesResultItem[]
      required

      Array of per-message results with success or error details.

      • candidate_id
        Type: integer nullable
        required

        Candidate ID from the request. Null if not provided.

      • index
        Type: integer
        required

        Zero-based index of this item in the request array.

      • data
        Type: object · ScheduledEmail

        Created message payload on success. Present only when the item succeeded.

        • message
          Type: object · MailboxMessage
          required

          Mailbox message payload, including envelope, body, attachments, and schedule metadata.

          • autoJobId
            required
            • Type: integer

              Integer numbers.

          • cc
            Type: string
            required

            CC recipients.

          • date
            Type: string
            required

            Message date.

          • from
            Type: string nullable
            required

            Sender address.

          • id
            Type: integer
            required

            Message ID.

          • isNurtured
            Type: boolean
            required

            Whether sent via nurture campaign.

          • opens
            Type: array object[] · MailboxOpenEvent[]
            required

            Array of open tracking events.

            • label
              Type: string
              required

              Open event label.

          • opensCount
            Type: integer
            required

            Number of times opened.

          • schedule
            required
            • Type: stringenum
              const:  
              ''
          • subject
            Type: string
            required

            Message subject.

          • to
            Type: string
            required

            Recipient address.

          • attachments
            Type: array · Attachment[]

            Message attachments. Present only when view=full (default); omitted entirely when view=summary.

            • Type: object · ApiAttachment

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

              • file
                Type: object · AttachmentFile
                required
                • file_ext
                  Type: string
                  required

                  File extension.

                • file_type
                  Type: string
                  required

                  File type category.

                • is_image
                  Type: boolean nullable
                  required

                  Whether the file is an image.

                • orig_file_name
                  Type: string
                  required

                  Original file name.

                • readable_size
                  Type: string
                  required

                  Human-readable file size.

              • relative_time
                Type: string
                required

                Human-readable time since upload (e.g. "2 days ago").

              • url
                Type: stringFormat: uri nullable
                required

                Absolute download URL (e.g. https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit with Authorization: Bearer <API_KEY>.

              • uuid
                Type: stringFormat: uuid
                required

                Unique attachment identifier. Stable across API calls; use in referencing endpoints.

          • body
            Type: string

            Message body content. Present only when view=full (default); omitted entirely when view=summary — message bodies can run into tens of KB.

        • type
          enum
          const:  
          mailbox
          required

          Message channel type for scheduler-backed message endpoints.

          • mailbox
      • error
        Type: object

        Structured error object on failure. Present only when the item failed. Same format as top-level API errors.

        • code
          Type: integer

          Integer numbers.

        • message
          Type: string
        • name
          Type: string
        • status
          Type: integer

          Integer numbers.

        • validation_errors
          Type: object
          • propertyName
            Type: string
  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/messages/batch/create
curl https://api.100hires.com/v2/messages/batch/create \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "messages": [
    {
      "candidate_id": 1,
      "to": [
        "alice@example.com"
      ],
      "subject": "Interview invitation",
      "body": "<p>Hi Alice, we'\''d like to invite you.</p>",
      "from_account_id": 1,
      "scheduled_at": 1700003600
    },
    {
      "candidate_id": 2,
      "to": [
        "bob@example.com"
      ],
      "subject": "Follow-up",
      "body": "<p>Hi Bob, following up on our chat.</p>",
      "from_account_id": 1
    }
  ]
}'
{
  "results": [
    {
      "index": 0,
      "candidate_id": 1,
      "data": {
        "type": "mailbox",
        "message": {
          "id": 501,
          "from": "user@company.com",
          "to": "alice@example.com",
          "subject": "Interview invitation"
        }
      }
    },
    {
      "index": 1,
      "candidate_id": 2,
      "error": {
        "name": "Not Found",
        "message": "Candidate not found",
        "status": 404
      }
    }
  ]
}

Notification Messages

Manage notification emails (rejection, interview reminders, etc.) auto-created by the system: view, edit, cancel, or bulk-cancel before delivery.

Get notification message

Returns a notification email message (e.g. rejection email) by its ID, including subject, body, sender, recipient, and schedule metadata.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Responses
  • Notification message

    Type: object
    • body
      Type: string
      required

      Message body content.

    • date
      Type: string
      required

      Message date.

    • from
      Type: string
      required

      Sender address.

    • id
      Type: integer
      required

      Message ID.

    • schedule
      required
      • Type: stringenum
        const:  
        ''
    • subject
      Type: string
      required

      Message subject.

    • to
      Type: string
      required

      Recipient address.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/notification-messages/{id}
curl https://api.100hires.com/v2/notification-messages/1 \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "id": 70001,
  "from": "notifications@example.com",
  "to": "john.doe@example.com",
  "subject": "Update on your application",
  "body": "<p>Thank you for applying. Unfortunately we have decided to move forward with other candidates.</p>",
  "date": "Mar 22, 2024 09:00 AM",
  "schedule": {
    "id": 8801,
    "isScheduled": true,
    "isFailed": false,
    "humanDatetime": "Mar 22, 2024 09:00 AM",
    "isNotificationMessage": true
  }
}

Update notification message

Updates subject, body, and optionally reschedules a notification email before it is sent. Only scheduled (not yet sent) messages can be updated.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Body
required
application/json
  • body
    Type: string
    required

    Email body as HTML.

  • subject
    Type: string
    max length:  
    500
    required

    Email subject line.

  • scheduled_at
    Type: integerFormat: int64 nullable

    Unix timestamp (seconds) to reschedule send time. If omitted, the existing schedule is preserved.

Responses
  • Updated notification message

    Type: object
    • body
      Type: string
      required

      Message body content.

    • date
      Type: string
      required

      Message date.

    • from
      Type: string
      required

      Sender address.

    • id
      Type: integer
      required

      Message ID.

    • schedule
      required
      • Type: stringenum
        const:  
        ''
    • subject
      Type: string
      required

      Message subject.

    • to
      Type: string
      required

      Recipient address.

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for put/notification-messages/{id}
curl https://api.100hires.com/v2/notification-messages/1 \
  --request PUT \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "subject": "",
  "body": "",
  "scheduled_at": 1
}'
{
  "id": 70001,
  "from": "notifications@example.com",
  "to": "john.doe@example.com",
  "subject": "Update on your application (revised)",
  "body": "<p>Thank you for your interest. We'd like to keep your profile on file for future roles.</p>",
  "date": "Mar 22, 2024 09:00 AM",
  "schedule": {
    "id": 8801,
    "isScheduled": true,
    "isFailed": false,
    "humanDatetime": "Mar 24, 2024 09:00 AM",
    "isNotificationMessage": true
  }
}

Cancel notification message

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

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Responses
  • Message canceled

    Type: object
    • success
      Type: boolean
      required

      Always true on success.

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for delete/notification-messages/{id}
curl https://api.100hires.com/v2/notification-messages/1 \
  --request DELETE \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "success": true
}

Cancel all notification messages for candidate

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

Path Parameters
  • id
    Type: string Pattern: ^[A-Za-z0-9_-]+$
    required

    Candidate ID (numeric) or alias

Responses
  • All scheduled notifications canceled

    Type: object
    • success
      Type: boolean
      required

      Always true on success.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for delete/candidates/{id}/notification-messages
curl 'https://api.100hires.com/v2/candidates/{id}/notification-messages' \
  --request DELETE \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "success": true
}

Forms

Application forms and per-question required/optional/hidden status control.

List forms

Returns paginated application forms for the target company. Use to bootstrap questionnaire builders and sync form catalogs.

Query Parameters
  • company_id
    Type: integer

    Optional target company ID. Since each API key is already bound to one company, this is only needed when the key owner has access to multiple companies.

  • page
    Type: integer
    min:  
    1

    Page number (1-based). Defaults to 1.

  • size
    Type: integer
    min:  
    1
    max:  
    100

    Number of items per page (1–100). Defaults to 20.

  • view
    Type: stringenum

    Response shape selector for list endpoints. full (default) returns every field — backward-compatible with pre-existing clients. summary returns a thinned payload designed for agent-friendly list browsing: heavy fields (description HTML, embedded profile answers, full message bodies, embedded relations, etc.) are omitted or replaced with *_preview truncations. Use summary when paging through large result sets and fetch a single record with the corresponding GET /{resource}/{id} endpoint when full data is needed.

    • full
    • summary
Responses
  • Form list

    Type: object
    • forms
      Type: array object[] · Form[]
      required

      Array of forms.

      • id
        Type: integer
        required

        Form ID.

      • name
        Type: string
        required

        Form name.

      • questions
        Type: array object[] · Question[]

        Array of questions on this form. Present only when view=full (default); omitted entirely when view=summary — forms can embed dozens of question definitions.

        • id
          Type: integer
          required

          Question ID.

        • text
          Type: string
          required

          Question text.

        • type
          Type: string
          required

          Question type.

        • options
          Type: array string[]

          Answer options for select/multiselect types.

        • status
          Type: stringenum

          Visibility status on the form.

          • required
          • optional
          • hidden
      • url_backoffice
        Type: stringFormat: uri

        Absolute backoffice URL to edit this questionnaire form in the 100Hires recruiter app. Use to render deep-links in agent UIs.

    • pagination
      Type: object · Pagination
      required
      • page
        Type: integer
        required

        Current page number.

      • page_count
        Type: integer
        required

        Total number of pages.

      • page_size
        Type: integer
        required

        Items per page.

      • total_count
        Type: integer
        required

        Total number of items.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/forms
curl https://api.100hires.com/v2/forms \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "forms": [
    {
      "id": 10,
      "name": "Software Engineer Application",
      "questions": [
        {
          "id": 201,
          "text": "Years of experience?",
          "type": "short_text",
          "options": [],
          "status": "required"
        }
      ]
    }
  ],
  "pagination": {
    "page_size": 25,
    "page_count": 1,
    "page": 1,
    "total_count": 1
  }
}

Create form

Creates a new form and optionally attaches existing questions. Useful for standardized intake process setup.

Body
required
application/json
  • name
    Type: string
    required

    Form name.

  • company_id
    Type: integer

    Target company ID.

  • questions
    Type: array integer[]

    Array of question IDs to attach to this form.

Responses
  • Created form

    Type: object
    • id
      Type: integer
      required

      Form ID.

    • name
      Type: string
      required

      Form name.

    • questions
      Type: array object[] · Question[]

      Array of questions on this form. Present only when view=full (default); omitted entirely when view=summary — forms can embed dozens of question definitions.

      • id
        Type: integer
        required

        Question ID.

      • text
        Type: string
        required

        Question text.

      • type
        Type: string
        required

        Question type.

      • options
        Type: array string[]

        Answer options for select/multiselect types.

      • status
        Type: stringenum

        Visibility status on the form.

        • required
        • optional
        • hidden
    • url_backoffice
      Type: stringFormat: uri

      Absolute backoffice URL to edit this questionnaire form in the 100Hires recruiter app. Use to render deep-links in agent UIs.

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/forms
curl https://api.100hires.com/v2/forms \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "company_id": 1,
  "name": "",
  "questions": [
    1
  ]
}'
{
  "id": 11,
  "name": "Designer Application",
  "questions": []
}

Get form

Returns form details with included question statuses. Use as canonical read endpoint for form rendering.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Responses
  • Form

    Type: object
    • id
      Type: integer
      required

      Form ID.

    • name
      Type: string
      required

      Form name.

    • questions
      Type: array object[] · Question[]

      Array of questions on this form. Present only when view=full (default); omitted entirely when view=summary — forms can embed dozens of question definitions.

      • id
        Type: integer
        required

        Question ID.

      • text
        Type: string
        required

        Question text.

      • type
        Type: string
        required

        Question type.

      • options
        Type: array string[]

        Answer options for select/multiselect types.

      • status
        Type: stringenum

        Visibility status on the form.

        • required
        • optional
        • hidden
    • url_backoffice
      Type: stringFormat: uri

      Absolute backoffice URL to edit this questionnaire form in the 100Hires recruiter app. Use to render deep-links in agent UIs.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/forms/{id}
curl https://api.100hires.com/v2/forms/1 \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "id": 10,
  "name": "Software Engineer Application",
  "url_backoffice": "https://app.100hires.com/settings/forms/10/edit",
  "questions": [
    {
      "id": 201,
      "text": "Years of experience?",
      "type": "short_text",
      "status": "required"
    },
    {
      "id": 202,
      "text": "Preferred programming language?",
      "type": "single_choice",
      "options": [
        "Python",
        "Java",
        "Go",
        "TypeScript"
      ],
      "status": "optional"
    }
  ]
}

Update form

Updates form metadata and question composition. Supports iterative form design and rollout workflows.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Body
required
application/json
  • name
    Type: string
    required

    Form name.

  • questions
    Type: array integer[]

    Array of question IDs to attach to this form.

Responses
  • Updated form

    Type: object
    • id
      Type: integer
      required

      Form ID.

    • name
      Type: string
      required

      Form name.

    • questions
      Type: array object[] · Question[]

      Array of questions on this form. Present only when view=full (default); omitted entirely when view=summary — forms can embed dozens of question definitions.

      • id
        Type: integer
        required

        Question ID.

      • text
        Type: string
        required

        Question text.

      • type
        Type: string
        required

        Question type.

      • options
        Type: array string[]

        Answer options for select/multiselect types.

      • status
        Type: stringenum

        Visibility status on the form.

        • required
        • optional
        • hidden
    • url_backoffice
      Type: stringFormat: uri

      Absolute backoffice URL to edit this questionnaire form in the 100Hires recruiter app. Use to render deep-links in agent UIs.

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for put/forms/{id}
curl https://api.100hires.com/v2/forms/1 \
  --request PUT \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "name": "",
  "questions": [
    1
  ]
}'
{
  "id": 10,
  "name": "Software Engineer Application",
  "url_backoffice": "https://app.100hires.com/settings/forms/10/edit",
  "questions": [
    {
      "id": 201,
      "text": "Years of experience?",
      "type": "short_text",
      "status": "required"
    },
    {
      "id": 202,
      "text": "Preferred programming language?",
      "type": "single_choice",
      "options": [
        "Python",
        "Java",
        "Go",
        "TypeScript"
      ],
      "status": "optional"
    }
  ]
}

Delete form

Deletes a form from active usage. Use when retiring obsolete intake flows.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Responses
  • Deleted

    Type: object
    • success
      Type: boolean
      required

      Always true on success.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for delete/forms/{id}
curl https://api.100hires.com/v2/forms/1 \
  --request DELETE \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "success": true
}

Update question status inside form

Changes the status (required/optional/hidden) of a form-question relation. Use for fine-grained validation control.

Path Parameters
  • form_id
    Type: integer
    required

    Application form ID.

  • question_id
    Type: integer
    required

    Question ID.

Body
required
application/json
  • status
    Type: stringenum
    required

    Question visibility on this form: required, optional, or hidden.

    • required
    • optional
    • hidden
Responses
  • Updated form

    Type: object
    • id
      Type: integer
      required

      Form ID.

    • name
      Type: string
      required

      Form name.

    • questions
      Type: array object[] · Question[]

      Array of questions on this form. Present only when view=full (default); omitted entirely when view=summary — forms can embed dozens of question definitions.

      • id
        Type: integer
        required

        Question ID.

      • text
        Type: string
        required

        Question text.

      • type
        Type: string
        required

        Question type.

      • options
        Type: array string[]

        Answer options for select/multiselect types.

      • status
        Type: stringenum

        Visibility status on the form.

        • required
        • optional
        • hidden
    • url_backoffice
      Type: stringFormat: uri

      Absolute backoffice URL to edit this questionnaire form in the 100Hires recruiter app. Use to render deep-links in agent UIs.

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for put/forms/{form_id}/questions/{question_id}
curl https://api.100hires.com/v2/forms/1/questions/1 \
  --request PUT \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "status": "required"
}'
{
  "id": 10,
  "name": "Software Engineer Application",
  "url_backoffice": "https://app.100hires.com/settings/forms/10/edit",
  "questions": [
    {
      "id": 201,
      "text": "Years of experience?",
      "type": "short_text",
      "status": "required"
    },
    {
      "id": 202,
      "text": "Preferred programming language?",
      "type": "single_choice",
      "options": [
        "Python",
        "Java",
        "Go",
        "TypeScript"
      ],
      "status": "optional"
    }
  ]
}

Questions

Reusable question catalog and supported question type discovery.

List questions

Returns paginated question catalog for the target company.

Query Parameters
  • company_id
    Type: integer

    Optional target company ID. Since each API key is already bound to one company, this is only needed when the key owner has access to multiple companies.

  • page
    Type: integer
    min:  
    1

    Page number (1-based). Defaults to 1.

  • size
    Type: integer
    min:  
    1
    max:  
    100

    Number of items per page (1–100). Defaults to 20.

Responses
  • Question list

    Type: object
    • pagination
      Type: object · Pagination
      required
      • page
        Type: integer
        required

        Current page number.

      • page_count
        Type: integer
        required

        Total number of pages.

      • page_size
        Type: integer
        required

        Items per page.

      • total_count
        Type: integer
        required

        Total number of items.

    • questions
      Type: array object[] · Question[]
      required

      Array of questions.

      • id
        Type: integer
        required

        Question ID.

      • text
        Type: string
        required

        Question text.

      • type
        Type: string
        required

        Question type.

      • options
        Type: array string[]

        Answer options for select/multiselect types.

      • status
        Type: stringenum

        Visibility status on the form.

        • required
        • optional
        • hidden
  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/questions
curl https://api.100hires.com/v2/questions \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "questions": [
    {
      "id": 201,
      "text": "Years of experience?",
      "type": "short_text"
    },
    {
      "id": 202,
      "text": "Preferred programming language?",
      "type": "single_choice",
      "options": [
        "Python",
        "Java",
        "Go",
        "TypeScript"
      ]
    }
  ],
  "pagination": {
    "page_size": 20,
    "page_count": 1,
    "page": 1,
    "total_count": 2
  }
}

Create question

Creates a reusable question definition with optional options for dropdown types. Used by forms and questionnaires.

Body
required
application/json
  • text
    Type: string
    required

    Question text.

  • type
    Type: string
    required

    Question type (from GET /questions/types).

  • company_id
    Type: integer

    Target company ID.

  • options
    Type: array string[]

    Answer options (for select/multiselect question types).

Responses
  • Created question

    Type: object
    • id
      Type: integer
      required

      Question ID.

    • text
      Type: string
      required

      Question text.

    • type
      Type: string
      required

      Question type.

    • options
      Type: array string[]

      Answer options for select/multiselect types.

    • status
      Type: stringenum

      Visibility status on the form.

      • required
      • optional
      • hidden
  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/questions
curl https://api.100hires.com/v2/questions \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "company_id": 1,
  "text": "",
  "type": "",
  "options": [
    ""
  ]
}'
{
  "id": 203,
  "text": "Years of experience?",
  "type": "short_text"
}

Get question

Returns question definition including type and options. Use for editors, validators, and sync clients.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Responses
  • Question

    Type: object
    • id
      Type: integer
      required

      Question ID.

    • text
      Type: string
      required

      Question text.

    • type
      Type: string
      required

      Question type.

    • options
      Type: array string[]

      Answer options for select/multiselect types.

    • status
      Type: stringenum

      Visibility status on the form.

      • required
      • optional
      • hidden
  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/questions/{id}
curl https://api.100hires.com/v2/questions/1 \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "id": 202,
  "text": "Preferred programming language?",
  "type": "single_choice",
  "options": [
    "Python",
    "Java",
    "Go",
    "TypeScript"
  ]
}

Update question

Updates text/type/options of an existing question definition. Supports schema evolution of assessment content.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Body
required
application/json
  • text
    Type: string
    required

    Question text.

  • type
    Type: string
    required

    Question type (from GET /questions/types).

  • options
    Type: array string[]

    Answer options (for select/multiselect question types).

Responses
  • Updated question

    Type: object
    • id
      Type: integer
      required

      Question ID.

    • text
      Type: string
      required

      Question text.

    • type
      Type: string
      required

      Question type.

    • options
      Type: array string[]

      Answer options for select/multiselect types.

    • status
      Type: stringenum

      Visibility status on the form.

      • required
      • optional
      • hidden
  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for put/questions/{id}
curl https://api.100hires.com/v2/questions/1 \
  --request PUT \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "text": "",
  "type": "",
  "options": [
    ""
  ]
}'
{
  "id": 202,
  "text": "Preferred programming language?",
  "type": "single_choice",
  "options": [
    "Python",
    "Java",
    "Go",
    "TypeScript",
    "Rust"
  ]
}

Delete question

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

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Responses
  • Deleted

    Type: object
    • success
      Type: boolean
      required

      Always true on success.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for delete/questions/{id}
curl https://api.100hires.com/v2/questions/1 \
  --request DELETE \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "success": true
}

List available question types

Returns available question types supported by the platform. Use this endpoint to drive dynamic form builders.

Responses
  • Question types

    Type: object
    • types
      Type: array string[]
      required

      Array of supported question types.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/questions/types
curl https://api.100hires.com/v2/questions/types \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "types": [
    "short_text",
    "long_text",
    "single_choice",
    "multiple_choice",
    "file_upload",
    "score_card",
    "number",
    "boolean",
    "date",
    "time",
    "email",
    "phone"
  ]
}

Email Templates

Email template CRUD for automation, nurture campaigns, and manual outreach.

List email templates

Returns paginated email templates for the target company.

Query Parameters
  • company_id
    Type: integer

    Optional target company ID. Since each API key is already bound to one company, this is only needed when the key owner has access to multiple companies.

  • page
    Type: integer
    min:  
    1

    Page number (1-based). Defaults to 1.

  • size
    Type: integer
    min:  
    1
    max:  
    100

    Number of items per page (1–100). Defaults to 20.

  • view
    Type: stringenum

    Response shape selector for list endpoints. full (default) returns every field — backward-compatible with pre-existing clients. summary returns a thinned payload designed for agent-friendly list browsing: heavy fields (description HTML, embedded profile answers, full message bodies, embedded relations, etc.) are omitted or replaced with *_preview truncations. Use summary when paging through large result sets and fetch a single record with the corresponding GET /{resource}/{id} endpoint when full data is needed.

    • full
    • summary
Responses
  • Email template list

    Type: object
    • email_templates
      Type: array object[] · EmailTemplate[]
      required

      Array of email templates.

      • body
        Type: string

        Email body HTML as stored. Placeholders are stored as <tag> HTML produced by POST /template-placeholders/prepare and rendered at send time. Present only when view=full (default); omitted entirely when view=summary — template bodies can be tens of KB each.

      • created_at
        Type: integer

        Unix timestamp

      • id
        Type: integer

        Email template ID

      • name
        Type: string

        Template name

      • subject
        Type: string

        Email subject line as stored. Placeholders, when present, are stored as <tag> HTML produced by POST /template-placeholders/prepare; they are rendered to real values only at send time, not on read.

      • updated_at
        Type: integer

        Unix timestamp

      • url_backoffice
        Type: stringFormat: uri

        Absolute backoffice URL to edit this email template in the 100Hires recruiter app. Use to render deep-links in agent UIs.

    • pagination
      Type: object · Pagination
      required
      • page
        Type: integer
        required

        Current page number.

      • page_count
        Type: integer
        required

        Total number of pages.

      • page_size
        Type: integer
        required

        Items per page.

      • total_count
        Type: integer
        required

        Total number of items.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/email-templates
curl https://api.100hires.com/v2/email-templates \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "email_templates": [
    {
      "id": 401,
      "name": "Interview Invitation",
      "subject": "Interview invitation",
      "body": "<p>Hi <tag contenteditable=\"false\" data-type=\"system\" data-identifier=\"first_name\">First Name</tag>, we'd like to invite you for an interview.</p>",
      "created_at": 1711036800,
      "updated_at": 1711036800
    }
  ],
  "pagination": {
    "page_size": 25,
    "page_count": 1,
    "page": 1,
    "total_count": 1
  }
}

Create email template

Creates a new email template with subject and body.

Placeholder workflow:

  1. GET /template-placeholders — list available placeholders
  2. POST /template-placeholders/prepare — convert chosen placeholder to an HTML <tag> element
  3. Insert the returned HTML tag into the template body
  4. POST /email-templates — save the template with embedded placeholder tags
Body
required
application/json
  • body
    Type: string
    required

    Email body HTML.

    Placeholders: literal {{first_name}} tokens are NOT substituted — the recipient will see the raw text. To embed a placeholder, call POST /template-placeholders/prepare and insert the returned <tag contenteditable="false" data-type="…" data-identifier="…">…</tag> element into the HTML at the position where the value should appear.

  • name
    Type: string
    required

    Template name

  • subject
    Type: string
    required

    Email subject line. Plain text.

    Placeholders: literal {{first_name}} / {{job_title}} tokens are NOT substituted — they will be delivered to the recipient verbatim. To embed a placeholder, call POST /template-placeholders/prepare and paste the returned HTML <tag>…</tag> string into this field.

  • company_id
    Type: integer

    Target company ID.

Responses
  • Created email template

    Type: object
    • body
      Type: string

      Email body HTML as stored. Placeholders are stored as <tag> HTML produced by POST /template-placeholders/prepare and rendered at send time. Present only when view=full (default); omitted entirely when view=summary — template bodies can be tens of KB each.

    • created_at
      Type: integer

      Unix timestamp

    • id
      Type: integer

      Email template ID

    • name
      Type: string

      Template name

    • subject
      Type: string

      Email subject line as stored. Placeholders, when present, are stored as <tag> HTML produced by POST /template-placeholders/prepare; they are rendered to real values only at send time, not on read.

    • updated_at
      Type: integer

      Unix timestamp

    • url_backoffice
      Type: stringFormat: uri

      Absolute backoffice URL to edit this email template in the 100Hires recruiter app. Use to render deep-links in agent UIs.

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/email-templates
curl https://api.100hires.com/v2/email-templates \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "company_id": 1,
  "name": "",
  "subject": "",
  "body": ""
}'
{
  "id": 402,
  "name": "Rejection Letter",
  "subject": "Update on your application",
  "body": "<p>Dear <tag contenteditable=\"false\" data-type=\"system\" data-identifier=\"first_name\">First Name</tag>, thank you for your interest.</p>",
  "created_at": 1711036800,
  "updated_at": 1711036800
}

Get email template

Returns a single email template by ID with subject and body content.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Responses
  • Email template

    Type: object
    • body
      Type: string

      Email body HTML as stored. Placeholders are stored as <tag> HTML produced by POST /template-placeholders/prepare and rendered at send time. Present only when view=full (default); omitted entirely when view=summary — template bodies can be tens of KB each.

    • created_at
      Type: integer

      Unix timestamp

    • id
      Type: integer

      Email template ID

    • name
      Type: string

      Template name

    • subject
      Type: string

      Email subject line as stored. Placeholders, when present, are stored as <tag> HTML produced by POST /template-placeholders/prepare; they are rendered to real values only at send time, not on read.

    • updated_at
      Type: integer

      Unix timestamp

    • url_backoffice
      Type: stringFormat: uri

      Absolute backoffice URL to edit this email template in the 100Hires recruiter app. Use to render deep-links in agent UIs.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/email-templates/{id}
curl https://api.100hires.com/v2/email-templates/1 \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "id": 401,
  "name": "Interview Invitation",
  "subject": "Interview invitation",
  "body": "<p>Hi <tag contenteditable=\"false\" data-type=\"system\" data-identifier=\"first_name\">First Name</tag>, we'd like to invite you for an interview.</p>",
  "created_at": 1711036800,
  "updated_at": 1711036800
}

Update email template

Updates an existing email template. Only provided fields are overwritten; omitted fields keep their current values.

To add placeholders to the body, use the same workflow as for creation:

  1. GET /template-placeholders — list available placeholders
  2. POST /template-placeholders/prepare — get HTML tag for the chosen placeholder
  3. Insert the tag into the body and PUT /email-templates/{id}
Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Body
required
application/json
  • body
    Type: string

    Email body HTML.

    Placeholders: literal {{first_name}} tokens are NOT substituted — the recipient will see the raw text. To embed a placeholder, call POST /template-placeholders/prepare and insert the returned <tag contenteditable="false" data-type="…" data-identifier="…">…</tag> element into the HTML at the position where the value should appear.

  • name
    Type: string

    Template name

  • subject
    Type: string

    Email subject line. Plain text.

    Placeholders: literal {{first_name}} / {{job_title}} tokens are NOT substituted — they will be delivered to the recipient verbatim. To embed a placeholder, call POST /template-placeholders/prepare and paste the returned HTML <tag>…</tag> string into this field.

Responses
  • Updated email template

    Type: object
    • body
      Type: string

      Email body HTML as stored. Placeholders are stored as <tag> HTML produced by POST /template-placeholders/prepare and rendered at send time. Present only when view=full (default); omitted entirely when view=summary — template bodies can be tens of KB each.

    • created_at
      Type: integer

      Unix timestamp

    • id
      Type: integer

      Email template ID

    • name
      Type: string

      Template name

    • subject
      Type: string

      Email subject line as stored. Placeholders, when present, are stored as <tag> HTML produced by POST /template-placeholders/prepare; they are rendered to real values only at send time, not on read.

    • updated_at
      Type: integer

      Unix timestamp

    • url_backoffice
      Type: stringFormat: uri

      Absolute backoffice URL to edit this email template in the 100Hires recruiter app. Use to render deep-links in agent UIs.

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for put/email-templates/{id}
curl https://api.100hires.com/v2/email-templates/1 \
  --request PUT \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "name": "",
  "subject": "",
  "body": ""
}'
{
  "id": 401,
  "name": "Interview Invitation v2",
  "subject": "Interview invitation",
  "body": "<p>Hi <tag contenteditable=\"false\" data-type=\"system\" data-identifier=\"first_name\">First Name</tag>, we'd love to schedule an interview with you.</p>",
  "created_at": 1711036800,
  "updated_at": 1711123200
}

Delete email template

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

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Responses
  • Deleted

    Type: object
    • success
      Type: boolean
      required

      Always true on success.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for delete/email-templates/{id}
curl https://api.100hires.com/v2/email-templates/1 \
  --request DELETE \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "success": true
}

Nurture Campaigns

Nurture campaign CRUD with multi-step sequences (email, SMS, voicemail, move stage, assign tag/task).

List nurture campaigns

Returns paginated nurture campaigns for the target company.

Query Parameters
  • company_id
    Type: integer

    Optional target company ID. Since each API key is already bound to one company, this is only needed when the key owner has access to multiple companies.

  • page
    Type: integer
    min:  
    1

    Page number (1-based). Defaults to 1.

  • size
    Type: integer
    min:  
    1
    max:  
    100

    Number of items per page (1–100). Defaults to 20.

Responses
  • Nurture campaign list

    Type: object
    • nurture_campaigns
      Type: array object[] · NurtureCampaign[]
      required

      Array of nurture campaigns.

      • id
        Type: integer

        Campaign ID

      • response_move_to_stage_id
        Type: integer nullable

        Stage ID to move candidate when they reply

      • schedule
        Type: object

        Campaign schedule configuration

        • formatted
          Type: string

          Human-readable schedule description

      • send_to_all
        Type: boolean

        Whether to send to all candidates or only new ones

      • steps
        Type: array · NurtureCampaignStep[]

        Ordered list of campaign steps

          • Campaign step. The shape depends on the step type.

            • type
              Discriminator
              enum
              const:  
              email
              required

              Step type discriminator.

              • email
            • delay_days
              Type: integer
              min:  
              0
              required

              Days to wait before executing this step

            • id
              Type: integer
              required

              Step ID

            • send_condition
              Type: stringenum
              required

              Condition to check before executing step

              • if_no_reply
              • if_no_reply_but_opened
            • sender
              Type: object
              required

              Mail sender

              • id
                Type: integer

                Integer numbers.

              • type
                Type: string
            • template_id
              Type: integer
              required

              Email template ID

            • campaign_id
              Type: integer

              Parent campaign ID

            • is_new_thread
              Type: boolean

              Send as new email thread

            • schedule_id
              Type: integer nullable

              Sending schedule ID

      • title
        Type: string

        Campaign name

      • type
        Type: string

        Always "nurture_campaign"

      • url_backoffice
        Type: stringFormat: uri

        Absolute backoffice URL to edit this nurture campaign in the 100Hires recruiter app. Use to render deep-links in agent UIs.

    • pagination
      Type: object · Pagination
      required
      • page
        Type: integer
        required

        Current page number.

      • page_count
        Type: integer
        required

        Total number of pages.

      • page_size
        Type: integer
        required

        Items per page.

      • total_count
        Type: integer
        required

        Total number of items.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/nurture-campaigns
curl https://api.100hires.com/v2/nurture-campaigns \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "nurture_campaigns": [
    {
      "id": 601,
      "type": "nurture_campaign",
      "title": "Follow-up Sequence",
      "send_to_all": false,
      "response_move_to_stage_id": null,
      "schedule": {
        "formatted": "Mon-Fri, 9am-5pm"
      },
      "steps": [
        {
          "id": 1001,
          "type": "email",
          "campaign_id": 601,
          "delay_days": 0,
          "send_condition": "if_no_reply",
          "sender": {
            "type": "user",
            "id": 1
          },
          "template_id": 401,
          "is_new_thread": true,
          "schedule_id": null
        }
      ]
    }
  ],
  "pagination": {
    "page_size": 25,
    "page_count": 1,
    "page": 1,
    "total_count": 1
  }
}

Create nurture campaign

Creates a new nurture campaign with steps. Optionally bind to a workflow stage via workflow_id and stage_id.

Body
required
application/json
  • steps
    Type: array · NurtureCampaignStepInput[]
    required

    Campaign steps (at least one required)

      • Step input. The required fields depend on the step type.

        • type
          Discriminator
          enum
          const:  
          email
          required

          Step type discriminator.

          • email
        • delay_days
          Type: integer
          min:  
          0
          required

          Days to wait before executing this step

        • send_condition
          Type: stringenum
          required

          Condition for sending this step.

          • if_no_reply
          • if_no_reply_but_opened
        • sender
          Type: object
          required
          • id
            Type: integer
            required

            Sender ID

          • type
            Type: string
            required

            Sender type (e.g. "account", "user")

        • template_id
          Type: integer
          required

          Email template ID

        • id
          Type: integer

          Step ID (required for updating existing steps)

        • is_deleted
          Type: boolean

          Set to true to remove this step during update

        • is_new_thread
          Type: boolean

          Send as new email thread

        • is_send_by_carousel
          Type: boolean

          Send by carousel rotation

        • schedule_id
          Type: integer

          Sending schedule ID

  • title
    Type: string
    required

    Campaign name

  • company_id
    Type: integer

    Target company ID (optional if API key is scoped to one company)

  • delay_time
    Type: integer

    Delay time in seconds

  • relative_days
    Type: integer

    Relative days for schedule

  • relative_time
    Type: integer

    Relative time for schedule (seconds from midnight)

  • response_move_to_stage_id
    Type: integer

    Stage to move candidate to when they reply

  • send_to_all
    Type: boolean

    Send to all candidates or only new ones

  • stage_id
    Type: integer

    Stage ID that triggers the campaign

  • timezone
    Type: string

    IANA timezone, e.g. "America/New_York"

  • workflow_id
    Type: integer

    Workflow ID to bind the campaign to

Responses
  • Created nurture campaign

    Type: object
    • id
      Type: integer

      Campaign ID

    • response_move_to_stage_id
      Type: integer nullable

      Stage ID to move candidate when they reply

    • schedule
      Type: object

      Campaign schedule configuration

      • formatted
        Type: string

        Human-readable schedule description

    • send_to_all
      Type: boolean

      Whether to send to all candidates or only new ones

    • steps
      Type: array · NurtureCampaignStep[]

      Ordered list of campaign steps

        • Campaign step. The shape depends on the step type.

          • type
            Discriminator
            enum
            const:  
            email
            required

            Step type discriminator.

            • email
          • delay_days
            Type: integer
            min:  
            0
            required

            Days to wait before executing this step

          • id
            Type: integer
            required

            Step ID

          • send_condition
            Type: stringenum
            required

            Condition to check before executing step

            • if_no_reply
            • if_no_reply_but_opened
          • sender
            Type: object
            required

            Mail sender

            • id
              Type: integer

              Integer numbers.

            • type
              Type: string
          • template_id
            Type: integer
            required

            Email template ID

          • campaign_id
            Type: integer

            Parent campaign ID

          • is_new_thread
            Type: boolean

            Send as new email thread

          • schedule_id
            Type: integer nullable

            Sending schedule ID

    • title
      Type: string

      Campaign name

    • type
      Type: string

      Always "nurture_campaign"

    • url_backoffice
      Type: stringFormat: uri

      Absolute backoffice URL to edit this nurture campaign in the 100Hires recruiter app. Use to render deep-links in agent UIs.

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/nurture-campaigns
curl https://api.100hires.com/v2/nurture-campaigns \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "company_id": 1,
  "title": "",
  "workflow_id": 1,
  "stage_id": 1,
  "delay_time": 1,
  "relative_days": 1,
  "relative_time": 1,
  "timezone": "",
  "send_to_all": false,
  "response_move_to_stage_id": 1,
  "steps": [
    {
      "id": 1,
      "type": "email",
      "delay_days": 0,
      "send_condition": "if_no_reply",
      "is_deleted": true,
      "sender": {
        "type": "",
        "id": 1
      },
      "template_id": 1,
      "is_new_thread": true,
      "schedule_id": 1,
      "is_send_by_carousel": true
    }
  ]
}'
{
  "id": 602,
  "type": "nurture_campaign",
  "title": "New Candidate Outreach",
  "send_to_all": true,
  "response_move_to_stage_id": 50,
  "schedule": {
    "formatted": "Mon-Fri, 9am-5pm"
  },
  "steps": [
    {
      "id": 1002,
      "type": "email",
      "campaign_id": 602,
      "delay_days": 0,
      "send_condition": "if_no_reply",
      "sender": {
        "type": "user",
        "id": 1
      },
      "template_id": 401,
      "is_new_thread": true,
      "schedule_id": null
    },
    {
      "id": 1003,
      "type": "email",
      "campaign_id": 602,
      "delay_days": 3,
      "send_condition": "if_no_reply",
      "sender": {
        "type": "user",
        "id": 1
      },
      "template_id": 402,
      "is_new_thread": false,
      "schedule_id": null
    }
  ]
}

Get nurture campaign

Returns a single nurture campaign by ID with all steps.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Responses
  • Nurture campaign

    Type: object
    • id
      Type: integer

      Campaign ID

    • response_move_to_stage_id
      Type: integer nullable

      Stage ID to move candidate when they reply

    • schedule
      Type: object

      Campaign schedule configuration

      • formatted
        Type: string

        Human-readable schedule description

    • send_to_all
      Type: boolean

      Whether to send to all candidates or only new ones

    • steps
      Type: array · NurtureCampaignStep[]

      Ordered list of campaign steps

        • Campaign step. The shape depends on the step type.

          • type
            Discriminator
            enum
            const:  
            email
            required

            Step type discriminator.

            • email
          • delay_days
            Type: integer
            min:  
            0
            required

            Days to wait before executing this step

          • id
            Type: integer
            required

            Step ID

          • send_condition
            Type: stringenum
            required

            Condition to check before executing step

            • if_no_reply
            • if_no_reply_but_opened
          • sender
            Type: object
            required

            Mail sender

            • id
              Type: integer

              Integer numbers.

            • type
              Type: string
          • template_id
            Type: integer
            required

            Email template ID

          • campaign_id
            Type: integer

            Parent campaign ID

          • is_new_thread
            Type: boolean

            Send as new email thread

          • schedule_id
            Type: integer nullable

            Sending schedule ID

    • title
      Type: string

      Campaign name

    • type
      Type: string

      Always "nurture_campaign"

    • url_backoffice
      Type: stringFormat: uri

      Absolute backoffice URL to edit this nurture campaign in the 100Hires recruiter app. Use to render deep-links in agent UIs.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/nurture-campaigns/{id}
curl https://api.100hires.com/v2/nurture-campaigns/1 \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "id": 601,
  "type": "nurture_campaign",
  "title": "Follow-up Sequence",
  "send_to_all": false,
  "response_move_to_stage_id": null,
  "schedule": {
    "formatted": "Mon-Fri, 9am-5pm"
  },
  "steps": [
    {
      "id": 1001,
      "type": "email",
      "campaign_id": 601,
      "delay_days": 0,
      "send_condition": "if_no_reply",
      "sender": {
        "type": "user",
        "id": 1
      },
      "template_id": 401,
      "is_new_thread": true,
      "schedule_id": null
    }
  ]
}

Update nurture campaign

Updates an existing nurture campaign. Pass all steps — mark removed steps with is_deleted=true.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Body
required
application/json
  • steps
    Type: array · NurtureCampaignStepInput[]
    required

    All steps — mark removed steps with is_deleted=true

      • Step input. The required fields depend on the step type.

        • type
          Discriminator
          enum
          const:  
          email
          required

          Step type discriminator.

          • email
        • delay_days
          Type: integer
          min:  
          0
          required

          Days to wait before executing this step

        • send_condition
          Type: stringenum
          required

          Condition for sending this step.

          • if_no_reply
          • if_no_reply_but_opened
        • sender
          Type: object
          required
          • id
            Type: integer
            required

            Sender ID

          • type
            Type: string
            required

            Sender type (e.g. "account", "user")

        • template_id
          Type: integer
          required

          Email template ID

        • id
          Type: integer

          Step ID (required for updating existing steps)

        • is_deleted
          Type: boolean

          Set to true to remove this step during update

        • is_new_thread
          Type: boolean

          Send as new email thread

        • is_send_by_carousel
          Type: boolean

          Send by carousel rotation

        • schedule_id
          Type: integer

          Sending schedule ID

  • title
    Type: string
    required

    Campaign name

  • delay_time
    Type: integer

    Delay in minutes before the first step.

  • relative_days
    Type: integer

    Number of days offset for scheduling.

  • relative_time
    Type: integer

    Time of day for scheduled sends (HH:MM format).

  • response_move_to_stage_id
    Type: integer

    Stage ID to move candidates to when they respond.

  • send_to_all
    Type: boolean

    Whether to send to all candidates or only new ones.

  • stage_id
    Type: integer

    Pipeline stage ID that triggers the campaign.

  • timezone
    Type: string

    Timezone for scheduled sends (e.g. America/New_York).

  • workflow_id
    Type: integer

    Workflow ID this campaign is associated with.

Responses
  • Updated nurture campaign

    Type: object
    • id
      Type: integer

      Campaign ID

    • response_move_to_stage_id
      Type: integer nullable

      Stage ID to move candidate when they reply

    • schedule
      Type: object

      Campaign schedule configuration

      • formatted
        Type: string

        Human-readable schedule description

    • send_to_all
      Type: boolean

      Whether to send to all candidates or only new ones

    • steps
      Type: array · NurtureCampaignStep[]

      Ordered list of campaign steps

        • Campaign step. The shape depends on the step type.

          • type
            Discriminator
            enum
            const:  
            email
            required

            Step type discriminator.

            • email
          • delay_days
            Type: integer
            min:  
            0
            required

            Days to wait before executing this step

          • id
            Type: integer
            required

            Step ID

          • send_condition
            Type: stringenum
            required

            Condition to check before executing step

            • if_no_reply
            • if_no_reply_but_opened
          • sender
            Type: object
            required

            Mail sender

            • id
              Type: integer

              Integer numbers.

            • type
              Type: string
          • template_id
            Type: integer
            required

            Email template ID

          • campaign_id
            Type: integer

            Parent campaign ID

          • is_new_thread
            Type: boolean

            Send as new email thread

          • schedule_id
            Type: integer nullable

            Sending schedule ID

    • title
      Type: string

      Campaign name

    • type
      Type: string

      Always "nurture_campaign"

    • url_backoffice
      Type: stringFormat: uri

      Absolute backoffice URL to edit this nurture campaign in the 100Hires recruiter app. Use to render deep-links in agent UIs.

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for put/nurture-campaigns/{id}
curl https://api.100hires.com/v2/nurture-campaigns/1 \
  --request PUT \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "title": "",
  "workflow_id": 1,
  "stage_id": 1,
  "delay_time": 1,
  "relative_days": 1,
  "relative_time": 1,
  "timezone": "",
  "send_to_all": true,
  "response_move_to_stage_id": 1,
  "steps": [
    {
      "id": 1,
      "type": "email",
      "delay_days": 0,
      "send_condition": "if_no_reply",
      "is_deleted": true,
      "sender": {
        "type": "",
        "id": 1
      },
      "template_id": 1,
      "is_new_thread": true,
      "schedule_id": 1,
      "is_send_by_carousel": true
    }
  ]
}'
{
  "id": 601,
  "type": "nurture_campaign",
  "title": "Follow-up Sequence v2",
  "send_to_all": true,
  "response_move_to_stage_id": 50,
  "schedule": {
    "formatted": "Mon-Fri, 9am-5pm"
  },
  "steps": [
    {
      "id": 1001,
      "type": "email",
      "campaign_id": 601,
      "delay_days": 0,
      "send_condition": "if_no_reply",
      "sender": {
        "type": "user",
        "id": 1
      },
      "template_id": 401,
      "is_new_thread": true,
      "schedule_id": null
    }
  ]
}

Delete nurture campaign

Soft-deletes a nurture campaign. Active campaign executions will be stopped.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Responses
  • Deleted

    Type: object
    • success
      Type: boolean
      required

      Always true on success.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for delete/nurture-campaigns/{id}
curl https://api.100hires.com/v2/nurture-campaigns/1 \
  --request DELETE \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "success": true
}

Template Placeholders

Discover and prepare dynamic placeholders (e.g. first name, job title) for use in email templates. Placeholders are inserted as HTML <tag> elements returned by POST /template-placeholders/prepare; raw {{…}} tokens are not substituted.

List available placeholders

Returns available placeholders for email templates with pagination.

Workflow: Use this endpoint to discover placeholders, then call POST /template-placeholders/prepare with the chosen placeholder to get an HTML tag. Insert that tag into the email template body.

Use type to filter by category, q to search by label.

Query Parameters
  • company_id
    Type: integer

    Optional target company ID. Since each API key is already bound to one company, this is only needed when the key owner has access to multiple companies.

  • type
    Type: stringenum

    Filter by placeholder type: profile_field, job_variable, questionnaire_link, self_scheduling_link

    • profile_field
    • job_variable
    • questionnaire_link
    • self_scheduling_link
  • is_notification
    Type: integerenum

    Include notification-specific system placeholders

    • 0
    • 1
  • q
    Type: string

    Filter placeholders by label (case-insensitive substring match)

  • page
    Type: integer
    min:  
    1

    Page number (1-based). Defaults to 1.

  • size
    Type: integer
    min:  
    1
    max:  
    100

    Number of items per page (1–100). Defaults to 20.

Responses
  • Placeholder list

    Type: object
    • pagination
      Type: object · Pagination
      required
      • page
        Type: integer
        required

        Current page number.

      • page_count
        Type: integer
        required

        Total number of pages.

      • page_size
        Type: integer
        required

        Items per page.

      • total_count
        Type: integer
        required

        Total number of items.

    • placeholders
      Type: array object[] · TemplatePlaceholder[]
      required

      Array of placeholders.

      • form_name
        Type: string

        Form name (for form question placeholders)

      • form_question_id
        Type: integer

        Form question ID (for candidate_column type)

      • identifier

        Placeholder identifier (string or integer depending on type)

      • is_job_variable
        Type: boolean

        Whether this is a job variable placeholder

      • is_link
        Type: boolean

        Whether this placeholder renders as a link

      • job_variable_id
        Type: integer

        Job variable ID (for job_variable type)

      • label
        Type: string

        Human-readable label

      • qas_profile_question_id
        Type: integer

        Profile question ID (for candidate_column type)

      • system_column_title
        Type: string

        System column title (for candidate_column type)

      • type
        Type: string

        Placeholder type (system, candidate_column, job_variable, questionnaire_link, scheduling_link)

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/template-placeholders
curl https://api.100hires.com/v2/template-placeholders \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "placeholders": [
    {
      "type": "system",
      "identifier": "first_name",
      "label": "First Name",
      "is_link": false,
      "is_job_variable": false
    },
    {
      "type": "job_variable",
      "identifier": "job_title",
      "label": "Job Title",
      "is_link": false,
      "is_job_variable": true,
      "job_variable_id": 5
    }
  ],
  "pagination": {
    "page_size": 25,
    "page_count": 1,
    "page": 1,
    "total_count": 2
  }
}

Prepare placeholder tag

Converts a placeholder reference into an HTML tag that can be inserted into an email template body.

Body
required
application/json
  • type
    Type: string
    required

    Placeholder type (system, candidate_column, job_variable, questionnaire_link, scheduling_link)

  • form_question_id
    Type: integer

    Form question ID

  • identifier
    Type: string

    Placeholder identifier

  • job_variable_id
    Type: integer

    Job variable ID

  • qas_profile_question_id
    Type: integer

    Profile question ID

  • system_column_title
    Type: string

    System column title

Responses
  • Prepared placeholder HTML tag

    Type: object
    • html
      Type: string

      HTML tag string for embedding in template body

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/template-placeholders/prepare
curl https://api.100hires.com/v2/template-placeholders/prepare \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "type": "",
  "identifier": "",
  "qas_profile_question_id": 1,
  "form_question_id": 1,
  "system_column_title": "",
  "job_variable_id": 1
}'
{
  "html": "<tag contenteditable=\"false\" data-type=\"system\" data-identifier=\"first_name\">First Name</tag>"
}

Users

Company user directory and role-aware identity lookups.

List users

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

Query Parameters
  • company_id
    Type: integer

    Optional target company ID. Since each API key is already bound to one company, this is only needed when the key owner has access to multiple companies.

  • page
    Type: integer
    min:  
    1

    Page number (1-based). Defaults to 1.

  • size
    Type: integer
    min:  
    1
    max:  
    100

    Number of items per page (1–100). Defaults to 20.

Responses
  • User list

    Type: object
    • pagination
      Type: object · Pagination
      required
      • page
        Type: integer
        required

        Current page number.

      • page_count
        Type: integer
        required

        Total number of pages.

      • page_size
        Type: integer
        required

        Items per page.

      • total_count
        Type: integer
        required

        Total number of items.

    • users
      Type: array object[] · User[]
      required

      Array of users.

      • full_name
        Type: string
        required

        User's full name

      • id
        Type: integer
        required

        Unique identifier

      • created_at
        Type: integer | nullFormat: int64

        Unix timestamp (seconds)

      • default_mail_account_id
        Type: integer | null

        ID of the user's default mail account. Use this as from_account_id when sending emails via POST /candidates/{id}/messages. Null if the user has no configured mailbox.

      • email
        Type: string | null

        User's email address

      • role
        Type: string | null

        User's role in the company (e.g. admin, member)

      • updated_at
        Type: integer | nullFormat: int64

        Unix timestamp (seconds)

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/users
curl https://api.100hires.com/v2/users \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "users": [
    {
      "id": 1,
      "full_name": "Alice Smith",
      "email": "alice@acme.com",
      "role": "admin",
      "default_mail_account_id": 301,
      "created_at": 1711036800,
      "updated_at": 1711036800
    }
  ],
  "pagination": {
    "page_size": 25,
    "page_count": 1,
    "page": 1,
    "total_count": 1
  }
}

Get user

Returns a single user accessible in current tenant scope. Use for identity resolution in automation flows.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Responses
  • User

    Type: object
    • full_name
      Type: string
      required

      User's full name

    • id
      Type: integer
      required

      Unique identifier

    • created_at
      Type: integer | nullFormat: int64

      Unix timestamp (seconds)

    • default_mail_account_id
      Type: integer | null

      ID of the user's default mail account. Use this as from_account_id when sending emails via POST /candidates/{id}/messages. Null if the user has no configured mailbox.

    • email
      Type: string | null

      User's email address

    • role
      Type: string | null

      User's role in the company (e.g. admin, member)

    • updated_at
      Type: integer | nullFormat: int64

      Unix timestamp (seconds)

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/users/{id}
curl https://api.100hires.com/v2/users/1 \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "id": 1,
  "full_name": "Alice Smith",
  "email": "alice@acme.com",
  "role": "admin",
  "default_mail_account_id": 301,
  "created_at": 1711036800,
  "updated_at": 1711036800
}

List user's mail accounts

Returns mail accounts connected to the specified user within the current tenant scope. Use this endpoint to resolve from_account_id before creating scheduled emails.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Query Parameters
  • page
    Type: integer
    min:  
    1

    Page number (1-based). Defaults to 1.

  • size
    Type: integer
    min:  
    1
    max:  
    100

    Number of items per page (1–100). Defaults to 20.

Responses
  • User mail accounts

    Type: object
    • mail_accounts
      Type: array object[] · MailAccount[]
      required

      Array of mail accounts.

      • email
        Type: stringFormat: email
        required

        Email address.

      • id
        Type: integer
        required

        Mail account ID.

      • is_configured
        Type: boolean
        required

        Whether the account is fully configured.

      • is_default
        Type: boolean
        required

        Whether this is the default send-from account.

      • mailbox_id
        Type: integer
        required

        Internal mailbox ID.

      • provider
        Type: object · MailAccountProvider nullable
        required
        • label
          Type: string
          required

          Provider display name.

        • name
          Type: stringenum
          required

          Provider identifier.

          • gmail
          • outlook
    • pagination
      Type: object · Pagination
      required
      • page
        Type: integer
        required

        Current page number.

      • page_count
        Type: integer
        required

        Total number of pages.

      • page_size
        Type: integer
        required

        Items per page.

      • total_count
        Type: integer
        required

        Total number of items.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/users/{id}/mail-accounts
curl https://api.100hires.com/v2/users/1/mail-accounts \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "mail_accounts": [
    {
      "id": 301,
      "email": "alice@acme.com",
      "provider": {
        "name": "gmail",
        "label": "Gmail"
      },
      "mailbox_id": 10,
      "is_default": true,
      "is_configured": true
    }
  ],
  "pagination": {
    "page_size": 25,
    "page_count": 1,
    "page": 1,
    "total_count": 1
  }
}

Get user's activity feed

Chronological feed (newest first) of the actions the user PERFORMED over a period — created candidates/jobs, notes (full body), stage moves (from/to stage names), disqualifications (reason), manually sent emails (subject + full body), manually sent SMS (full body) and logged Twilio calls (duration, status, transcription when available). Bodies and names are embedded — no follow-up requests needed for a full audit. Automation-originated emails/SMS (nurture campaigns, scheduled sends) are excluded: the feed reflects manual work only. Interviews the user HELD are NOT part of this feed (the event store carries no interviewer attribution) — use GET /interviews?interviewer_user_id={id}&date=... for those; a weekly audit is exactly these two requests. Requires the companyManageSettings permission (Administrator/Recruiter roles) — the same audience as the in-app Activity Log report. company_id disambiguates multi-company API keys; without it the first accessible company the user belongs to is used. Content referencing hard-deleted source records degrades to null with content: missed — the activity row itself always stays. New activity reaches the feed with a few minutes' ingestion lag.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Query Parameters
  • company_id
    Type: integer

    Optional target company ID. Since each API key is already bound to one company, this is only needed when the key owner has access to multiple companies.

  • since
    required

    Inclusive lower bound on activity timestamp. REQUIRED — the feed is period-scoped. Must be less than or equal to until (or the current time when until is omitted), otherwise the request fails validation. Accepts a Unix timestamp (seconds) or an ISO-8601 string with timezone offset (e.g. 2026-04-01T00:00:00Z). Fractional seconds are accepted but truncated to whole seconds.

    • Type: integer
      min:  
      0

      Integer numbers.

  • until

    Inclusive upper bound on activity timestamp; defaults to now. Accepts a Unix timestamp (seconds) or an ISO-8601 string with timezone offset.

    • Type: integer
      min:  
      0

      Integer numbers.

  • event_type
    Type: string

    Comma-separated list of activity types to filter by. Supported: candidate_added, job_created, stage_moved, hired, disqualified, email_sent, sms_sent, call_logged, note_added.

  • page
    Type: integer
    min:  
    1

    Page number (1-based). Defaults to 1.

  • size
    Type: integer
    min:  
    1
    max:  
    100

    Number of items per page (1–100). Defaults to 20.

  • view
    Type: stringenum

    Response shape selector for list endpoints. full (default) returns every field — backward-compatible with pre-existing clients. summary returns a thinned payload designed for agent-friendly list browsing: heavy fields (description HTML, embedded profile answers, full message bodies, embedded relations, etc.) are omitted or replaced with *_preview truncations. Use summary when paging through large result sets and fetch a single record with the corresponding GET /{resource}/{id} endpoint when full data is needed.

    • full
    • summary
Responses
  • User activity feed

    Type: object
    • activities
      Type: array · UserActivity[]
      required

      Activity feed items, newest first.

        • One user-activity feed item (#3980). event_id/type/occurred_at are always present; the rest of the object is the per-type payload. candidate/job references are the STANDARD summary payloads (the same objects /candidates and /jobs return). With view=summary the heavy bodies (email body, SMS body, note text, call transcription text) are replaced by 200-character *_preview twins. When the source record behind email/sms/note/call was hard-deleted, that key is null and content: missed marks the degradation — the item itself is never dropped.

          • candidate
            nullable
            required

            The STANDARD candidate object in summary view — the same shape /candidates returns (the Candidate schema without profile). An {id}-only stub when the candidate is hard-deleted; null when the event carries no candidate.

            • company_id
              Type: integer
              required

              ID of the company this candidate belongs to

            • created_at
              Type: integerFormat: int64
              required

              Unix timestamp (seconds)

            • id
              Type: integer
              required

              Unique identifier

            • updated_at
              Type: integerFormat: int64
              required

              Unix timestamp (seconds)

            • alias
              Type: string | null

              Short alphanumeric alias used in profile URLs. Use this to build candidate profile links — https://app.100hires.com/candidate/{alias}. Also accepted as {id} in API requests.

            • applications
              Type: array object[] · CandidateApplicationSummary[]

              Summary of all applications this candidate has across jobs

              • id
                Type: integer
                required

                Application ID.

              • job
                Type: object
                required

                Job summary (id, title, status).

                • id
                  Type: integer
                  required

                  Integer numbers.

                • title
                  Type: string
                  required
              • stage
                Type: object · IdName nullable
                • id
                  Type: integer
                  required

                  Unique identifier.

                • name
                  Type: string
                  required

                  Display name.

            • days_since_last_message
              Type: integer | null

              Number of whole days since the last message. Computed at request time. Null if no messages exist.

            • emails
              Type: array string[] | null nullable

              List of candidate email addresses

            • first_name
              Type: string | null

              Candidate's first name

            • ip
              Type: string | null

              IP address from which the candidate applied

            • last_message_at
              Type: integer | nullFormat: int64

              Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.

            • last_name
              Type: string | null

              Candidate's last name

            • origin
              Type: object · IdName nullable

              Where the candidate originally came from (e.g. job board name)

              • id
                Type: integer
                required

                Unique identifier.

              • name
                Type: string
                required

                Display name.

            • phones
              Type: array string[] | null nullable

              List of candidate phone numbers

            • profile
              Type: array object[] · ProfileAnswer[]

              Candidate profile field answers (application form responses). Present only when view=full (default); omitted entirely when view=summary to keep list responses inside the agent context budget — a single candidate can carry dozens of free-form answers.

              • question_id
                Type: integer
                required

                Question ID.

              • question_text
                Type: string
                required

                Question label.

              • value
                required

                Answer value (string, array, or null).

            • source
              Type: object · IdName nullable

              How the candidate was sourced (e.g. LinkedIn, Referral)

              • id
                Type: integer
                required

                Unique identifier.

              • name
                Type: string
                required

                Display name.

            • url_backoffice
              Type: stringFormat: uri

              Absolute backoffice URL of the candidate in the 100Hires recruiter app. Use to render deep-links in agent UIs.

          • event_id
            Type: string
            required

            Deterministic event UUID from the reporting event store.

          • occurred_at
            Type: integerFormat: int64
            required

            Unix timestamp (seconds, UTC) of when the action happened.

          • type
            enum
            const:  
            candidate_added
            required

            Activity type identifier.

            • candidate_added
    • pagination
      Type: object · Pagination
      required
      • page
        Type: integer
        required

        Current page number.

      • page_count
        Type: integer
        required

        Total number of pages.

      • page_size
        Type: integer
        required

        Items per page.

      • total_count
        Type: integer
        required

        Total number of items.

  • Bad request

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/users/{id}/activities
curl 'https://api.100hires.com/v2/users/1/activities?since=1751328000' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "activities": [
    {
      "event_id": "1ce65710-9ac7-3519-b086-e478adbce719",
      "type": "sms_sent",
      "occurred_at": 1751450400,
      "candidate": {
        "id": 15,
        "alias": "john-doe",
        "first_name": "John",
        "last_name": "Doe"
      },
      "message_id": 6101,
      "sms": {
        "body": "Hi John, are you available for a quick call tomorrow?"
      }
    }
  ],
  "pagination": {
    "page_size": 20,
    "page_count": 1,
    "page": 1,
    "total_count": 1
  }
}

Attachments

Download attachment bytes by category and UUID.

URLs in this format are returned in other API responses — resumes (/candidates/{id}/resume), candidate files (/candidates/{id}/files), application attachments (/applications/{id}/attachments), message attachments (inside /candidates/{id}/messages), call recordings (inside activity events).

Authentication is the same Bearer token used for the rest of the API. The response is a binary stream with Content-Type from the stored MIME type, Content-Length, and Content-Disposition: attachment; filename="..." (original filename).

Download attachment bytes

Streams the raw file bytes for an attachment identified by category + uuid.

The full URL is pre-built and returned in other API responses (resume, candidate files, application attachments, message attachments, call recordings). Clients should follow the URL as-is with the same Authorization: Bearer header used elsewhere.

Visibility rules: the attachment must belong to a company accessible by the authenticated API key (partner + clients, or the authenticated company itself). Shadowed candidates return 404.

The response sets Content-Disposition: attachment; filename="..." with the original filename (not the internal hashed name in the URL).

Path Parameters
  • category
    Type: stringenum
    required

    Attachment category (matches the segment in the returned URL).

    • application
    • candidate
    • candidate_comment
    • call_recording
    • company_favicon
  • uuid
    Type: stringFormat: uuid
    required

    Attachment UUID.

  • file_name
    Type: string
    required

    Internal storage filename segment from the URL. Required for the route to match; the Content-Disposition header on the response carries the human-readable original filename.

Responses
  • Raw file bytes.

    Content-Type
    Type: string

    MIME type of the file (e.g. application/pdf, application/vnd.openxmlformats-officedocument.wordprocessingml.document).

    Content-Length
    Type: integer

    File size in bytes.

    Content-Disposition
    Type: string

    Always attachment; filename="..." with the original filename.

    Type: stringFormat: binary

    binary data, used to describe files

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/attachments/{category}/{uuid}/{file_name}
curl 'https://api.100hires.com/v2/attachments/application/123e4567-e89b-12d3-a456-426614174000/{file_name}' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
@filename

Upload attachment

Uploads a file and creates an attachment in the authenticated company.

Supported categories. The attachment is stored under company_id (if provided — must be accessible by the API key) or the authenticated company by default. The referenced object_id must belong to that same company (strict company_id match, no cross-company uploads).

  • voicemail — audio file (wav/mp3, ≤20 MB). No object_id required. Returned uuid can be referenced as attachment_uuid in nurture-campaign voicemail steps.
  • candidate — generic candidate file. object_id = candidate ID.
  • application — application attachment (signed docs, offer letters, etc.). object_id = application ID.
  • candidate_comment — attachment for a candidate comment. object_id = comment ID.
  • job_note — attachment for a job note. object_id = job note ID.
  • company_favicon, company_header, company_link_preview — company branding assets. object_id = company ID (must match the authenticated company or a client company the API key can access).

Returns ApiAttachment. Follow url with the same Bearer token to download the file later.

Body
required
application/json
  • category
    Type: stringenum
    required

    Attachment category. Determines file-type validation rules and object_id requirements.

    • voicemail
    • candidate
    • application
    • candidate_comment
    • job_note
    • company_favicon
    • company_header
    • company_link_preview
  • file
    Type: object · FileData
    required
    • data
      Type: string
      required

      Base64 content

    • file_name
      Type: string
      required

      Original file name.

    • mime_type
      Type: string
      required

      MIME type (e.g. application/pdf).

    • size
      Type: integer

      Optional for uploads, returned in responses

  • company_id
    Type: integer nullable

    Target company ID. Required only for partner API keys that manage multiple client companies — pick the company the attachment belongs to. If omitted, defaults to the authenticated company. The attachment is stored under this company, and the referenced object_id (when present) MUST belong to this same company — mismatch returns 404.

  • object_id
    Type: integer nullable

    Target object ID. Required for every category except voicemail. Resolves to candidate/application/comment/job-note/company per category. The object's company is strictly matched against company_id (or authenticated company when company_id omitted); no cross-company uploads.

Responses
  • Uploaded attachment

    Type: object

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

    • file
      Type: object · AttachmentFile
      required
      • file_ext
        Type: string
        required

        File extension.

      • file_type
        Type: string
        required

        File type category.

      • is_image
        Type: boolean nullable
        required

        Whether the file is an image.

      • orig_file_name
        Type: string
        required

        Original file name.

      • readable_size
        Type: string
        required

        Human-readable file size.

    • relative_time
      Type: string
      required

      Human-readable time since upload (e.g. "2 days ago").

    • url
      Type: stringFormat: uri nullable
      required

      Absolute download URL (e.g. https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit with Authorization: Bearer <API_KEY>.

    • uuid
      Type: stringFormat: uuid
      required

      Unique attachment identifier. Stable across API calls; use in referencing endpoints.

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/attachments
curl https://api.100hires.com/v2/attachments \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "category": "voicemail",
  "company_id": 1,
  "object_id": 1,
  "file": {
    "data": "",
    "file_name": "",
    "mime_type": "",
    "size": 1
  }
}'
{
  "uuid": "9f8e7d6c-5b4a-3210-9f8e-7d6c5b4a3210",
  "url": "https://api.100hires.com/v2/attachments/voicemail/9f8e7d6c-5b4a-3210-9f8e-7d6c5b4a3210/welcome_message.mp3",
  "relative_time": "just now",
  "file": {
    "is_image": false,
    "orig_file_name": "welcome_message.mp3",
    "file_ext": "mp3",
    "file_type": "audio/mpeg",
    "readable_size": "512 KB"
  }
}

Companies

List partner companies

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

Query Parameters
  • page
    Type: integer
    min:  
    1

    Page number (1-based). Defaults to 1.

  • size
    Type: integer
    min:  
    1
    max:  
    100

    Number of items per page (1–100). Defaults to 20.

Responses
  • Company list

    Type: object
    • companies
      Type: array object[] · Company[]
      required

      Array of companies.

      • id
        Type: integer
        required

        Unique identifier

      • name
        Type: string
        required

        Company name

      • company_owner_email
        Type: string | null

        Email of the company owner

      • company_owner_name
        Type: string | null

        Full name of the company owner

      • company_owner_phone
        Type: string | null

        Phone number of the company owner

      • is_staffing_agency
        Type: boolean

        Whether this company is a staffing agency

      • logo
        Type: string | null

        URL of the company logo image

      • url
        Type: string | null

        Company careers page URL

      • website
        Type: string | null

        Company website URL

    • pagination
      Type: object · Pagination
      required
      • page
        Type: integer
        required

        Current page number.

      • page_count
        Type: integer
        required

        Total number of pages.

      • page_size
        Type: integer
        required

        Items per page.

      • total_count
        Type: integer
        required

        Total number of items.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/companies
curl https://api.100hires.com/v2/companies \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "companies": [
    {
      "id": 101,
      "name": "Acme Corp",
      "website": "https://acme.com",
      "url": "https://app.100hires.com/acme",
      "is_staffing_agency": false,
      "logo": "https://cdn.100hires.com/logos/acme.png",
      "company_owner_email": "owner@acme.com",
      "company_owner_phone": "+1-555-0100",
      "company_owner_name": "John Doe"
    }
  ],
  "pagination": {
    "page_size": 25,
    "page_count": 1,
    "page": 1,
    "total_count": 1
  }
}

Create company

Creates a client company and links ownership context according to partner rules. Typical entrypoint for multi-tenant onboarding.

Body
required
application/json
  • company_owner_email
    Type: stringFormat: email
    required

    Company owner email address.

  • company_owner_name
    Type: string
    required

    Company owner full name.

  • name
    Type: string
    required

    Company name.

  • company_owner_phone
    Type: string

    Company owner phone number.

  • is_staffing_agency
    Type: boolean

    Whether this company is a staffing agency.

  • Type: object · FileData
    • data
      Type: string
      required

      Base64 content

    • file_name
      Type: string
      required

      Original file name.

    • mime_type
      Type: string
      required

      MIME type (e.g. application/pdf).

    • size
      Type: integer

      Optional for uploads, returned in responses

  • url
    Type: string

    Company profile URL.

  • website
    Type: string

    Company website URL.

Responses
  • Created company

    Type: object
    • id
      Type: integer
      required

      Unique identifier

    • name
      Type: string
      required

      Company name

    • company_owner_email
      Type: string | null

      Email of the company owner

    • company_owner_name
      Type: string | null

      Full name of the company owner

    • company_owner_phone
      Type: string | null

      Phone number of the company owner

    • is_staffing_agency
      Type: boolean

      Whether this company is a staffing agency

    • logo
      Type: string | null

      URL of the company logo image

    • url
      Type: string | null

      Company careers page URL

    • website
      Type: string | null

      Company website URL

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/companies
curl https://api.100hires.com/v2/companies \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "name": "",
  "website": "",
  "url": "",
  "company_owner_email": "",
  "company_owner_name": "",
  "company_owner_phone": "",
  "is_staffing_agency": true,
  "logo": {
    "data": "",
    "file_name": "",
    "mime_type": "",
    "size": 1
  }
}'
{
  "id": 102,
  "name": "Acme Corp",
  "website": "https://acme.com",
  "url": "https://app.100hires.com/acme",
  "is_staffing_agency": false,
  "logo": null,
  "company_owner_email": "owner@acme.com",
  "company_owner_phone": "+1-555-0100",
  "company_owner_name": "John Doe"
}

Get company

Returns company profile and owner metadata used by partner APIs. Use before updates or ownership-sensitive actions.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Responses
  • Company

    Type: object
    • id
      Type: integer
      required

      Unique identifier

    • name
      Type: string
      required

      Company name

    • company_owner_email
      Type: string | null

      Email of the company owner

    • company_owner_name
      Type: string | null

      Full name of the company owner

    • company_owner_phone
      Type: string | null

      Phone number of the company owner

    • is_staffing_agency
      Type: boolean

      Whether this company is a staffing agency

    • logo
      Type: string | null

      URL of the company logo image

    • url
      Type: string | null

      Company careers page URL

    • website
      Type: string | null

      Company website URL

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/companies/{id}
curl https://api.100hires.com/v2/companies/1 \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "id": 101,
  "name": "Acme Corp",
  "website": "https://acme.com",
  "url": "https://app.100hires.com/acme",
  "is_staffing_agency": false,
  "logo": "https://cdn.100hires.com/logos/acme.png",
  "company_owner_email": "owner@acme.com",
  "company_owner_phone": "+1-555-0100",
  "company_owner_name": "John Doe"
}

Update company

Updates company profile, owner contact data, and optional logo payload. Supports partner-operated account management flows.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Body
required
application/json
  • company_owner_email
    Type: stringFormat: email

    Company owner email address.

  • company_owner_name
    Type: string

    Company owner full name.

  • company_owner_phone
    Type: string

    Company owner phone number.

  • is_staffing_agency
    Type: boolean

    Whether this company is a staffing agency.

  • Type: object · FileData
    • data
      Type: string
      required

      Base64 content

    • file_name
      Type: string
      required

      Original file name.

    • mime_type
      Type: string
      required

      MIME type (e.g. application/pdf).

    • size
      Type: integer

      Optional for uploads, returned in responses

  • name
    Type: string

    Company name.

  • url
    Type: string

    Company profile URL.

  • website
    Type: string

    Company website URL.

Responses
  • Updated company

    Type: object
    • id
      Type: integer
      required

      Unique identifier

    • name
      Type: string
      required

      Company name

    • company_owner_email
      Type: string | null

      Email of the company owner

    • company_owner_name
      Type: string | null

      Full name of the company owner

    • company_owner_phone
      Type: string | null

      Phone number of the company owner

    • is_staffing_agency
      Type: boolean

      Whether this company is a staffing agency

    • logo
      Type: string | null

      URL of the company logo image

    • url
      Type: string | null

      Company careers page URL

    • website
      Type: string | null

      Company website URL

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for put/companies/{id}
curl https://api.100hires.com/v2/companies/1 \
  --request PUT \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "name": "",
  "website": "",
  "url": "",
  "company_owner_email": "",
  "company_owner_name": "",
  "company_owner_phone": "",
  "is_staffing_agency": true,
  "logo": {
    "data": "",
    "file_name": "",
    "mime_type": "",
    "size": 1
  }
}'
{
  "id": 101,
  "name": "Acme Corp Updated",
  "website": "https://acme.com",
  "url": "https://app.100hires.com/acme",
  "is_staffing_agency": false,
  "logo": "https://cdn.100hires.com/logos/acme.png",
  "company_owner_email": "owner@acme.com",
  "company_owner_phone": "+1-555-0200",
  "company_owner_name": "John Doe"
}

Delete company

Deletes a company. Use for lifecycle control in partner tenancy management.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Responses
  • Deleted

    Type: object
    • success
      Type: boolean
      required

      Always true on success.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for delete/companies/{id}
curl https://api.100hires.com/v2/companies/1 \
  --request DELETE \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "success": true
}

Restore company

Restores a previously deleted company and re-enables it for active use. Use for recovery and rollback scenarios.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Responses
  • Restored company

    Type: object
    • id
      Type: integer
      required

      Unique identifier

    • name
      Type: string
      required

      Company name

    • company_owner_email
      Type: string | null

      Email of the company owner

    • company_owner_name
      Type: string | null

      Full name of the company owner

    • company_owner_phone
      Type: string | null

      Phone number of the company owner

    • is_staffing_agency
      Type: boolean

      Whether this company is a staffing agency

    • logo
      Type: string | null

      URL of the company logo image

    • url
      Type: string | null

      Company careers page URL

    • website
      Type: string | null

      Company website URL

  • Bad request

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for patch/companies/{id}/restore
curl https://api.100hires.com/v2/companies/1/restore \
  --request PATCH \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "id": 101,
  "name": "Acme Corp",
  "website": "https://acme.com",
  "url": "https://app.100hires.com/acme",
  "is_staffing_agency": false,
  "logo": "https://cdn.100hires.com/logos/acme.png",
  "company_owner_email": "owner@acme.com",
  "company_owner_phone": "+1-555-0100",
  "company_owner_name": "John Doe"
}

List company webhooks

Lists webhook subscriptions configured at company scope.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Responses
  • Company webhooks

    Type: object
    • pagination
      Type: object · Pagination
      required
      • page
        Type: integer
        required

        Current page number.

      • page_count
        Type: integer
        required

        Total number of pages.

      • page_size
        Type: integer
        required

        Items per page.

      • total_count
        Type: integer
        required

        Total number of items.

    • webhooks
      Type: array object[] · Webhook[]
      required

      Array of webhooks.

      • id
        Type: integer

        Unique identifier

      • url
        Type: string

        Endpoint URL that receives webhook event payloads

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/companies/{id}/webhooks
curl https://api.100hires.com/v2/companies/1/webhooks \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "webhooks": [
    {
      "id": 501,
      "url": "https://hooks.example.com/100hires"
    }
  ],
  "pagination": {
    "page_size": 25,
    "page_count": 1,
    "page": 1,
    "total_count": 1
  }
}

Create company webhook

Creates a company-scoped webhook subscription. Use for outbound company-level event integrations.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Body
required
application/json
  • url
    Type: string
    max length:  
    2048
    required

    Webhook destination URL. Must be HTTPS.

Responses
  • Created webhook. signing_secret is returned only here — store it securely.

    Type: object
    • id
      Type: integer

      Unique identifier

    • signing_secret
      Type: string

      HMAC-SHA256 signing secret for this webhook, used to verify the x-hires-signature-v2 header. Returned ONLY in create and rotate-secret responses — store it securely, it is never shown again.

    • url
      Type: string

      Endpoint URL that receives webhook event payloads

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/companies/{id}/webhooks
curl https://api.100hires.com/v2/companies/1/webhooks \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "url": ""
}'
{
  "id": 502,
  "url": "https://hooks.example.com/100hires",
  "signing_secret": "3f9a8b7c6d5e4f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a"
}

Rotate company webhook signing secret

Rotates the webhook's signing secret with zero downtime. The previous secret remains valid for a grace window so both old and new x-hires-signature-v2 signatures are accepted while you switch over.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

  • webhook_id
    Type: integer
    required

    Webhook subscription ID.

Responses
  • New signing secret (the previous one stays valid for a grace window).

    Type: object
    • id
      Type: integer

      Unique identifier

    • signing_secret
      Type: string

      HMAC-SHA256 signing secret for this webhook, used to verify the x-hires-signature-v2 header. Returned ONLY in create and rotate-secret responses — store it securely, it is never shown again.

    • url
      Type: string

      Endpoint URL that receives webhook event payloads

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/companies/{id}/webhooks/{webhook_id}/rotate-secret
curl https://api.100hires.com/v2/companies/1/webhooks/1/rotate-secret \
  --request POST \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "id": 502,
  "url": "https://hooks.example.com/100hires",
  "signing_secret": "9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c"
}

Delete company webhook

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

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

  • webhook_id
    Type: integer
    required

    Webhook subscription ID.

Responses
  • Deleted

    Type: object
    • success
      Type: boolean
      required

      Always true on success.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for delete/companies/{id}/webhooks/{webhook_id}
curl https://api.100hires.com/v2/companies/1/webhooks/1 \
  --request DELETE \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "success": true
}

List all mail accounts for current company

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

Query Parameters
  • page
    Type: integer
    min:  
    1

    Page number (1-based). Defaults to 1.

  • size
    Type: integer
    min:  
    1
    max:  
    100

    Number of items per page (1–100). Defaults to 20.

Responses
  • Company mail accounts

    Type: object
    • mail_accounts
      Type: array object[] · CompanyMailAccount[]
      required

      Array of mail accounts.

      • company_id
        Type: integer
        required

        Company ID.

      • email
        Type: stringFormat: email
        required

        Email address.

      • id
        Type: integer
        required

        Mail account ID.

      • is_configured
        Type: boolean
        required

        Whether the account is fully configured.

      • is_default
        Type: boolean
        required

        Whether this is the user's default send-from account.

      • mailbox_id
        Type: integer
        required

        Internal mailbox ID.

      • provider
        Type: object · MailAccountProvider nullable
        required
        • label
          Type: string
          required

          Provider display name.

        • name
          Type: stringenum
          required

          Provider identifier.

          • gmail
          • outlook
      • user_email
        Type: stringFormat: email nullable
        required

        Owner user email.

      • user_id
        Type: integer
        required

        Owner user ID.

    • pagination
      Type: object · Pagination
      required
      • page
        Type: integer
        required

        Current page number.

      • page_count
        Type: integer
        required

        Total number of pages.

      • page_size
        Type: integer
        required

        Items per page.

      • total_count
        Type: integer
        required

        Total number of items.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/companies/mail-accounts
curl https://api.100hires.com/v2/companies/mail-accounts \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "mail_accounts": [
    {
      "id": 301,
      "company_id": 101,
      "user_id": 1,
      "user_email": "recruiter@acme.com",
      "email": "hiring@acme.com",
      "provider": {
        "name": "gmail",
        "label": "Gmail"
      },
      "mailbox_id": 10,
      "is_default": true,
      "is_configured": true
    }
  ],
  "pagination": {
    "page_size": 25,
    "page_count": 1,
    "page": 1,
    "total_count": 1
  }
}

List all mail accounts for a company

Returns all mail accounts for all users in the specified company. The company must be accessible (own company or a client).

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Query Parameters
  • page
    Type: integer
    min:  
    1

    Page number (1-based). Defaults to 1.

  • size
    Type: integer
    min:  
    1
    max:  
    100

    Number of items per page (1–100). Defaults to 20.

Responses
  • Company mail accounts

    Type: object
    • mail_accounts
      Type: array object[] · CompanyMailAccount[]
      required

      Array of mail accounts.

      • company_id
        Type: integer
        required

        Company ID.

      • email
        Type: stringFormat: email
        required

        Email address.

      • id
        Type: integer
        required

        Mail account ID.

      • is_configured
        Type: boolean
        required

        Whether the account is fully configured.

      • is_default
        Type: boolean
        required

        Whether this is the user's default send-from account.

      • mailbox_id
        Type: integer
        required

        Internal mailbox ID.

      • provider
        Type: object · MailAccountProvider nullable
        required
        • label
          Type: string
          required

          Provider display name.

        • name
          Type: stringenum
          required

          Provider identifier.

          • gmail
          • outlook
      • user_email
        Type: stringFormat: email nullable
        required

        Owner user email.

      • user_id
        Type: integer
        required

        Owner user ID.

    • pagination
      Type: object · Pagination
      required
      • page
        Type: integer
        required

        Current page number.

      • page_count
        Type: integer
        required

        Total number of pages.

      • page_size
        Type: integer
        required

        Items per page.

      • total_count
        Type: integer
        required

        Total number of items.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/companies/{id}/mail-accounts
curl https://api.100hires.com/v2/companies/1/mail-accounts \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "mail_accounts": [
    {
      "id": 301,
      "company_id": 101,
      "user_id": 1,
      "user_email": "recruiter@acme.com",
      "email": "hiring@acme.com",
      "provider": {
        "name": "gmail",
        "label": "Gmail"
      },
      "mailbox_id": 10,
      "is_default": true,
      "is_configured": true
    }
  ],
  "pagination": {
    "page_size": 25,
    "page_count": 1,
    "page": 1,
    "total_count": 1
  }
}

Taxonomy

List company tags

Returns all tags available for the target company. Recommended to cache for fast tagging UX and validation.

Query Parameters
  • company_id
    Type: integer

    Optional target company ID. Since each API key is already bound to one company, this is only needed when the key owner has access to multiple companies.

Responses
  • Tags

    Type: object
    • pagination
      Type: object · Pagination
      required
      • page
        Type: integer
        required

        Current page number.

      • page_count
        Type: integer
        required

        Total number of pages.

      • page_size
        Type: integer
        required

        Items per page.

      • total_count
        Type: integer
        required

        Total number of items.

    • tags
      Type: array string[]
      required

      Array of tags.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/tags
curl https://api.100hires.com/v2/tags \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "tags": [
    "Senior",
    "Remote",
    "Urgent"
  ],
  "pagination": {
    "page_size": 25,
    "page_count": 1,
    "page": 1,
    "total_count": 3
  }
}

List workflows

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

Query Parameters
  • company_id
    Type: integer

    Optional target company ID. Since each API key is already bound to one company, this is only needed when the key owner has access to multiple companies.

Responses
  • Workflows

    Type: object
    • pagination
      Type: object · Pagination
      required
      • page
        Type: integer
        required

        Current page number.

      • page_count
        Type: integer
        required

        Total number of pages.

      • page_size
        Type: integer
        required

        Items per page.

      • total_count
        Type: integer
        required

        Total number of items.

    • workflows
      Type: array object[] · Workflow[]
      required

      Array of workflows.

      • id
        Type: integer
        required

        Workflow ID.

      • name
        Type: string
        required

        Workflow name.

      • stages
        Type: array object[] · WorkflowStage[]
        required

        Array of stages in this workflow.

        • id
          Type: integer
          required

          Stage ID.

        • name
          Type: string
          required

          Stage name.

        • order
          Type: integer | null

          Stage position in the pipeline.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/workflows
curl https://api.100hires.com/v2/workflows \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "workflows": [
    {
      "id": 1,
      "name": "Default Pipeline",
      "stages": [
        {
          "id": 10,
          "name": "Applied",
          "order": 1
        },
        {
          "id": 11,
          "name": "Interview",
          "order": 2
        },
        {
          "id": 12,
          "name": "Offer",
          "order": 3
        }
      ]
    }
  ],
  "pagination": {
    "page_size": 25,
    "page_count": 1,
    "page": 1,
    "total_count": 1
  }
}

List workflow stages

Returns pipeline stages filtered by workflow or job when provided. Useful for transition UIs and workflow validation.

Query Parameters
  • company_id
    Type: integer

    Optional target company ID. Since each API key is already bound to one company, this is only needed when the key owner has access to multiple companies.

  • workflow_id
    Type: integer

    Filter stages by workflow ID (from GET /taxonomy/workflows).

  • job_id
    Type: integer

    Filter stages by job ID (returns stages from the job's assigned workflow).

Responses
  • Stages

    Type: object
    • stages
      Type: array object[] · WorkflowStage[]
      required

      Array of pipeline stages.

      • id
        Type: integer
        required

        Stage ID.

      • name
        Type: string
        required

        Stage name.

      • order
        Type: integer | null

        Stage position in the pipeline.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/workflows/stages
curl https://api.100hires.com/v2/workflows/stages \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "stages": [
    {
      "id": 10,
      "name": "Applied",
      "order": 1
    },
    {
      "id": 11,
      "name": "Interview",
      "order": 2
    },
    {
      "id": 12,
      "name": "Offer",
      "order": 3
    }
  ]
}

List stages for a specific workflow

Returns stages for a specific workflow by ID. Equivalent to GET /workflows/stages?workflow_id={id}.

Path Parameters
  • id
    Type: integer
    required

    Workflow ID

Query Parameters
  • company_id
    Type: integer

    Optional target company ID. Since each API key is already bound to one company, this is only needed when the key owner has access to multiple companies.

Responses
  • Stages for the specified workflow

    Type: object
    • stages
      Type: array object[] · WorkflowStage[]
      required

      Array of pipeline stages.

      • id
        Type: integer
        required

        Stage ID.

      • name
        Type: string
        required

        Stage name.

      • order
        Type: integer | null

        Stage position in the pipeline.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/workflows/{id}/stages
curl https://api.100hires.com/v2/workflows/1/stages \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "stages": [
    {
      "id": 10,
      "name": "Applied",
      "order": 1
    },
    {
      "id": 11,
      "name": "Interview",
      "order": 2
    },
    {
      "id": 12,
      "name": "Offer",
      "order": 3
    }
  ]
}

List statuses

Returns job status labels used by the platform. Cache this taxonomy to validate job status updates.

Responses
  • Statuses

    Type: object
    • statuses
      Type: array string[]
      required

      Array of job statuses.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/statuses
curl https://api.100hires.com/v2/statuses \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "statuses": [
    "draft",
    "published",
    "on_hold",
    "closed",
    "archived"
  ]
}

List categories

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

Responses
  • Categories

    Type: object
    • categories
      Type: array object[] · IdName[]
      required

      Array of job categories.

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/categories
curl https://api.100hires.com/v2/categories \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "categories": [
    {
      "id": 1,
      "name": "Engineering"
    },
    {
      "id": 2,
      "name": "Design"
    },
    {
      "id": 3,
      "name": "Marketing"
    }
  ]
}

List employment types

Returns supported employment types. Use for validation and external system normalization.

Responses
  • Employment types

    Type: object
    • employment_types
      Type: array object[] · IdName[]
      required

      Array of employment types.

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/employment-types
curl https://api.100hires.com/v2/employment-types \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "employment_types": [
    {
      "id": 1,
      "name": "Full-time"
    },
    {
      "id": 2,
      "name": "Part-time"
    },
    {
      "id": 3,
      "name": "Contract"
    }
  ]
}

List education levels

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

Responses
  • Education levels

    Type: object
    • education_levels
      Type: array object[] · IdName[]
      required

      Array of education levels.

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/education-levels
curl https://api.100hires.com/v2/education-levels \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "education_levels": [
    {
      "id": 1,
      "name": "High School"
    },
    {
      "id": 2,
      "name": "Bachelor's"
    },
    {
      "id": 3,
      "name": "Master's"
    }
  ]
}

List experience levels

Returns experience level taxonomy values for role seniority modeling.

Responses
  • Experience levels

    Type: object
    • experience_levels
      Type: array object[] · IdName[]
      required

      Array of experience levels.

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/experience-levels
curl https://api.100hires.com/v2/experience-levels \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "experience_levels": [
    {
      "id": 1,
      "name": "Entry Level"
    },
    {
      "id": 2,
      "name": "Mid Level"
    },
    {
      "id": 3,
      "name": "Senior"
    }
  ]
}

List origins

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

Responses
  • Origins

    Type: object
    • origins
      Type: array object[] · IdName[]
      required

      Array of candidate origins.

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/origins
curl https://api.100hires.com/v2/origins \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "origins": [
    {
      "id": 1,
      "name": "Applied"
    },
    {
      "id": 2,
      "name": "Sourced"
    },
    {
      "id": 3,
      "name": "Referred"
    }
  ]
}

List sources

Returns company-specific source list. Recommended for attribution sync and reporting consistency.

Query Parameters
  • company_id
    Type: integer

    Optional target company ID. Since each API key is already bound to one company, this is only needed when the key owner has access to multiple companies.

Responses
  • Sources

    Type: object
    • sources
      Type: array object[] · IdName[]
      required

      Array of candidate sources.

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/sources
curl https://api.100hires.com/v2/sources \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "sources": [
    {
      "id": 1,
      "name": "LinkedIn"
    },
    {
      "id": 2,
      "name": "Indeed"
    },
    {
      "id": 3,
      "name": "Company Website"
    }
  ]
}

List boards

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

Responses
  • Boards

    Type: object
    • boards
      Type: array object[] · JobBoardItem[]
      required

      Array of job boards.

      • indeed_posting_url
        Type: string nullable

        Public Indeed posting URL when the job has been sourced/posted to Indeed; null otherwise. Populated only for the Indeed board.

      • name
        Type: string

        Board identifier.

      • title
        Type: string

        Board display name.

      • ziprecruiter_posting_url
        Type: string nullable

        Public ZipRecruiter posting URL (the API preview_url) when the job has been posted to ZipRecruiter; null otherwise. Populated only for the ZipRecruiter board.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/boards
curl https://api.100hires.com/v2/boards \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "boards": [
    {
      "name": "indeed",
      "title": "Indeed"
    },
    {
      "name": "linkedin",
      "title": "LinkedIn"
    }
  ]
}

List rejection reasons

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

Query Parameters
  • company_id
    Type: integer

    Optional target company ID. Since each API key is already bound to one company, this is only needed when the key owner has access to multiple companies.

Responses
  • Rejection reasons

    Type: object
    • rejection_reasons
      Type: array object[] · IdName[]
      required

      Array of rejection reasons.

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/rejection-reasons
curl https://api.100hires.com/v2/rejection-reasons \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "rejection_reasons": [
    {
      "id": 1,
      "name": "Not enough experience"
    },
    {
      "id": 2,
      "name": "Position filled"
    },
    {
      "id": 3,
      "name": "Salary expectations too high"
    }
  ]
}

List departments

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

Query Parameters
  • company_id
    Type: integer

    Optional target company ID. Since each API key is already bound to one company, this is only needed when the key owner has access to multiple companies.

Responses
  • Departments

    Type: object
    • departments
      Type: array object[] · IdName[]
      required

      Array of departments.

      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/departments
curl https://api.100hires.com/v2/departments \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "departments": [
    {
      "id": 1,
      "name": "Engineering"
    },
    {
      "id": 2,
      "name": "Product"
    },
    {
      "id": 3,
      "name": "Sales"
    }
  ]
}

Billing

Pricing state checks to gate paid-only API capabilities.

Billing Operations

Billing/pricing flags for current company

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

Responses
  • Billing state

    Type: object
    • is_paid
      Type: boolean
      required

      Whether the company has an active paid plan.

    • is_pricing_enabled
      Type: boolean
      required

      Whether pricing features are enabled.

    • success
      Type: boolean
      required

      Whether the request succeeded.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Forbidden

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/billing
curl https://api.100hires.com/v2/billing \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "success": true,
  "is_pricing_enabled": true,
  "is_paid": true
}

Feedback

Structured API feedback endpoint for agents and integrations to report issues and suggest improvements.

Feedback Operations

Submit API feedback

Submit structured feedback about API usage, missing features, or workflow improvements. Useful for AI agents and integrations to report issues programmatically.

Rate limited to 5 requests per hour per account.

Body
required
application/json
  • description
    Type: string
    max length:  
    2000
    required

    Description of the issue or feedback

  • context
    Type: object

    Arbitrary context object (max 4KB)

  • endpoint
    Type: string
    max length:  
    255

    The API endpoint this feedback relates to

  • issue_type
    Type: stringenum

    Category of the issue

    • missing_filter
    • pagination
    • performance
    • missing_field
    • bulk_operation
    • other
  • suggested_improvement
    Type: string
    max length:  
    2000

    Suggested solution or improvement

Responses
  • Feedback received

    Type: object
    • message
      Type: string
    • success
      Type: boolean
  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Too many requests

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/feedback
curl https://api.100hires.com/v2/feedback \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "description": "For bulk candidate enrichment, need a batch lookup by email. Currently requires N+1 requests.",
  "endpoint": "/v2/candidates",
  "issue_type": "bulk_operation",
  "suggested_improvement": "Add POST /v2/candidates/search with array of emails in request body",
  "context": {
    "agent": "claude",
    "task_description": "Enriching 50 candidates from CSV",
    "api_calls_made": 53,
    "estimated_optimal_calls": 2
  }
}'
{
  "success": true,
  "message": "Feedback received. Thank you!"
}

Career Site

Public API for career site integrations. Authenticates by company slug instead of Bearer token.

Pass the company slug via the X-Company-Slug header (or company_slug query param). No user context is required — these endpoints are public.

List public jobs

Returns publicly visible jobs for the given company. Supports filtering by department, employment type, city, and country. Use to power a custom careers page.

Query Parameters
  • company_slug
    Type: string

    Company slug (alternative to X-Company-Slug header)

  • department_id
    Type: integer

    Filter by department ID.

  • employment_type_id
    Type: integer

    Filter by employment type ID (e.g. Full-time, Part-time).

  • city
    Type: string

    Filter by job city (exact match).

  • country
    Type: string

    Filter by job country (exact match).

  • page
    Type: integer
    min:  
    1

    Page number (1-based). Defaults to 1.

  • size
    Type: integer
    min:  
    1
    max:  
    100

    Number of items per page (1–100). Defaults to 20.

Responses
  • Paginated list of public jobs

    Type: object
    • jobs
      Type: array object[] · CareerSiteJob[]
      required

      Array of public jobs.

      • application_url
        Type: stringFormat: uri
        required

        Public application form URL.

      • created_at
        Type: integerFormat: int64
        required

        Unix timestamp (seconds)

      • description
        Type: string
        required

        HTML content

      • id
        Type: integer
        required

        Job ID.

      • is_remote
        Type: boolean
        required

        Whether this is a remote position.

      • location
        Type: object · CareerSiteLocation
        required
        • city
          Type: string nullable

          City.

        • country
          Type: string nullable

          Country.

        • state
          Type: string nullable

          State or region.

      • title
        Type: string
        required

        Job title.

      • department
        Type: object · IdName nullable
        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

      • employment_type
        Type: object · IdName nullable
        • id
          Type: integer
          required

          Unique identifier.

        • name
          Type: string
          required

          Display name.

    • pagination
      Type: object · Pagination
      required
      • page
        Type: integer
        required

        Current page number.

      • page_count
        Type: integer
        required

        Total number of pages.

      • page_size
        Type: integer
        required

        Items per page.

      • total_count
        Type: integer
        required

        Total number of items.

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/career-site/jobs
curl https://api.100hires.com/v2/career-site/jobs \
  --header 'X-Company-Slug: YOUR_SECRET_TOKEN'
{
  "jobs": [
    {
      "id": 5001,
      "title": "Senior Software Engineer",
      "description": "<p>We are looking for a senior engineer...</p>",
      "department": {
        "id": 1,
        "name": "Engineering"
      },
      "location": {
        "city": "San Francisco",
        "country": "US",
        "state": "CA"
      },
      "employment_type": {
        "id": 1,
        "name": "Full-time"
      },
      "is_remote": false,
      "application_url": "https://acme.100hires.com/jobs/5001/apply",
      "created_at": 1711036800
    }
  ],
  "pagination": {
    "page_size": 25,
    "page_count": 1,
    "page": 1,
    "total_count": 1
  }
}

Get public job

Returns full details for a single public or unlisted job. Returns 404 for draft, archived, or internal jobs.

Path Parameters
  • id
    Type: integer
    required

    Resource ID (numeric).

Responses
  • Job detail

    • application_url
      Type: stringFormat: uri
      required

      Public application form URL.

    • created_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • description
      Type: string
      required

      HTML content

    • id
      Type: integer
      required

      Job ID.

    • is_remote
      Type: boolean
      required

      Whether this is a remote position.

    • location
      Type: object · CareerSiteLocation
      required
      • city
        Type: string nullable

        City.

      • country
        Type: string nullable

        Country.

      • state
        Type: string nullable

        State or region.

    • title
      Type: string
      required

      Job title.

    • department
      Type: object · IdName nullable
      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • education_level
      Type: object · IdName nullable
      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • employment_type
      Type: object · IdName nullable
      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • experience_level
      Type: object · IdName nullable
      • id
        Type: integer
        required

        Unique identifier.

      • name
        Type: string
        required

        Display name.

    • salary_currency
      Type: string nullable
    • salary_max
      Type: number nullable
    • salary_min
      Type: number nullable
    • salary_period
      Type: string nullable
  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for get/career-site/jobs/{id}
curl https://api.100hires.com/v2/career-site/jobs/1 \
  --header 'X-Company-Slug: YOUR_SECRET_TOKEN'
{
  "id": 5001,
  "title": "Senior Software Engineer",
  "description": "<p>We are looking for a senior engineer to join our team.</p>",
  "department": {
    "id": 1,
    "name": "Engineering"
  },
  "location": {
    "city": "San Francisco",
    "country": "US",
    "state": "CA"
  },
  "employment_type": {
    "id": 1,
    "name": "Full-time"
  },
  "is_remote": false,
  "application_url": "https://acme.100hires.com/jobs/5001/apply",
  "created_at": 1711036800,
  "salary_min": 120000,
  "salary_max": 180000,
  "salary_currency": "USD",
  "salary_period": "annually",
  "education_level": {
    "id": 2,
    "name": "Bachelor's"
  },
  "experience_level": {
    "id": 3,
    "name": "Senior"
  }
}

Submit job application

Submits a job application on behalf of a candidate. Creates a candidate record and triggers the career-site pipeline automation (sets stage to Applied, runs source attribution).

Body
required
application/json
  • email
    Type: stringFormat: email
    required

    Applicant email address.

  • first_name
    Type: string
    required

    Applicant first name.

  • job_id
    Type: integer
    required

    Job ID to apply to.

  • last_name
    Type: string
    required

    Applicant last name.

  • answers
    Type: array object[] | null nullable

    Array of form answer objects

    Empty object
  • linkedin_url
    Type: stringFormat: uri nullable

    Applicant LinkedIn profile URL.

  • phone
    Type: string nullable

    Applicant phone number.

  • resume
    Type: object · CareerSiteResumeUpload nullable

    Resume file upload (base64 encoded).

    • data
      Type: string
      required

      Base64-encoded file content

    • file_name
      Type: string
      required

      Resume file name.

    • mime_type
      Type: string
      required

      Resume MIME type.

  • source
    Type: string nullable

    Application source identifier.

Responses
  • Application created

    Type: object
    • created_at
      Type: integerFormat: int64
      required

      Unix timestamp (seconds)

    • id
      Type: integer
      required

      Created application ID.

    • job_id
      Type: integer
      required

      Job ID.

    • status
      Type: string
      required

      Application status.

  • Validation error

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Validation error details object.

      • name
        Type: string
        required

        Always "Validation Error" for validation failures

      • validation_errors
        Type: object
        required

        Field-level validation errors (field name to error message)

        • propertyName
          Type: string
      • code
        Type: integer

        Integer numbers.

      • message
        Type: string
      • status
        Type: integer

        Integer numbers.

  • Unauthorized

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Not found

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

  • Content-Type must be application/json

    X-RateLimit-Limit
    Type: integer

    Request limit for the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Remaining
    Type: integer

    Remaining requests in the current rate-limit window. Returned for unapproved API keys.

    X-RateLimit-Reset
    Type: integerFormat: int64

    Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.

    Type: object
    • error
      Type: object
      required

      Error details object.

      • code
        Type: integer
        required

        Application error code (0 for generic errors)

      • message
        Type: string
        required

        Detailed error message

      • name
        Type: string
        required

        Human-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")

      • status
        Type: integer
        required

        HTTP status code

Request Example for post/career-site/applications
curl https://api.100hires.com/v2/career-site/applications \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'X-Company-Slug: YOUR_SECRET_TOKEN' \
  --data '{
  "job_id": 1,
  "first_name": "",
  "last_name": "",
  "email": "",
  "phone": "",
  "resume": {
    "data": "",
    "file_name": "resume.pdf",
    "mime_type": "application/pdf"
  },
  "linkedin_url": "",
  "source": "",
  "answers": [
    {}
  ]
}'
{
  "id": 90001,
  "job_id": 5001,
  "status": "pending",
  "created_at": 1711036800
}

Models

    FAQ

    What is the 100Hires ATS API?

    100Hires ATS API is a REST API that lets developers programmatically manage candidates, jobs, applications, interviews, and webhooks in the 100Hires applicant tracking system.

    Does the 100Hires ATS API cost extra?

    No. API access is included with paid plans at no extra cost. There are no per-request fees and no separate API tier.

    How do I get an API key?

    Sign in to your 100Hires workspace, go to Settings → Integrations → API Keys, click Generate new key, copy the token, and use it as a Bearer credential.

    Does the 100Hires ATS API support webhooks?

    Yes. You can register webhook URLs per job or per company to receive notifications when new applications are created. Verify incoming requests using HMAC signature verification.

    Is there an OpenAPI specification?

    Yes, the full machine-readable OpenAPI 3.x spec is at https://api.100hires.com/v2/openapi.json. You can import it into Postman, Insomnia, or generate SDKs with openapi-generator.

    What are the rate limits?

    100 requests per 10 minutes per API key (unapproved keys). Limits are returned in X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset response headers. Contact support to remove limits for your integration.

    We use cookies to offer you our service. By continuing to use this site, you consent to our use of cookies as described in our policy