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 per-team and can be revoked at any time.
Pricing
API access is included in all 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.
Quick links: OpenAPI 3.x specification · MCP server for AI assistants · Webhooks setup · Common workflows
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).
Validation errors return success: false with field-level errors.
Exception-based errors return name, message, code, and optional status.
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
Verify webhook signatures and only accept trusted requests on your receiver endpoint.
Receiving webhooks
Always respond quickly with 2xx, then process asynchronously to avoid retries/timeouts.
Event payloads
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.
GET /candidates?q=John— find candidate by name or emailGET /candidates/{id}— full profile with application historyGET /candidates/{id}/activities— timeline (notes, calls, AI scoring)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.
GET /applications?job_id=123&stage_id=456— candidates at a specific stagePOST /applications/{id}/movewith{"stage_id": 789}— advance candidatePOST /applications/{id}/reject— reject with optional reasonPOST /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.
POST /jobs— create job draftPOST /jobs/{id}/statuswith{"status": "Public"}— publishGET /jobs/{id}/job-boards— available boardsPOST /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.
GET /interviews?interviewer_user_id=5— check interviewer availabilityPOST /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.
GET /applications/{id}/evaluation-forms— list filled evaluationsGET /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.
GET /candidates/{id}/messages— check conversation history- (Optional)
GET /users/{user_id}/mail-accounts— findmail_account_idto send from a specific user's mailbox POST /candidates/{id}/messages— schedule email (usefrom_account_idto send from a specific mailbox; 15-min cancel window by default)POST /messages/batch/create— schedule up to 100 emails in one request (each with its owncandidate_id)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.
GET /companies/mail-accountsorGET /users/{user_id}/mail-accounts— findmail_account_idGET /messages?from_account_id={id}— list all messages sent/scheduled from that account- Filter by
status=scheduledto see pending queue,status=sentfor delivery history - 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.
GET /users— find theuser_idof the team memberGET /users/{user_id}/mail-accounts— get theirmail_account_idPOST /candidates/{id}/messageswithfrom_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.
POST /candidates/{id}/tagswith["senior", "remote"]— add tagsPOST /candidates/batch/tags— bulk add tagsDELETE /candidates/batch/tags— bulk remove tags
IDs, aliases, and building UI links
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/42andGET /candidates/dtGeby2both return the same candidate.GET /jobs/1andGET /jobs/79SZHfTboth 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 /candidatesandGET /candidates/{id}returnaliasfield for each candidate.GET /jobsandGET /jobs/{id}returnaliasfield for each job.GET /applicationsandGET /applications/{id}returnjob_aliasfield alongsidejob_id.
Building UI links from API data
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 |
Production API endpoint
Candidates
Candidate profile lifecycle: search, deduplication, files, tags, and activity timeline.
- get/candidates
- post/candidates
- get/candidates/{id}
- put/candidates/{id}
- delete/candidates/{id}
- get/candidates/{id}/tags
- post/candidates/{id}/tags
- delete/candidates/{id}/tags/{tag}
- get/candidates/{id}/files
- post/candidates/{id}/files
- get/candidates/{id}/resume
- get/candidates/{id}/activities
- post/candidates/{id}/disqualify
- post/candidates/batch/tags
- delete/candidates/batch/tags
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.
- Type: integer
company _id 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: integer
job _id Filter candidates by job ID.
- Type: integer
stage _id Filter candidates by pipeline stage ID. Best used together with job_id.
- Type: string
email Exact candidate email filter.
- Type: string
q Plain-text candidate search by name or email. Supports partial matches. If combined with other filters, all filters must match.
- Type: string
full _name Candidate full-name filter. If combined with email or q, all supplied filters must match.
- Type: string
linkedin 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: integermin: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: integermin:0
Integer numbers.
- enum
include const:applicationsInclude related application summaries in the candidate response.
applications
- Type: integer
page min:1Page number (1-based). Defaults to 1.
- Type: integer
size min:1max:100Number of items per page (1–100). Defaults to 20.
- Type: stringenum
view Response shape selector for list endpoints.
full(default) returns every field — backward-compatible with pre-existing clients.summaryreturns 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*_previewtruncations. Usesummarywhen paging through large result sets and fetch a single record with the correspondingGET /{resource}/{id}endpoint when full data is needed.full summary
Candidate list
Type: object- Type: array object[] · Candidate[]
candidates requiredArray of candidates.
- Type: integer
company _id requiredID of the company this candidate belongs to
- Type: integerFormat: int64
created _at requiredUnix timestamp (seconds)
- Type: integer
id requiredUnique identifier
- Type: integerFormat: int64
updated _at requiredUnix timestamp (seconds)
- Type: string | null
alias 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. - Type: array object[] · CandidateApplicationSummary[]
applications Summary of all applications this candidate has across jobs
- Type: integer
id requiredApplication ID.
- Type: object
job requiredJob summary (id, title, status).
- Type: integer
id requiredInteger numbers.
- Type: string
title required
- Type: object · IdName nullable
stage - Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: integer | null
days _since _last _message Number of whole days since the last message. Computed at request time. Null if no messages exist.
- Type: array string[] | null nullable
emails List of candidate email addresses
- Type: string | null
first _name Candidate's first name
- Type: string | null
ip IP address from which the candidate applied
- Type: integer | nullFormat: int64
last _message _at Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.
- Type: string | null
last _name Candidate's last name
- Type: object · IdName nullable
origin Where the candidate originally came from (e.g. job board name)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: array string[] | null nullable
phones List of candidate phone numbers
- Type: array object[] · ProfileAnswer[]
profile Candidate profile field answers (application form responses). Present only when
view=full(default); omitted entirely whenview=summaryto keep list responses inside the agent context budget — a single candidate can carry dozens of free-form answers.- Type: integer
question _id requiredQuestion ID.
- Type: string
question _text requiredQuestion label.
value requiredAnswer value (string, array, or null).
- Type: object · IdName nullable
source How the candidate was sourced (e.g. LinkedIn, Referral)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: stringFormat: uri
url _backoffice Absolute backoffice URL of the candidate in the 100Hires recruiter app. Use to render deep-links in agent UIs.
- Type: object · Pagination
pagination required- Type: integer
page requiredCurrent page number.
- Type: integer
page _count requiredTotal number of pages.
- Type: integer
page _size requiredItems per page.
- Type: integer
total _count requiredTotal number of items.
Validation error
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredValidation error details object.
- Type: string
name requiredAlways "Validation Error" for validation failures
- Type: object
validation _errors requiredField-level validation errors (field name to error message)
- Type: string
property Name
- Type: integer
code Integer numbers.
- Type: string
message - Type: integer
status Integer numbers.
Unauthorized
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Forbidden
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Content-Type must be application/json
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Too many requests
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
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
}
}Candidate list
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.
- Type: string
city Candidate city. Used together with state/country to resolve timezone and location display in the profile header.
- Type: integer
company _id Target company ID. Required only when the API key has access to multiple companies.
- Type: string
country Candidate country name or ISO 3166-1 alpha-2 code (e.g. 'United States' or 'US').
- Type: object · FileData
cv - Type: string
data requiredBase64 content
- Type: string
file _name requiredOriginal file name.
- Type: string
mime _type requiredMIME type (e.g. application/pdf).
- Type: integer
size Optional for uploads, returned in responses
- Type: stringFormat: email
email Candidate email address. Used for deduplication.
- Type: string
first _name Candidate first name.
- Type: integer
job _id Job ID to create an application for this candidate. If omitted, candidate is created without an application.
- Type: string
last _name Candidate last name.
- Type: string
phone Candidate phone number.
- Type: object
profile 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"}.
- Type: string
property Name
- Type: integer
stage _id Pipeline stage ID for the initial application. Requires job_id. If omitted with job_id, defaults to the first stage.
- Type: string
state Candidate state or region.
- Type: string
timezone IANA timezone (e.g. 'America/Los_Angeles'). If omitted, resolved automatically from city/country. If provided alongside city, overrides the auto-resolved timezone.
Created candidate
Type: object- Type: integer
company _id requiredID of the company this candidate belongs to
- Type: integerFormat: int64
created _at requiredUnix timestamp (seconds)
- Type: integer
id requiredUnique identifier
- Type: integerFormat: int64
updated _at requiredUnix timestamp (seconds)
- Type: string | null
alias 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. - Type: array object[] · CandidateApplicationSummary[]
applications Summary of all applications this candidate has across jobs
- Type: integer
id requiredApplication ID.
- Type: object
job requiredJob summary (id, title, status).
- Type: integer
id requiredInteger numbers.
- Type: string
title required
- Type: object · IdName nullable
stage - Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: integer | null
days _since _last _message Number of whole days since the last message. Computed at request time. Null if no messages exist.
- Type: array string[] | null nullable
emails List of candidate email addresses
- Type: string | null
first _name Candidate's first name
- Type: string | null
ip IP address from which the candidate applied
- Type: integer | nullFormat: int64
last _message _at Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.
- Type: string | null
last _name Candidate's last name
- Type: object · IdName nullable
origin Where the candidate originally came from (e.g. job board name)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: array string[] | null nullable
phones List of candidate phone numbers
- Type: array object[] · ProfileAnswer[]
profile Candidate profile field answers (application form responses). Present only when
view=full(default); omitted entirely whenview=summaryto keep list responses inside the agent context budget — a single candidate can carry dozens of free-form answers.- Type: integer
question _id requiredQuestion ID.
- Type: string
question _text requiredQuestion label.
value requiredAnswer value (string, array, or null).
- Type: object · IdName nullable
source How the candidate was sourced (e.g. LinkedIn, Referral)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: stringFormat: uri
url _backoffice Absolute backoffice URL of the candidate in the 100Hires recruiter app. Use to render deep-links in agent UIs.
Validation error
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredValidation error details object.
- Type: string
name requiredAlways "Validation Error" for validation failures
- Type: object
validation _errors requiredField-level validation errors (field name to error message)
- Type: string
property Name
- Type: integer
code Integer numbers.
- Type: string
message - Type: integer
status Integer numbers.
Unauthorized
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Forbidden
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Content-Type must be application/json
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Too many requests
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
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": 1,
"alias": "dtGeby2",
"url_backoffice": "https://app.100hires.com/candidate/dtGeby2",
"company_id": 1,
"first_name": null,
"last_name": null,
"emails": [
"hello@example.com"
],
"phones": [
"string"
],
"source": {
"id": 1,
"name": "string"
},
"origin": {
"id": 1,
"name": "string"
},
"profile": [
{
"question_id": 1,
"question_text": "string",
"value": null
}
],
"ip": null,
"applications": [
{
"id": 1,
"job": {
"id": 1,
"title": "string"
},
"stage": {
"id": 1,
"name": "string"
}
}
],
"created_at": 1,
"updated_at": 1,
"last_message_at": null,
"days_since_last_message": null
}Created candidate
Get candidate
Returns full candidate data including application summaries.
- Type: string
id Pattern: ^[A-Za-z0-9_-]+$requiredCandidate ID (numeric) or alias
Candidate
Type: object- Type: integer
company _id requiredID of the company this candidate belongs to
- Type: integerFormat: int64
created _at requiredUnix timestamp (seconds)
- Type: integer
id requiredUnique identifier
- Type: integerFormat: int64
updated _at requiredUnix timestamp (seconds)
- Type: string | null
alias 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. - Type: array object[] · CandidateApplicationSummary[]
applications Summary of all applications this candidate has across jobs
- Type: integer
id requiredApplication ID.
- Type: object
job requiredJob summary (id, title, status).
- Type: integer
id requiredInteger numbers.
- Type: string
title required
- Type: object · IdName nullable
stage - Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: integer | null
days _since _last _message Number of whole days since the last message. Computed at request time. Null if no messages exist.
- Type: array string[] | null nullable
emails List of candidate email addresses
- Type: string | null
first _name Candidate's first name
- Type: string | null
ip IP address from which the candidate applied
- Type: integer | nullFormat: int64
last _message _at Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.
- Type: string | null
last _name Candidate's last name
- Type: object · IdName nullable
origin Where the candidate originally came from (e.g. job board name)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: array string[] | null nullable
phones List of candidate phone numbers
- Type: array object[] · ProfileAnswer[]
profile Candidate profile field answers (application form responses). Present only when
view=full(default); omitted entirely whenview=summaryto keep list responses inside the agent context budget — a single candidate can carry dozens of free-form answers.- Type: integer
question _id requiredQuestion ID.
- Type: string
question _text requiredQuestion label.
value requiredAnswer value (string, array, or null).
- Type: object · IdName nullable
source How the candidate was sourced (e.g. LinkedIn, Referral)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: stringFormat: uri
url _backoffice Absolute backoffice URL of the candidate in the 100Hires recruiter app. Use to render deep-links in agent UIs.
Unauthorized
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Forbidden
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Not found
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Too many requests
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
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
}Candidate
Update candidate
Updates candidate fields, profile answers, and optional CV payload. Designed for bi-directional sync from ATS, CRM, sourcing, or enrichment tools.
- Type: string
id Pattern: ^[A-Za-z0-9_-]+$requiredCandidate ID (numeric) or alias
- Type: string
city Candidate city. Used together with state/country to resolve timezone and location display in the profile header.
- Type: integer
company _id Target company ID. Required only when the API key has access to multiple companies.
- Type: string
country Candidate country name or ISO 3166-1 alpha-2 code (e.g. 'United States' or 'US').
- Type: object · FileData
cv - Type: string
data requiredBase64 content
- Type: string
file _name requiredOriginal file name.
- Type: string
mime _type requiredMIME type (e.g. application/pdf).
- Type: integer
size Optional for uploads, returned in responses
- Type: stringFormat: email
email Candidate email address. Used for deduplication.
- Type: string
first _name Candidate first name.
- Type: integer
job _id Job ID to create an application for this candidate. If omitted, candidate is created without an application.
- Type: string
last _name Candidate last name.
- Type: string
phone Candidate phone number.
- Type: object
profile 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"}.
- Type: string
property Name
- Type: integer
stage _id Pipeline stage ID for the initial application. Requires job_id. If omitted with job_id, defaults to the first stage.
- Type: string
state Candidate state or region.
- Type: string
timezone IANA timezone (e.g. 'America/Los_Angeles'). If omitted, resolved automatically from city/country. If provided alongside city, overrides the auto-resolved timezone.
Updated candidate
Type: object- Type: integer
company _id requiredID of the company this candidate belongs to
- Type: integerFormat: int64
created _at requiredUnix timestamp (seconds)
- Type: integer
id requiredUnique identifier
- Type: integerFormat: int64
updated _at requiredUnix timestamp (seconds)
- Type: string | null
alias 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. - Type: array object[] · CandidateApplicationSummary[]
applications Summary of all applications this candidate has across jobs
- Type: integer
id requiredApplication ID.
- Type: object
job requiredJob summary (id, title, status).
- Type: integer
id requiredInteger numbers.
- Type: string
title required
- Type: object · IdName nullable
stage - Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: integer | null
days _since _last _message Number of whole days since the last message. Computed at request time. Null if no messages exist.
- Type: array string[] | null nullable
emails List of candidate email addresses
- Type: string | null
first _name Candidate's first name
- Type: string | null
ip IP address from which the candidate applied
- Type: integer | nullFormat: int64
last _message _at Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.
- Type: string | null
last _name Candidate's last name
- Type: object · IdName nullable
origin Where the candidate originally came from (e.g. job board name)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: array string[] | null nullable
phones List of candidate phone numbers
- Type: array object[] · ProfileAnswer[]
profile Candidate profile field answers (application form responses). Present only when
view=full(default); omitted entirely whenview=summaryto keep list responses inside the agent context budget — a single candidate can carry dozens of free-form answers.- Type: integer
question _id requiredQuestion ID.
- Type: string
question _text requiredQuestion label.
value requiredAnswer value (string, array, or null).
- Type: object · IdName nullable
source How the candidate was sourced (e.g. LinkedIn, Referral)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: stringFormat: uri
url _backoffice Absolute backoffice URL of the candidate in the 100Hires recruiter app. Use to render deep-links in agent UIs.
Validation error
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredValidation error details object.
- Type: string
name requiredAlways "Validation Error" for validation failures
- Type: object
validation _errors requiredField-level validation errors (field name to error message)
- Type: string
property Name
- Type: integer
code Integer numbers.
- Type: string
message - Type: integer
status Integer numbers.
Unauthorized
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Forbidden
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Not found
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Content-Type must be application/json
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Too many requests
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
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
}Updated candidate
Delete candidate
Deletes a candidate. Use this to keep external systems aligned with candidate lifecycle policies.
- Type: string
id Pattern: ^[A-Za-z0-9_-]+$requiredCandidate ID (numeric) or alias
Deleted
Type: object- Type: boolean
success requiredAlways true on success.
Unauthorized
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Forbidden
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Not found
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Too many requests
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
curl 'https://api.100hires.com/v2/candidates/{id}' \
--request DELETE \
--header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
"success": true
}Deleted
List candidate tags
Returns all tags assigned to a candidate. Useful for segmentation sync and audience-based automations.
- Type: string
id Pattern: ^[A-Za-z0-9_-]+$requiredCandidate ID (numeric) or alias
Candidate tags
Type: object- Type: object · Pagination
pagination required- Type: integer
page requiredCurrent page number.
- Type: integer
page _count requiredTotal number of pages.
- Type: integer
page _size requiredItems per page.
- Type: integer
total _count requiredTotal number of items.
- Type: array string[]
tags requiredArray of tags.
Unauthorized
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Forbidden
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Not found
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Too many requests
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
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
}
}Candidate tags
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.
- Type: string
id Pattern: ^[A-Za-z0-9_-]+$requiredCandidate ID (numeric) or alias
- Type: array string[]
tags requiredArray of tag strings to add.
Updated candidate tags
Type: object- Type: object · Pagination
pagination required- Type: integer
page requiredCurrent page number.
- Type: integer
page _count requiredTotal number of pages.
- Type: integer
page _size requiredItems per page.
- Type: integer
total _count requiredTotal number of items.
- Type: array string[]
tags requiredArray of tags.
Bad request
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Unauthorized
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Forbidden
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Not found
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Content-Type must be application/json
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Too many requests
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
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
}
}Updated candidate tags
Delete candidate tag
Removes a specific tag from a candidate. Use when external logic recalculates segmentation or lifecycle labels.
- Type: string
id Pattern: ^[A-Za-z0-9_-]+$requiredCandidate ID (numeric) or alias
- Type: string
tag requiredTag text (case-sensitive, URL-encoded).
Deleted
Type: object- Type: boolean
success requiredAlways true on success.
Unauthorized
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Forbidden
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Not found
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Too many requests
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
curl 'https://api.100hires.com/v2/candidates/{id}/tags/{tag}' \
--request DELETE \
--header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
"success": true
}Deleted
List candidate files
Lists candidate attachments and metadata (resume/other files). Use for document sync, compliance exports, and recruiter tooling.
- Type: string
id Pattern: ^[A-Za-z0-9_-]+$requiredCandidate ID (numeric) or alias
- Type: stringenum
view Response shape selector for list endpoints.
full(default) returns every field — backward-compatible with pre-existing clients.summaryreturns 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*_previewtruncations. Usesummarywhen paging through large result sets and fetch a single record with the correspondingGET /{resource}/{id}endpoint when full data is needed.full summary
Candidate files
Type: object- Type: array · CandidateFile[]
files requiredArray 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).
urlis an absolute URL served by the API host (https://api.100hires.com/v2/attachments/{category}/{uuid}/{file_name}) and serves the raw file bytes withAuthorization: Bearer <API_KEY>. The response onurlsetsContent-Disposition: attachment; filename="..."with the human-readable filename.Use
uuidto reference the attachment in other endpoints (e.g. nurture voicemail step).- Type: object · AttachmentFile
file required- Type: string
file _ext requiredFile extension.
- Type: string
file _type requiredFile type category.
- Type: boolean nullable
is _image requiredWhether the file is an image.
- Type: string
orig _file _name requiredOriginal file name.
- Type: string
readable _size requiredHuman-readable file size.
- Type: string
relative _time requiredHuman-readable time since upload (e.g.
"2 days ago"). - Type: stringFormat: uri nullable
url requiredAbsolute download URL (e.g.
https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit withAuthorization: Bearer <API_KEY>. - Type: stringFormat: uuid
uuid requiredUnique attachment identifier. Stable across API calls; use in referencing endpoints.
Unauthorized
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Forbidden
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Not found
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Too many requests
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
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"
}
}
]
}Candidate files
Upload candidate file
Uploads a new file for a candidate using base64 payload. Useful for resume ingestion, portfolio uploads, and post-processing pipelines.
- Type: string
id Pattern: ^[A-Za-z0-9_-]+$requiredCandidate ID (numeric) or alias
- Type: object · FileData
file required- Type: string
data requiredBase64 content
- Type: string
file _name requiredOriginal file name.
- Type: string
mime _type requiredMIME type (e.g. application/pdf).
- Type: integer
size Optional for uploads, returned in responses
Uploaded file
Type: object · ApiAttachmentUnified attachment shape returned by apiV2 endpoints (resumes, candidate files, application attachments, message attachments, call recordings, voicemail audio in nurture campaigns).
urlis an absolute URL served by the API host (https://api.100hires.com/v2/attachments/{category}/{uuid}/{file_name}) and serves the raw file bytes withAuthorization: Bearer <API_KEY>. The response onurlsetsContent-Disposition: attachment; filename="..."with the human-readable filename.Use
uuidto reference the attachment in other endpoints (e.g. nurture voicemail step).- Type: object · AttachmentFile
file required- Type: string
file _ext requiredFile extension.
- Type: string
file _type requiredFile type category.
- Type: boolean nullable
is _image requiredWhether the file is an image.
- Type: string
orig _file _name requiredOriginal file name.
- Type: string
readable _size requiredHuman-readable file size.
- Type: string
relative _time requiredHuman-readable time since upload (e.g.
"2 days ago"). - Type: stringFormat: uri nullable
url requiredAbsolute download URL (e.g.
https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit withAuthorization: Bearer <API_KEY>. - Type: stringFormat: uuid
uuid requiredUnique attachment identifier. Stable across API calls; use in referencing endpoints.
Validation error
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredValidation error details object.
- Type: string
name requiredAlways "Validation Error" for validation failures
- Type: object
validation _errors requiredField-level validation errors (field name to error message)
- Type: string
property Name
- Type: integer
code Integer numbers.
- Type: string
message - Type: integer
status Integer numbers.
Unauthorized
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Forbidden
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Not found
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Content-Type must be application/json
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Too many requests
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
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"
}
}Uploaded file
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.
- Type: string
id Pattern: ^[A-Za-z0-9_-]+$requiredCandidate ID (numeric) or alias
- Type: string
include Comma-separated list of optional fields to include. Supported:
text_content— parsed plain-text content of the resume file.
Resume file
Resume file with optional parsed text content (when
?include=text_contentis used, the response includes atextfield with the parsed plain-text content).- Type: object · AttachmentFile
file required- Type: string
file _ext requiredFile extension.
- Type: string
file _type requiredFile type category.
- Type: boolean nullable
is _image requiredWhether the file is an image.
- Type: string
orig _file _name requiredOriginal file name.
- Type: string
readable _size requiredHuman-readable file size.
- Type: string
relative _time requiredHuman-readable time since upload (e.g.
"2 days ago"). - Type: stringFormat: uri nullable
url requiredAbsolute download URL (e.g.
https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit withAuthorization: Bearer <API_KEY>. - Type: stringFormat: uuid
uuid requiredUnique attachment identifier. Stable across API calls; use in referencing endpoints.
- Type: string nullable
text Parsed plain-text content of the resume. Only included when
?include=text_contentis specified ANDview=full(the default). Suppressed whenview=summaryeven if the include was requested. May be null if the file format is unsupported or parsing fails.
Unauthorized
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Forbidden
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Not found
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Too many requests
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
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"
}Resume file
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.
- Type: string
id Pattern: ^[A-Za-z0-9_-]+$requiredCandidate ID (numeric) or alias
- Type: integer
page min:1Page number (1-based).
- Type: integer
size min:1max:100Page size. Values above 100 are rejected with 400. Default 20, max 100.
- Type: string
event _type 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: integermin: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: integermin:0
Integer numbers.
- Type: stringenum
view Response shape selector for list endpoints.
full(default) returns every field — backward-compatible with pre-existing clients.summaryreturns 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*_previewtruncations. Usesummarywhen paging through large result sets and fetch a single record with the correspondingGET /{resource}/{id}endpoint when full data is needed.full summary
Candidate activities
Type: object- Type: array object[] · Activity[]
activities requiredArray of activity events.
- Type: integer | null
application _id requiredID of the job application this event is linked to, if any
- Type: integer
candidate _id requiredID of the candidate this event belongs to
- Type: integerFormat: int64
created _at requiredUnix timestamp (seconds)
event requiredShared 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.
- Type: object
data requiredEvent data payload.
- Type: string
date requiredShort formatted date (e.g. "Jan 1")
- Type: string
full _time requiredFull formatted datetime string
- Type: string
relative _time requiredHuman-readable relative time (e.g. "2 days ago")
- Type: string
text requiredHTML-formatted description of the event
- Type: integer nullable
from _stage _id Pipeline stage ID the candidate was in before qualification/disqualification. Only present for
qualificationevents. - Type: string nullable
from _stage _name Pipeline stage name the candidate was in before qualification/disqualification. Only present for
qualificationevents.
- enum
is _text _bubble const:truerequiredAlways true for text bubble events.
true
- Type: stringenum
type requiredEvent type identifier.
assign _job candidate _rate assign _sources assign _tags qualification
- Type: integer
event _id requiredUnique ID of the timeline event
- Type: integer | null
user _id requiredID of the user who triggered this event, if applicable
- Type: integer
page _size requiredItems per page. Duplicated at top level for backward compatibility (also available in
pagination.page_size). - Type: object · Pagination
pagination required- Type: integer
page requiredCurrent page number.
- Type: integer
page _count requiredTotal number of pages.
- Type: integer
page _size requiredItems per page.
- Type: integer
total _count requiredTotal number of items.
Validation error
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredValidation error details object.
- Type: string
name requiredAlways "Validation Error" for validation failures
- Type: object
validation _errors requiredField-level validation errors (field name to error message)
- Type: string
property Name
- Type: integer
code Integer numbers.
- Type: string
message - Type: integer
status Integer numbers.
Unauthorized
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Forbidden
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Not found
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Content-Type must be application/json
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Too many requests
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
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
}
}Candidate activities
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.
- Type: string
id Pattern: ^[A-Za-z0-9_-]+$requiredCandidate ID (numeric) or alias
- Type: array
reasons Array of rejection reason IDs from GET /taxonomy/rejection-reasons.
- Type: integer
Integer numbers.
Disqualified
Type: object- Type: array integer[]
rejected _applications requiredArray of rejected application IDs.
- Type: boolean
success requiredWhether disqualification succeeded.
Bad request
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Unauthorized
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Forbidden
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Not found
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Content-Type must be application/json
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Too many requests
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
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
]
}Disqualified
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.
- Type: array integer[] …100
ids requiredCandidate IDs to tag (max 100)
- Type: array string[]
tags requiredTag names to attach
Batch results with per-item success/failure
Type: object- Type: array object[] · BatchResultItem[]
results requiredArray of per-item results.
id required- Type: integer
Entity ID or alias from the request
- Type: object
data Entity payload on success. Present only when the item succeeded.
- Type: object
error Structured error object on failure. Present only when the item failed. Same format as top-level API errors.
- Type: integer
code Integer numbers.
- Type: string
message - Type: string
name - Type: integer
status Integer numbers.
- Type: object
validation _errors - Type: string
property Name
Validation error
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredValidation error details object.
- Type: string
name requiredAlways "Validation Error" for validation failures
- Type: object
validation _errors requiredField-level validation errors (field name to error message)
- Type: string
property Name
- Type: integer
code Integer numbers.
- Type: string
message - Type: integer
status Integer numbers.
Unauthorized
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Forbidden
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Too many requests
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
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": 1,
"data": {},
"error": {
"name": "Not Found",
"message": "Candidate not found",
"code": 0,
"status": 404,
"validation_errors": {
"additionalProperty": "string"
}
}
}
]
}Batch results with per-item success/failure
Batch remove tags from candidates
Removes specified tags from multiple candidates in one request. Returns per-item results with partial success support.
- Type: array integer[] …100
ids requiredCandidate IDs to tag (max 100)
- Type: array string[]
tags requiredTag names to attach
Batch results with per-item success/failure
Type: object- Type: array object[] · BatchResultItem[]
results requiredArray of per-item results.
id required- Type: integer
Entity ID or alias from the request
- Type: object
data Entity payload on success. Present only when the item succeeded.
- Type: object
error Structured error object on failure. Present only when the item failed. Same format as top-level API errors.
- Type: integer
code Integer numbers.
- Type: string
message - Type: string
name - Type: integer
status Integer numbers.
- Type: object
validation _errors - Type: string
property Name
Validation error
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredValidation error details object.
- Type: string
name requiredAlways "Validation Error" for validation failures
- Type: object
validation _errors requiredField-level validation errors (field name to error message)
- Type: string
property Name
- Type: integer
code Integer numbers.
- Type: string
message - Type: integer
status Integer numbers.
Unauthorized
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Forbidden
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Too many requests
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
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": 1,
"data": {},
"error": {
"name": "Not Found",
"message": "Candidate not found",
"code": 0,
"status": 404,
"validation_errors": {
"additionalProperty": "string"
}
}
}
]
}Batch results with per-item success/failure
Applications
Application lifecycle: creation, stage movement, rejection/hire actions, and attachments.
- get/applications
- post/applications
- get/applications/{id}
- put/applications/{id}
- delete/applications/{id}
- get/applications/{id}/ai-score
- get/applications/{id}/stage-history
- post/applications/{id}/move
- post/applications/{id}/hire
- post/applications/{id}/reject
- post/applications/{id}/advance
- post/applications/{id}/transfer
- post/applications/{id}/unreject
- get/applications/{id}/attachments
- post/applications/{id}/attachments
- post/applications/batch/move
- post/applications/batch/reject
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.
- Type: integer
company _id 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: integer
candidate _id Filter applications by candidate ID.
- Type: integer
job _id Filter applications by job ID.
- Type: integer
stage _id Filter applications by pipeline stage ID. Best used together with job_id.
- Type: stringenum
status Filter by application status:
pending(active),hired, orrejected.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: integermin: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: integermin:0
Integer numbers.
- Type: integer
ai _score _min Return only applications with
ai_scoregreater than or equal to this value. - Type: integer
ai _score _max Return only applications with
ai_scoreless than or equal to this value. - Type: stringenum
sort Sort order. Prefix with
-for descending. Default:-created_at.created _at -created _at ai _score -ai _score last _message _at -last _message _at
- Type: string
include Comma-separated list of related resources to include. Supported:
candidate— full candidate profile,cv.text— parsed plain-text CV content,job— full job payload withurl_backofficefor UI deep-linking. - Type: integer
page min:1Page number (1-based). Defaults to 1.
- Type: integer
size min:1max:100Number of items per page (1–100). Defaults to 20.
- Type: stringenum
view Response shape selector for list endpoints.
full(default) returns every field — backward-compatible with pre-existing clients.summaryreturns 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*_previewtruncations. Usesummarywhen paging through large result sets and fetch a single record with the correspondingGET /{resource}/{id}endpoint when full data is needed.full summary
Application list
Type: object- Type: array object[] · Application[]
applications requiredArray of applications.
- Type: integer
candidate _id requiredID of the candidate
- Type: integer
company _id requiredID of the company
- Type: integerFormat: int64
created _at requiredUnix timestamp (seconds)
- Type: integer
id requiredUnique identifier
- Type: boolean
is _disqualified requiredWhether the candidate is disqualified for this application
- Type: integer
job _id requiredID of the job
- Type: stringenum
status requiredApplication status. Changes via hire/reject/unreject actions.
active hired rejected
- Type: integerFormat: int64
updated _at requiredUnix timestamp (seconds)
- Type: string | null
ai _recommendation AI-generated recommendation label (e.g. Strong, Good, Weak)
- Type: integer | null
ai _score AI-generated candidate fit score (0-100)
- Type: integer | nullFormat: int64
ai _scoring _updated _at Unix timestamp (seconds) of the latest completed AI scoring result
- Type: object · ApplicationCandidate nullable
candidate Embedded candidate data (included when requested via
include=candidate)- Type: integer
company _id requiredID of the company this candidate belongs to
- Type: integerFormat: int64
created _at requiredUnix timestamp (seconds)
- Type: integer
id requiredUnique identifier
- Type: array object[] · ProfileAnswer[]
profile requiredCandidate profile field answers
- Type: integer
question _id requiredQuestion ID.
- Type: string
question _text requiredQuestion label.
value requiredAnswer value (string, array, or null).
- Type: integerFormat: int64
updated _at requiredUnix timestamp (seconds)
- Type: integer | null
days _since _last _message Number of whole days since the last message. Computed at request time. Null if no messages exist.
- Type: array string[] | null nullable
emails List of candidate email addresses
- Type: string | null
first _name Candidate's first name
- Type: string | null
ip IP address from which the candidate applied
- Type: integer | nullFormat: int64
last _message _at Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.
- Type: string | null
last _name Candidate's last name
- Type: object · IdName nullable
origin Where the candidate originally came from
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: array string[] | null nullable
phones List of candidate phone numbers
- Type: object · IdName nullable
source How the candidate was sourced
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object nullable
custom _fields Custom field values as key-value pairs
- Type: anything
property Name
- nullable
cv Application CV. Returns standard attachment metadata + download URL. When
?include=cv.textis requested, atextfield with parsed plain-text content is added.- Type: object · AttachmentFile
file required- Type: string
file _ext requiredFile extension.
- Type: string
file _type requiredFile type category.
- Type: boolean nullable
is _image requiredWhether the file is an image.
- Type: string
orig _file _name requiredOriginal file name.
- Type: string
readable _size requiredHuman-readable file size.
- Type: string
relative _time requiredHuman-readable time since upload (e.g.
"2 days ago"). - Type: stringFormat: uri nullable
url requiredAbsolute download URL (e.g.
https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit withAuthorization: Bearer <API_KEY>. - Type: stringFormat: uuid
uuid requiredUnique attachment identifier. Stable across API calls; use in referencing endpoints.
- Type: string nullable
text Parsed plain-text CV content. Included only when
?include=cv.textis requested ANDview=full(the default). Suppressed whenview=summaryeven 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.
- Type: integer | null
days _since _last _message Number of whole days since the last message. Computed at request time. Null if no messages exist.
- Type: integer | nullFormat: int64
hired _at Unix timestamp (seconds)
- Type: array object[] | null · JobHiringTeamMember[] nullable
hiring _team Team members assigned to this application's job
- Type: string
full _name requiredUser full name.
- Type: integer
id requiredUser ID.
- Type: string | null
email User email.
- Type: string | null
role Role on hiring team (e.g. hiring_manager, recruiter).
- Type: string | null
internal _job _id Company's internal job identifier
- Type: object · Job nullable
job Embedded job payload (included when requested via
include=job). Usejob.url_backofficeto deep-link UI widgets to the job's pipeline view in the recruiter app.- Type: integer
company _id requiredID of the company this job belongs to
- Type: integerFormat: int64
created _at requiredUnix timestamp (seconds)
- Type: integer
id requiredUnique identifier
- Type: boolean
is _remote requiredWhether this is a remote position
- Type: string
status requiredJob status: open, closed, draft, or archived
- Type: string
title requiredPublic job title shown to candidates
- Type: integerFormat: int64
updated _at requiredUnix timestamp (seconds)
- Type: string
url requiredPublic URL of the job posting page
- Type: array object[] · AiScoringCriterion[]
ai _scoring _criteria AI scoring criteria configured for this job, ordered by
positionASC. Returned as an empty array when none are configured. Present only whenview=full(default); omitted entirely whenview=summary.- Type: integer
id requiredUnique identifier of the criterion.
- Type: integer
position required0-based ordinal of the criterion in the job's list.
- Type: string
text requiredPrompt text describing what to evaluate.
- Type: integer
weight min:1max:10requiredRelative importance of this criterion in the total score (1–10).
- Type: string | null
title Optional short label for the criterion.
- Type: string | null
alias 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. - Type: object · IdName nullable
category Job category (e.g. Engineering, Marketing)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
department Department this job belongs to
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: string
description Job description (HTML). Present only when
view=full(default); omitted entirely whenview=summaryto keep list responses inside the agent context budget. UseGET /jobs/{id}orview=fullto retrieve. - Type: object · IdName nullable
education _level Required education level
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
employment _type Employment type (e.g. Full-time, Part-time, Contract)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
experience _level Required experience level (e.g. Entry, Mid, Senior)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: array object[] · JobHiringTeamMember[]
hiring _team Team members assigned to this job. Embedded via
include=hiring_team. Suppressed whenview=summaryeven if the include was requested.- Type: string
full _name requiredUser full name.
- Type: integer
id requiredUser ID.
- Type: string | null
email User email.
- Type: string | null
role Role on hiring team (e.g. hiring_manager, recruiter).
- Type: integer | null
hours _per _week _max Maximum hours per week
- Type: integer | null
hours _per _week _min Minimum hours per week
- Type: object
indeed _posting _data Indeed job board posting metadata. Present only when
view=full(default); omitted entirely whenview=summary.- Type: anything
property Name
- Type: string | null
internal _job _id Company's internal job identifier (e.g. requisition number)
- Type: string | null
internal _title Internal job title visible only to the hiring team
- Type: boolean
is _satellite Whether this job is a satellite (child) of a canonical job. Satellite jobs share the candidate pipeline of their parent.
- Type: object · JobLocation nullable
location Job location details
- Type: string
city City.
- Type: string
country Country.
- Type: string
full _address Full formatted address.
- Type: string
postal _code Postal code.
- Type: string
state State or region.
- Type: string
street _address Street address.
- Type: anything
property Name
- Type: integer | null
parent _job _id ID of the canonical (parent) job. Null for canonical jobs. Recruiting operations should target the canonical job.
- Type: array object[] | null nullable
pipeline _stages Pipeline stages for this job's workflow. Only included when
include=pipeline_stagesis specified. Suppressed whenview=summaryeven if the include was requested.- Type: integer
id Integer numbers.
- Type: string
name
- Type: string | nullenum
resume _field _status Whether resume upload is required, optional, or hidden on the application form
required optional hidden
- Type: string | null
salary _currency Salary currency code (e.g. USD, EUR)
- Type: number | null
salary _max Maximum salary
- Type: number | null
salary _min Minimum salary
- Type: string | nullenum
salary _period Salary period
annually monthly daily hourly
- Type: string
url _backoffice 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. - Type: object · IdName nullable
workflow Hiring workflow (pipeline) assigned to this job. Embedded via
include=workflow. Suppressed whenview=summaryeven if the include was requested.- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: integer | null
workflow _id ID of the hiring workflow (pipeline) assigned to this job
- Type: string | null
job _alias Short alias of the job, usable in URLs (e.g. 79SZHfT)
- Type: integer | nullFormat: int64
last _message _at 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.
- Type: integer | nullFormat: int64
rejected _at Unix timestamp (seconds)
- Type: array object[] | null · IdName[] nullable
rejection _reason Reasons for rejection. Null if not rejected.
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
stage Current pipeline stage of the application
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: stringFormat: uri
url _backoffice 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.
- Type: object · Pagination
pagination required- Type: integer
page requiredCurrent page number.
- Type: integer
page _count requiredTotal number of pages.
- Type: integer
page _size requiredItems per page.
- Type: integer
total _count requiredTotal number of items.
Validation error
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredValidation error details object.
- Type: string
name requiredAlways "Validation Error" for validation failures
- Type: object
validation _errors requiredField-level validation errors (field name to error message)
- Type: string
property Name
- Type: integer
code Integer numbers.
- Type: string
message - Type: integer
status Integer numbers.
Unauthorized
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Forbidden
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Content-Type must be application/json
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Too many requests
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
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
}
}Application list
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.
- Type: string
include Comma-separated list of related resources to include. Supported:
candidate— full candidate profile,cv.text— parsed plain-text CV content,job— full job payload withurl_backofficefor UI deep-linking.
- Type: string
candidate _id Pattern: ^[A-Za-z0-9_-]+$requiredCandidate ID (numeric) or alias
- Type: integer
job _id requiredJob ID to apply the candidate to.
- Type: object · FileData
cv - Type: string
data requiredBase64 content
- Type: string
file _name requiredOriginal file name.
- Type: string
mime _type requiredMIME type (e.g. application/pdf).
- Type: integer
size Optional for uploads, returned in responses
- Type: integer
stage _id Pipeline stage ID. If omitted, defaults to the first stage.
Created application
Type: object- Type: integer
candidate _id requiredID of the candidate
- Type: integer
company _id requiredID of the company
- Type: integerFormat: int64
created _at requiredUnix timestamp (seconds)
- Type: integer
id requiredUnique identifier
- Type: boolean
is _disqualified requiredWhether the candidate is disqualified for this application
- Type: integer
job _id requiredID of the job
- Type: stringenum
status requiredApplication status. Changes via hire/reject/unreject actions.
active hired rejected
- Type: integerFormat: int64
updated _at requiredUnix timestamp (seconds)
- Type: string | null
ai _recommendation AI-generated recommendation label (e.g. Strong, Good, Weak)
- Type: integer | null
ai _score AI-generated candidate fit score (0-100)
- Type: integer | nullFormat: int64
ai _scoring _updated _at Unix timestamp (seconds) of the latest completed AI scoring result
- Type: object · ApplicationCandidate nullable
candidate Embedded candidate data (included when requested via
include=candidate)- Type: integer
company _id requiredID of the company this candidate belongs to
- Type: integerFormat: int64
created _at requiredUnix timestamp (seconds)
- Type: integer
id requiredUnique identifier
- Type: array object[] · ProfileAnswer[]
profile requiredCandidate profile field answers
- Type: integer
question _id requiredQuestion ID.
- Type: string
question _text requiredQuestion label.
value requiredAnswer value (string, array, or null).
- Type: integerFormat: int64
updated _at requiredUnix timestamp (seconds)
- Type: integer | null
days _since _last _message Number of whole days since the last message. Computed at request time. Null if no messages exist.
- Type: array string[] | null nullable
emails List of candidate email addresses
- Type: string | null
first _name Candidate's first name
- Type: string | null
ip IP address from which the candidate applied
- Type: integer | nullFormat: int64
last _message _at Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.
- Type: string | null
last _name Candidate's last name
- Type: object · IdName nullable
origin Where the candidate originally came from
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: array string[] | null nullable
phones List of candidate phone numbers
- Type: object · IdName nullable
source How the candidate was sourced
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object nullable
custom _fields Custom field values as key-value pairs
- Type: anything
property Name
- nullable
cv Application CV. Returns standard attachment metadata + download URL. When
?include=cv.textis requested, atextfield with parsed plain-text content is added.- Type: object · AttachmentFile
file required- Type: string
file _ext requiredFile extension.
- Type: string
file _type requiredFile type category.
- Type: boolean nullable
is _image requiredWhether the file is an image.
- Type: string
orig _file _name requiredOriginal file name.
- Type: string
readable _size requiredHuman-readable file size.
- Type: string
relative _time requiredHuman-readable time since upload (e.g.
"2 days ago"). - Type: stringFormat: uri nullable
url requiredAbsolute download URL (e.g.
https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit withAuthorization: Bearer <API_KEY>. - Type: stringFormat: uuid
uuid requiredUnique attachment identifier. Stable across API calls; use in referencing endpoints.
- Type: string nullable
text Parsed plain-text CV content. Included only when
?include=cv.textis requested ANDview=full(the default). Suppressed whenview=summaryeven 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.
- Type: integer | null
days _since _last _message Number of whole days since the last message. Computed at request time. Null if no messages exist.
- Type: integer | nullFormat: int64
hired _at Unix timestamp (seconds)
- Type: array object[] | null · JobHiringTeamMember[] nullable
hiring _team Team members assigned to this application's job
- Type: string
full _name requiredUser full name.
- Type: integer
id requiredUser ID.
- Type: string | null
email User email.
- Type: string | null
role Role on hiring team (e.g. hiring_manager, recruiter).
- Type: string | null
internal _job _id Company's internal job identifier
- Type: object · Job nullable
job Embedded job payload (included when requested via
include=job). Usejob.url_backofficeto deep-link UI widgets to the job's pipeline view in the recruiter app.- Type: integer
company _id requiredID of the company this job belongs to
- Type: integerFormat: int64
created _at requiredUnix timestamp (seconds)
- Type: integer
id requiredUnique identifier
- Type: boolean
is _remote requiredWhether this is a remote position
- Type: string
status requiredJob status: open, closed, draft, or archived
- Type: string
title requiredPublic job title shown to candidates
- Type: integerFormat: int64
updated _at requiredUnix timestamp (seconds)
- Type: string
url requiredPublic URL of the job posting page
- Type: array object[] · AiScoringCriterion[]
ai _scoring _criteria AI scoring criteria configured for this job, ordered by
positionASC. Returned as an empty array when none are configured. Present only whenview=full(default); omitted entirely whenview=summary.- Type: integer
id requiredUnique identifier of the criterion.
- Type: integer
position required0-based ordinal of the criterion in the job's list.
- Type: string
text requiredPrompt text describing what to evaluate.
- Type: integer
weight min:1max:10requiredRelative importance of this criterion in the total score (1–10).
- Type: string | null
title Optional short label for the criterion.
- Type: string | null
alias 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. - Type: object · IdName nullable
category Job category (e.g. Engineering, Marketing)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
department Department this job belongs to
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: string
description Job description (HTML). Present only when
view=full(default); omitted entirely whenview=summaryto keep list responses inside the agent context budget. UseGET /jobs/{id}orview=fullto retrieve. - Type: object · IdName nullable
education _level Required education level
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
employment _type Employment type (e.g. Full-time, Part-time, Contract)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
experience _level Required experience level (e.g. Entry, Mid, Senior)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: array object[] · JobHiringTeamMember[]
hiring _team Team members assigned to this job. Embedded via
include=hiring_team. Suppressed whenview=summaryeven if the include was requested.- Type: string
full _name requiredUser full name.
- Type: integer
id requiredUser ID.
- Type: string | null
email User email.
- Type: string | null
role Role on hiring team (e.g. hiring_manager, recruiter).
- Type: integer | null
hours _per _week _max Maximum hours per week
- Type: integer | null
hours _per _week _min Minimum hours per week
- Type: object
indeed _posting _data Indeed job board posting metadata. Present only when
view=full(default); omitted entirely whenview=summary.- Type: anything
property Name
- Type: string | null
internal _job _id Company's internal job identifier (e.g. requisition number)
- Type: string | null
internal _title Internal job title visible only to the hiring team
- Type: boolean
is _satellite Whether this job is a satellite (child) of a canonical job. Satellite jobs share the candidate pipeline of their parent.
- Type: object · JobLocation nullable
location Job location details
- Type: string
city City.
- Type: string
country Country.
- Type: string
full _address Full formatted address.
- Type: string
postal _code Postal code.
- Type: string
state State or region.
- Type: string
street _address Street address.
- Type: anything
property Name
- Type: integer | null
parent _job _id ID of the canonical (parent) job. Null for canonical jobs. Recruiting operations should target the canonical job.
- Type: array object[] | null nullable
pipeline _stages Pipeline stages for this job's workflow. Only included when
include=pipeline_stagesis specified. Suppressed whenview=summaryeven if the include was requested.- Type: integer
id Integer numbers.
- Type: string
name
- Type: string | nullenum
resume _field _status Whether resume upload is required, optional, or hidden on the application form
required optional hidden
- Type: string | null
salary _currency Salary currency code (e.g. USD, EUR)
- Type: number | null
salary _max Maximum salary
- Type: number | null
salary _min Minimum salary
- Type: string | nullenum
salary _period Salary period
annually monthly daily hourly
- Type: string
url _backoffice 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. - Type: object · IdName nullable
workflow Hiring workflow (pipeline) assigned to this job. Embedded via
include=workflow. Suppressed whenview=summaryeven if the include was requested.- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: integer | null
workflow _id ID of the hiring workflow (pipeline) assigned to this job
- Type: string | null
job _alias Short alias of the job, usable in URLs (e.g. 79SZHfT)
- Type: integer | nullFormat: int64
last _message _at 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.
- Type: integer | nullFormat: int64
rejected _at Unix timestamp (seconds)
- Type: array object[] | null · IdName[] nullable
rejection _reason Reasons for rejection. Null if not rejected.
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
stage Current pipeline stage of the application
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: stringFormat: uri
url _backoffice 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
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredValidation error details object.
- Type: string
name requiredAlways "Validation Error" for validation failures
- Type: object
validation _errors requiredField-level validation errors (field name to error message)
- Type: string
property Name
- Type: integer
code Integer numbers.
- Type: string
message - Type: integer
status Integer numbers.
Unauthorized
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Forbidden
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Content-Type must be application/json
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Too many requests
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
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
}Created application
Get application
Returns full application payload with stage/status/rejection context. Recommended before mutating stage transitions in external automations.
- Type: integer
id requiredResource ID (numeric).
- Type: string
include Comma-separated list of related resources to include. Supported:
candidate— full candidate profile,cv.text— parsed plain-text CV content,job— full job payload withurl_backofficefor UI deep-linking.
Application
Type: object- Type: integer
candidate _id requiredID of the candidate
- Type: integer
company _id requiredID of the company
- Type: integerFormat: int64
created _at requiredUnix timestamp (seconds)
- Type: integer
id requiredUnique identifier
- Type: boolean
is _disqualified requiredWhether the candidate is disqualified for this application
- Type: integer
job _id requiredID of the job
- Type: stringenum
status requiredApplication status. Changes via hire/reject/unreject actions.
active hired rejected
- Type: integerFormat: int64
updated _at requiredUnix timestamp (seconds)
- Type: string | null
ai _recommendation AI-generated recommendation label (e.g. Strong, Good, Weak)
- Type: integer | null
ai _score AI-generated candidate fit score (0-100)
- Type: integer | nullFormat: int64
ai _scoring _updated _at Unix timestamp (seconds) of the latest completed AI scoring result
- Type: object · ApplicationCandidate nullable
candidate Embedded candidate data (included when requested via
include=candidate)- Type: integer
company _id requiredID of the company this candidate belongs to
- Type: integerFormat: int64
created _at requiredUnix timestamp (seconds)
- Type: integer
id requiredUnique identifier
- Type: array object[] · ProfileAnswer[]
profile requiredCandidate profile field answers
- Type: integer
question _id requiredQuestion ID.
- Type: string
question _text requiredQuestion label.
value requiredAnswer value (string, array, or null).
- Type: integerFormat: int64
updated _at requiredUnix timestamp (seconds)
- Type: integer | null
days _since _last _message Number of whole days since the last message. Computed at request time. Null if no messages exist.
- Type: array string[] | null nullable
emails List of candidate email addresses
- Type: string | null
first _name Candidate's first name
- Type: string | null
ip IP address from which the candidate applied
- Type: integer | nullFormat: int64
last _message _at Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.
- Type: string | null
last _name Candidate's last name
- Type: object · IdName nullable
origin Where the candidate originally came from
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: array string[] | null nullable
phones List of candidate phone numbers
- Type: object · IdName nullable
source How the candidate was sourced
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object nullable
custom _fields Custom field values as key-value pairs
- Type: anything
property Name
- nullable
cv Application CV. Returns standard attachment metadata + download URL. When
?include=cv.textis requested, atextfield with parsed plain-text content is added.- Type: object · AttachmentFile
file required- Type: string
file _ext requiredFile extension.
- Type: string
file _type requiredFile type category.
- Type: boolean nullable
is _image requiredWhether the file is an image.
- Type: string
orig _file _name requiredOriginal file name.
- Type: string
readable _size requiredHuman-readable file size.
- Type: string
relative _time requiredHuman-readable time since upload (e.g.
"2 days ago"). - Type: stringFormat: uri nullable
url requiredAbsolute download URL (e.g.
https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit withAuthorization: Bearer <API_KEY>. - Type: stringFormat: uuid
uuid requiredUnique attachment identifier. Stable across API calls; use in referencing endpoints.
- Type: string nullable
text Parsed plain-text CV content. Included only when
?include=cv.textis requested ANDview=full(the default). Suppressed whenview=summaryeven 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.
- Type: integer | null
days _since _last _message Number of whole days since the last message. Computed at request time. Null if no messages exist.
- Type: integer | nullFormat: int64
hired _at Unix timestamp (seconds)
- Type: array object[] | null · JobHiringTeamMember[] nullable
hiring _team Team members assigned to this application's job
- Type: string
full _name requiredUser full name.
- Type: integer
id requiredUser ID.
- Type: string | null
email User email.
- Type: string | null
role Role on hiring team (e.g. hiring_manager, recruiter).
- Type: string | null
internal _job _id Company's internal job identifier
- Type: object · Job nullable
job Embedded job payload (included when requested via
include=job). Usejob.url_backofficeto deep-link UI widgets to the job's pipeline view in the recruiter app.- Type: integer
company _id requiredID of the company this job belongs to
- Type: integerFormat: int64
created _at requiredUnix timestamp (seconds)
- Type: integer
id requiredUnique identifier
- Type: boolean
is _remote requiredWhether this is a remote position
- Type: string
status requiredJob status: open, closed, draft, or archived
- Type: string
title requiredPublic job title shown to candidates
- Type: integerFormat: int64
updated _at requiredUnix timestamp (seconds)
- Type: string
url requiredPublic URL of the job posting page
- Type: array object[] · AiScoringCriterion[]
ai _scoring _criteria AI scoring criteria configured for this job, ordered by
positionASC. Returned as an empty array when none are configured. Present only whenview=full(default); omitted entirely whenview=summary.- Type: integer
id requiredUnique identifier of the criterion.
- Type: integer
position required0-based ordinal of the criterion in the job's list.
- Type: string
text requiredPrompt text describing what to evaluate.
- Type: integer
weight min:1max:10requiredRelative importance of this criterion in the total score (1–10).
- Type: string | null
title Optional short label for the criterion.
- Type: string | null
alias 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. - Type: object · IdName nullable
category Job category (e.g. Engineering, Marketing)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
department Department this job belongs to
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: string
description Job description (HTML). Present only when
view=full(default); omitted entirely whenview=summaryto keep list responses inside the agent context budget. UseGET /jobs/{id}orview=fullto retrieve. - Type: object · IdName nullable
education _level Required education level
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
employment _type Employment type (e.g. Full-time, Part-time, Contract)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
experience _level Required experience level (e.g. Entry, Mid, Senior)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: array object[] · JobHiringTeamMember[]
hiring _team Team members assigned to this job. Embedded via
include=hiring_team. Suppressed whenview=summaryeven if the include was requested.- Type: string
full _name requiredUser full name.
- Type: integer
id requiredUser ID.
- Type: string | null
email User email.
- Type: string | null
role Role on hiring team (e.g. hiring_manager, recruiter).
- Type: integer | null
hours _per _week _max Maximum hours per week
- Type: integer | null
hours _per _week _min Minimum hours per week
- Type: object
indeed _posting _data Indeed job board posting metadata. Present only when
view=full(default); omitted entirely whenview=summary.- Type: anything
property Name
- Type: string | null
internal _job _id Company's internal job identifier (e.g. requisition number)
- Type: string | null
internal _title Internal job title visible only to the hiring team
- Type: boolean
is _satellite Whether this job is a satellite (child) of a canonical job. Satellite jobs share the candidate pipeline of their parent.
- Type: object · JobLocation nullable
location Job location details
- Type: string
city City.
- Type: string
country Country.
- Type: string
full _address Full formatted address.
- Type: string
postal _code Postal code.
- Type: string
state State or region.
- Type: string
street _address Street address.
- Type: anything
property Name
- Type: integer | null
parent _job _id ID of the canonical (parent) job. Null for canonical jobs. Recruiting operations should target the canonical job.
- Type: array object[] | null nullable
pipeline _stages Pipeline stages for this job's workflow. Only included when
include=pipeline_stagesis specified. Suppressed whenview=summaryeven if the include was requested.- Type: integer
id Integer numbers.
- Type: string
name
- Type: string | nullenum
resume _field _status Whether resume upload is required, optional, or hidden on the application form
required optional hidden
- Type: string | null
salary _currency Salary currency code (e.g. USD, EUR)
- Type: number | null
salary _max Maximum salary
- Type: number | null
salary _min Minimum salary
- Type: string | nullenum
salary _period Salary period
annually monthly daily hourly
- Type: string
url _backoffice 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. - Type: object · IdName nullable
workflow Hiring workflow (pipeline) assigned to this job. Embedded via
include=workflow. Suppressed whenview=summaryeven if the include was requested.- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: integer | null
workflow _id ID of the hiring workflow (pipeline) assigned to this job
- Type: string | null
job _alias Short alias of the job, usable in URLs (e.g. 79SZHfT)
- Type: integer | nullFormat: int64
last _message _at 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.
- Type: integer | nullFormat: int64
rejected _at Unix timestamp (seconds)
- Type: array object[] | null · IdName[] nullable
rejection _reason Reasons for rejection. Null if not rejected.
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
stage Current pipeline stage of the application
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: stringFormat: uri
url _backoffice 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
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Forbidden
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Not found
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Too many requests
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
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
}Application
Update application
Updates application-level fields such as stage, disqualification flag, and CV. Supports external pipeline management and data correction flows.
- Type: integer
id requiredResource ID (numeric).
- Type: string
include Comma-separated list of related resources to include. Supported:
candidate— full candidate profile,cv.text— parsed plain-text CV content,job— full job payload withurl_backofficefor UI deep-linking.
- Type: object · FileData
cv - Type: string
data requiredBase64 content
- Type: string
file _name requiredOriginal file name.
- Type: string
mime _type requiredMIME type (e.g. application/pdf).
- Type: integer
size Optional for uploads, returned in responses
- Type: boolean
is _disqualified Set to true to disqualify the candidate on this application.
- Type: integer
stage _id Move application to this pipeline stage.
Updated application
Type: object- Type: integer
candidate _id requiredID of the candidate
- Type: integer
company _id requiredID of the company
- Type: integerFormat: int64
created _at requiredUnix timestamp (seconds)
- Type: integer
id requiredUnique identifier
- Type: boolean
is _disqualified requiredWhether the candidate is disqualified for this application
- Type: integer
job _id requiredID of the job
- Type: stringenum
status requiredApplication status. Changes via hire/reject/unreject actions.
active hired rejected
- Type: integerFormat: int64
updated _at requiredUnix timestamp (seconds)
- Type: string | null
ai _recommendation AI-generated recommendation label (e.g. Strong, Good, Weak)
- Type: integer | null
ai _score AI-generated candidate fit score (0-100)
- Type: integer | nullFormat: int64
ai _scoring _updated _at Unix timestamp (seconds) of the latest completed AI scoring result
- Type: object · ApplicationCandidate nullable
candidate Embedded candidate data (included when requested via
include=candidate)- Type: integer
company _id requiredID of the company this candidate belongs to
- Type: integerFormat: int64
created _at requiredUnix timestamp (seconds)
- Type: integer
id requiredUnique identifier
- Type: array object[] · ProfileAnswer[]
profile requiredCandidate profile field answers
- Type: integer
question _id requiredQuestion ID.
- Type: string
question _text requiredQuestion label.
value requiredAnswer value (string, array, or null).
- Type: integerFormat: int64
updated _at requiredUnix timestamp (seconds)
- Type: integer | null
days _since _last _message Number of whole days since the last message. Computed at request time. Null if no messages exist.
- Type: array string[] | null nullable
emails List of candidate email addresses
- Type: string | null
first _name Candidate's first name
- Type: string | null
ip IP address from which the candidate applied
- Type: integer | nullFormat: int64
last _message _at Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.
- Type: string | null
last _name Candidate's last name
- Type: object · IdName nullable
origin Where the candidate originally came from
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: array string[] | null nullable
phones List of candidate phone numbers
- Type: object · IdName nullable
source How the candidate was sourced
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object nullable
custom _fields Custom field values as key-value pairs
- Type: anything
property Name
- nullable
cv Application CV. Returns standard attachment metadata + download URL. When
?include=cv.textis requested, atextfield with parsed plain-text content is added.- Type: object · AttachmentFile
file required- Type: string
file _ext requiredFile extension.
- Type: string
file _type requiredFile type category.
- Type: boolean nullable
is _image requiredWhether the file is an image.
- Type: string
orig _file _name requiredOriginal file name.
- Type: string
readable _size requiredHuman-readable file size.
- Type: string
relative _time requiredHuman-readable time since upload (e.g.
"2 days ago"). - Type: stringFormat: uri nullable
url requiredAbsolute download URL (e.g.
https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit withAuthorization: Bearer <API_KEY>. - Type: stringFormat: uuid
uuid requiredUnique attachment identifier. Stable across API calls; use in referencing endpoints.
- Type: string nullable
text Parsed plain-text CV content. Included only when
?include=cv.textis requested ANDview=full(the default). Suppressed whenview=summaryeven 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.
- Type: integer | null
days _since _last _message Number of whole days since the last message. Computed at request time. Null if no messages exist.
- Type: integer | nullFormat: int64
hired _at Unix timestamp (seconds)
- Type: array object[] | null · JobHiringTeamMember[] nullable
hiring _team Team members assigned to this application's job
- Type: string
full _name requiredUser full name.
- Type: integer
id requiredUser ID.
- Type: string | null
email User email.
- Type: string | null
role Role on hiring team (e.g. hiring_manager, recruiter).
- Type: string | null
internal _job _id Company's internal job identifier
- Type: object · Job nullable
job Embedded job payload (included when requested via
include=job). Usejob.url_backofficeto deep-link UI widgets to the job's pipeline view in the recruiter app.- Type: integer
company _id requiredID of the company this job belongs to
- Type: integerFormat: int64
created _at requiredUnix timestamp (seconds)
- Type: integer
id requiredUnique identifier
- Type: boolean
is _remote requiredWhether this is a remote position
- Type: string
status requiredJob status: open, closed, draft, or archived
- Type: string
title requiredPublic job title shown to candidates
- Type: integerFormat: int64
updated _at requiredUnix timestamp (seconds)
- Type: string
url requiredPublic URL of the job posting page
- Type: array object[] · AiScoringCriterion[]
ai _scoring _criteria AI scoring criteria configured for this job, ordered by
positionASC. Returned as an empty array when none are configured. Present only whenview=full(default); omitted entirely whenview=summary.- Type: integer
id requiredUnique identifier of the criterion.
- Type: integer
position required0-based ordinal of the criterion in the job's list.
- Type: string
text requiredPrompt text describing what to evaluate.
- Type: integer
weight min:1max:10requiredRelative importance of this criterion in the total score (1–10).
- Type: string | null
title Optional short label for the criterion.
- Type: string | null
alias 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. - Type: object · IdName nullable
category Job category (e.g. Engineering, Marketing)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
department Department this job belongs to
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: string
description Job description (HTML). Present only when
view=full(default); omitted entirely whenview=summaryto keep list responses inside the agent context budget. UseGET /jobs/{id}orview=fullto retrieve. - Type: object · IdName nullable
education _level Required education level
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
employment _type Employment type (e.g. Full-time, Part-time, Contract)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
experience _level Required experience level (e.g. Entry, Mid, Senior)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: array object[] · JobHiringTeamMember[]
hiring _team Team members assigned to this job. Embedded via
include=hiring_team. Suppressed whenview=summaryeven if the include was requested.- Type: string
full _name requiredUser full name.
- Type: integer
id requiredUser ID.
- Type: string | null
email User email.
- Type: string | null
role Role on hiring team (e.g. hiring_manager, recruiter).
- Type: integer | null
hours _per _week _max Maximum hours per week
- Type: integer | null
hours _per _week _min Minimum hours per week
- Type: object
indeed _posting _data Indeed job board posting metadata. Present only when
view=full(default); omitted entirely whenview=summary.- Type: anything
property Name
- Type: string | null
internal _job _id Company's internal job identifier (e.g. requisition number)
- Type: string | null
internal _title Internal job title visible only to the hiring team
- Type: boolean
is _satellite Whether this job is a satellite (child) of a canonical job. Satellite jobs share the candidate pipeline of their parent.
- Type: object · JobLocation nullable
location Job location details
- Type: string
city City.
- Type: string
country Country.
- Type: string
full _address Full formatted address.
- Type: string
postal _code Postal code.
- Type: string
state State or region.
- Type: string
street _address Street address.
- Type: anything
property Name
- Type: integer | null
parent _job _id ID of the canonical (parent) job. Null for canonical jobs. Recruiting operations should target the canonical job.
- Type: array object[] | null nullable
pipeline _stages Pipeline stages for this job's workflow. Only included when
include=pipeline_stagesis specified. Suppressed whenview=summaryeven if the include was requested.- Type: integer
id Integer numbers.
- Type: string
name
- Type: string | nullenum
resume _field _status Whether resume upload is required, optional, or hidden on the application form
required optional hidden
- Type: string | null
salary _currency Salary currency code (e.g. USD, EUR)
- Type: number | null
salary _max Maximum salary
- Type: number | null
salary _min Minimum salary
- Type: string | nullenum
salary _period Salary period
annually monthly daily hourly
- Type: string
url _backoffice 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. - Type: object · IdName nullable
workflow Hiring workflow (pipeline) assigned to this job. Embedded via
include=workflow. Suppressed whenview=summaryeven if the include was requested.- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: integer | null
workflow _id ID of the hiring workflow (pipeline) assigned to this job
- Type: string | null
job _alias Short alias of the job, usable in URLs (e.g. 79SZHfT)
- Type: integer | nullFormat: int64
last _message _at 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.
- Type: integer | nullFormat: int64
rejected _at Unix timestamp (seconds)
- Type: array object[] | null · IdName[] nullable
rejection _reason Reasons for rejection. Null if not rejected.
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
stage Current pipeline stage of the application
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: stringFormat: uri
url _backoffice 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
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredValidation error details object.
- Type: string
name requiredAlways "Validation Error" for validation failures
- Type: object
validation _errors requiredField-level validation errors (field name to error message)
- Type: string
property Name
- Type: integer
code Integer numbers.
- Type: string
message - Type: integer
status Integer numbers.
Unauthorized
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Forbidden
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Not found
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Content-Type must be application/json
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Too many requests
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
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
}Updated application
Delete application
Deletes an application and removes it from default list/view queries.
- Type: integer
id requiredResource ID (numeric).
Application deleted
Type: object- Type: boolean
success requiredAlways true on success.
Unauthorized
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Forbidden
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Not found
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Too many requests
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
curl https://api.100hires.com/v2/applications/1 \
--request DELETE \
--header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
"success": true
}Application deleted
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.
- Type: integer
id requiredResource ID (numeric).
Structured AI score payload for the latest application scoring result
Type: object- Type: object · ApplicationAiScorePayload nullable
score required- Type: array object[] · ApplicationAiScoreCriterion[]
criteria requiredArray of scoring criteria with scores.
- Type: string
criterion _text requiredFull criterion description.
- Type: string | null
justification requiredAI explanation for the score.
- Type: integer
score requiredScore for this criterion (0-100).
- Type: string | null
criterion _title Short criterion title.
- Type: array string[] | null nullable
followup _questions
- Type: string | null
date requiredScoring date.
- Type: integer
job _id requiredJob ID.
- Type: string | null
job _title requiredJob title.
- Type: string | null
job _url requiredJob URL.
- Type: integer
rate requiredOverall recommendation (e.g. strong_yes, yes, no).
- Type: string | null
summary requiredAI-generated summary.
- Type: integer | null
total _score requiredTotal score (0-100).
- Type: string | null
uuid requiredUnique scoring session ID.
Unauthorized
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Forbidden
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Not found
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Too many requests
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
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"
}
}Structured AI score payload for the latest application scoring result
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_idis set)automation— move driven by an automation rule / form watchersystem— initial assignment or other non-user, non-automation source
- Type: integer
id requiredResource ID (numeric).
Full chronological stage transition history for an application, including the initial assignment.
Type: object- Type: array object[] · ApplicationStageHistoryEntry[]
history requiredChronological list of stage transitions (oldest first), including the initial assignment.
- Type: integer nullable
from _stage _id requiredPrevious stage id.
nullfor the initial assignment. - Type: string nullable
from _stage _name requiredPrevious stage name.
nullfor the initial assignment. - Type: integerFormat: int64
moved _at requiredUnix timestamp (seconds) of the transition.
- Type: stringenum
moved _by _type requiredWho/what initiated the move.
user= manual move,automation= automation rule/form watcher,system= initial assignment or unattributed.user automation system
- Type: integer nullable
moved _by _user _id requiredID of the user that performed the move. Populated only when
moved_by_type = user. - Type: string nullable
source requiredWhat caused the transition. Format:
<assign_type>or<assign_type>:<board_name>. Examples:apply:indeed,form_watcher,user,api_v2.nullfor historical records created before source tracking was added. - Type: integer
to _stage _id requiredStage id the application was moved to.
- Type: string nullable
to _stage _name requiredStage name the application was moved to.
nullif the stage has been hard-deleted.
Unauthorized
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Forbidden
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Not found
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Too many requests
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
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
}
]
}Full chronological stage transition history for an application, including the initial assignment.
Move application to stage
Moves an application to a specific pipeline stage. This is the explicit stage transition endpoint for workflow orchestration.
- Type: integer
id requiredResource ID (numeric).
- Type: string
include Comma-separated list of related resources to include. Supported:
candidate— full candidate profile,cv.text— parsed plain-text CV content,job— full job payload withurl_backofficefor UI deep-linking.
- Type: integer
stage _id requiredTarget pipeline stage ID.
Updated application
Type: object- Type: integer
candidate _id requiredID of the candidate
- Type: integer
company _id requiredID of the company
- Type: integerFormat: int64
created _at requiredUnix timestamp (seconds)
- Type: integer
id requiredUnique identifier
- Type: boolean
is _disqualified requiredWhether the candidate is disqualified for this application
- Type: integer
job _id requiredID of the job
- Type: stringenum
status requiredApplication status. Changes via hire/reject/unreject actions.
active hired rejected
- Type: integerFormat: int64
updated _at requiredUnix timestamp (seconds)
- Type: string | null
ai _recommendation AI-generated recommendation label (e.g. Strong, Good, Weak)
- Type: integer | null
ai _score AI-generated candidate fit score (0-100)
- Type: integer | nullFormat: int64
ai _scoring _updated _at Unix timestamp (seconds) of the latest completed AI scoring result
- Type: object · ApplicationCandidate nullable
candidate Embedded candidate data (included when requested via
include=candidate)- Type: integer
company _id requiredID of the company this candidate belongs to
- Type: integerFormat: int64
created _at requiredUnix timestamp (seconds)
- Type: integer
id requiredUnique identifier
- Type: array object[] · ProfileAnswer[]
profile requiredCandidate profile field answers
- Type: integer
question _id requiredQuestion ID.
- Type: string
question _text requiredQuestion label.
value requiredAnswer value (string, array, or null).
- Type: integerFormat: int64
updated _at requiredUnix timestamp (seconds)
- Type: integer | null
days _since _last _message Number of whole days since the last message. Computed at request time. Null if no messages exist.
- Type: array string[] | null nullable
emails List of candidate email addresses
- Type: string | null
first _name Candidate's first name
- Type: string | null
ip IP address from which the candidate applied
- Type: integer | nullFormat: int64
last _message _at Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.
- Type: string | null
last _name Candidate's last name
- Type: object · IdName nullable
origin Where the candidate originally came from
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: array string[] | null nullable
phones List of candidate phone numbers
- Type: object · IdName nullable
source How the candidate was sourced
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object nullable
custom _fields Custom field values as key-value pairs
- Type: anything
property Name
- nullable
cv Application CV. Returns standard attachment metadata + download URL. When
?include=cv.textis requested, atextfield with parsed plain-text content is added.- Type: object · AttachmentFile
file required- Type: string
file _ext requiredFile extension.
- Type: string
file _type requiredFile type category.
- Type: boolean nullable
is _image requiredWhether the file is an image.
- Type: string
orig _file _name requiredOriginal file name.
- Type: string
readable _size requiredHuman-readable file size.
- Type: string
relative _time requiredHuman-readable time since upload (e.g.
"2 days ago"). - Type: stringFormat: uri nullable
url requiredAbsolute download URL (e.g.
https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit withAuthorization: Bearer <API_KEY>. - Type: stringFormat: uuid
uuid requiredUnique attachment identifier. Stable across API calls; use in referencing endpoints.
- Type: string nullable
text Parsed plain-text CV content. Included only when
?include=cv.textis requested ANDview=full(the default). Suppressed whenview=summaryeven 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.
- Type: integer | null
days _since _last _message Number of whole days since the last message. Computed at request time. Null if no messages exist.
- Type: integer | nullFormat: int64
hired _at Unix timestamp (seconds)
- Type: array object[] | null · JobHiringTeamMember[] nullable
hiring _team Team members assigned to this application's job
- Type: string
full _name requiredUser full name.
- Type: integer
id requiredUser ID.
- Type: string | null
email User email.
- Type: string | null
role Role on hiring team (e.g. hiring_manager, recruiter).
- Type: string | null
internal _job _id Company's internal job identifier
- Type: object · Job nullable
job Embedded job payload (included when requested via
include=job). Usejob.url_backofficeto deep-link UI widgets to the job's pipeline view in the recruiter app.- Type: integer
company _id requiredID of the company this job belongs to
- Type: integerFormat: int64
created _at requiredUnix timestamp (seconds)
- Type: integer
id requiredUnique identifier
- Type: boolean
is _remote requiredWhether this is a remote position
- Type: string
status requiredJob status: open, closed, draft, or archived
- Type: string
title requiredPublic job title shown to candidates
- Type: integerFormat: int64
updated _at requiredUnix timestamp (seconds)
- Type: string
url requiredPublic URL of the job posting page
- Type: array object[] · AiScoringCriterion[]
ai _scoring _criteria AI scoring criteria configured for this job, ordered by
positionASC. Returned as an empty array when none are configured. Present only whenview=full(default); omitted entirely whenview=summary.- Type: integer
id requiredUnique identifier of the criterion.
- Type: integer
position required0-based ordinal of the criterion in the job's list.
- Type: string
text requiredPrompt text describing what to evaluate.
- Type: integer
weight min:1max:10requiredRelative importance of this criterion in the total score (1–10).
- Type: string | null
title Optional short label for the criterion.
- Type: string | null
alias 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. - Type: object · IdName nullable
category Job category (e.g. Engineering, Marketing)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
department Department this job belongs to
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: string
description Job description (HTML). Present only when
view=full(default); omitted entirely whenview=summaryto keep list responses inside the agent context budget. UseGET /jobs/{id}orview=fullto retrieve. - Type: object · IdName nullable
education _level Required education level
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
employment _type Employment type (e.g. Full-time, Part-time, Contract)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
experience _level Required experience level (e.g. Entry, Mid, Senior)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: array object[] · JobHiringTeamMember[]
hiring _team Team members assigned to this job. Embedded via
include=hiring_team. Suppressed whenview=summaryeven if the include was requested.- Type: string
full _name requiredUser full name.
- Type: integer
id requiredUser ID.
- Type: string | null
email User email.
- Type: string | null
role Role on hiring team (e.g. hiring_manager, recruiter).
- Type: integer | null
hours _per _week _max Maximum hours per week
- Type: integer | null
hours _per _week _min Minimum hours per week
- Type: object
indeed _posting _data Indeed job board posting metadata. Present only when
view=full(default); omitted entirely whenview=summary.- Type: anything
property Name
- Type: string | null
internal _job _id Company's internal job identifier (e.g. requisition number)
- Type: string | null
internal _title Internal job title visible only to the hiring team
- Type: boolean
is _satellite Whether this job is a satellite (child) of a canonical job. Satellite jobs share the candidate pipeline of their parent.
- Type: object · JobLocation nullable
location Job location details
- Type: string
city City.
- Type: string
country Country.
- Type: string
full _address Full formatted address.
- Type: string
postal _code Postal code.
- Type: string
state State or region.
- Type: string
street _address Street address.
- Type: anything
property Name
- Type: integer | null
parent _job _id ID of the canonical (parent) job. Null for canonical jobs. Recruiting operations should target the canonical job.
- Type: array object[] | null nullable
pipeline _stages Pipeline stages for this job's workflow. Only included when
include=pipeline_stagesis specified. Suppressed whenview=summaryeven if the include was requested.- Type: integer
id Integer numbers.
- Type: string
name
- Type: string | nullenum
resume _field _status Whether resume upload is required, optional, or hidden on the application form
required optional hidden
- Type: string | null
salary _currency Salary currency code (e.g. USD, EUR)
- Type: number | null
salary _max Maximum salary
- Type: number | null
salary _min Minimum salary
- Type: string | nullenum
salary _period Salary period
annually monthly daily hourly
- Type: string
url _backoffice 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. - Type: object · IdName nullable
workflow Hiring workflow (pipeline) assigned to this job. Embedded via
include=workflow. Suppressed whenview=summaryeven if the include was requested.- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: integer | null
workflow _id ID of the hiring workflow (pipeline) assigned to this job
- Type: string | null
job _alias Short alias of the job, usable in URLs (e.g. 79SZHfT)
- Type: integer | nullFormat: int64
last _message _at 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.
- Type: integer | nullFormat: int64
rejected _at Unix timestamp (seconds)
- Type: array object[] | null · IdName[] nullable
rejection _reason Reasons for rejection. Null if not rejected.
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
stage Current pipeline stage of the application
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: stringFormat: uri
url _backoffice 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
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredValidation error details object.
- Type: string
name requiredAlways "Validation Error" for validation failures
- Type: object
validation _errors requiredField-level validation errors (field name to error message)
- Type: string
property Name
- Type: integer
code Integer numbers.
- Type: string
message - Type: integer
status Integer numbers.
Unauthorized
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Forbidden
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Not found
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Content-Type must be application/json
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Too many requests
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
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
}Updated application
Mark application as hired
Marks an application as hired using domain rules from the current workflow. Use as the finalization step in hiring automations.
- Type: integer
id requiredResource ID (numeric).
- Type: string
include Comma-separated list of related resources to include. Supported:
candidate— full candidate profile,cv.text— parsed plain-text CV content,job— full job payload withurl_backofficefor UI deep-linking.
Updated application
Type: object- Type: integer
candidate _id requiredID of the candidate
- Type: integer
company _id requiredID of the company
- Type: integerFormat: int64
created _at requiredUnix timestamp (seconds)
- Type: integer
id requiredUnique identifier
- Type: boolean
is _disqualified requiredWhether the candidate is disqualified for this application
- Type: integer
job _id requiredID of the job
- Type: stringenum
status requiredApplication status. Changes via hire/reject/unreject actions.
active hired rejected
- Type: integerFormat: int64
updated _at requiredUnix timestamp (seconds)
- Type: string | null
ai _recommendation AI-generated recommendation label (e.g. Strong, Good, Weak)
- Type: integer | null
ai _score AI-generated candidate fit score (0-100)
- Type: integer | nullFormat: int64
ai _scoring _updated _at Unix timestamp (seconds) of the latest completed AI scoring result
- Type: object · ApplicationCandidate nullable
candidate Embedded candidate data (included when requested via
include=candidate)- Type: integer
company _id requiredID of the company this candidate belongs to
- Type: integerFormat: int64
created _at requiredUnix timestamp (seconds)
- Type: integer
id requiredUnique identifier
- Type: array object[] · ProfileAnswer[]
profile requiredCandidate profile field answers
- Type: integer
question _id requiredQuestion ID.
- Type: string
question _text requiredQuestion label.
value requiredAnswer value (string, array, or null).
- Type: integerFormat: int64
updated _at requiredUnix timestamp (seconds)
- Type: integer | null
days _since _last _message Number of whole days since the last message. Computed at request time. Null if no messages exist.
- Type: array string[] | null nullable
emails List of candidate email addresses
- Type: string | null
first _name Candidate's first name
- Type: string | null
ip IP address from which the candidate applied
- Type: integer | nullFormat: int64
last _message _at Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.
- Type: string | null
last _name Candidate's last name
- Type: object · IdName nullable
origin Where the candidate originally came from
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: array string[] | null nullable
phones List of candidate phone numbers
- Type: object · IdName nullable
source How the candidate was sourced
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object nullable
custom _fields Custom field values as key-value pairs
- Type: anything
property Name
- nullable
cv Application CV. Returns standard attachment metadata + download URL. When
?include=cv.textis requested, atextfield with parsed plain-text content is added.- Type: object · AttachmentFile
file required- Type: string
file _ext requiredFile extension.
- Type: string
file _type requiredFile type category.
- Type: boolean nullable
is _image requiredWhether the file is an image.
- Type: string
orig _file _name requiredOriginal file name.
- Type: string
readable _size requiredHuman-readable file size.
- Type: string
relative _time requiredHuman-readable time since upload (e.g.
"2 days ago"). - Type: stringFormat: uri nullable
url requiredAbsolute download URL (e.g.
https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit withAuthorization: Bearer <API_KEY>. - Type: stringFormat: uuid
uuid requiredUnique attachment identifier. Stable across API calls; use in referencing endpoints.
- Type: string nullable
text Parsed plain-text CV content. Included only when
?include=cv.textis requested ANDview=full(the default). Suppressed whenview=summaryeven 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.
- Type: integer | null
days _since _last _message Number of whole days since the last message. Computed at request time. Null if no messages exist.
- Type: integer | nullFormat: int64
hired _at Unix timestamp (seconds)
- Type: array object[] | null · JobHiringTeamMember[] nullable
hiring _team Team members assigned to this application's job
- Type: string
full _name requiredUser full name.
- Type: integer
id requiredUser ID.
- Type: string | null
email User email.
- Type: string | null
role Role on hiring team (e.g. hiring_manager, recruiter).
- Type: string | null
internal _job _id Company's internal job identifier
- Type: object · Job nullable
job Embedded job payload (included when requested via
include=job). Usejob.url_backofficeto deep-link UI widgets to the job's pipeline view in the recruiter app.- Type: integer
company _id requiredID of the company this job belongs to
- Type: integerFormat: int64
created _at requiredUnix timestamp (seconds)
- Type: integer
id requiredUnique identifier
- Type: boolean
is _remote requiredWhether this is a remote position
- Type: string
status requiredJob status: open, closed, draft, or archived
- Type: string
title requiredPublic job title shown to candidates
- Type: integerFormat: int64
updated _at requiredUnix timestamp (seconds)
- Type: string
url requiredPublic URL of the job posting page
- Type: array object[] · AiScoringCriterion[]
ai _scoring _criteria AI scoring criteria configured for this job, ordered by
positionASC. Returned as an empty array when none are configured. Present only whenview=full(default); omitted entirely whenview=summary.- Type: integer
id requiredUnique identifier of the criterion.
- Type: integer
position required0-based ordinal of the criterion in the job's list.
- Type: string
text requiredPrompt text describing what to evaluate.
- Type: integer
weight min:1max:10requiredRelative importance of this criterion in the total score (1–10).
- Type: string | null
title Optional short label for the criterion.
- Type: string | null
alias 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. - Type: object · IdName nullable
category Job category (e.g. Engineering, Marketing)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
department Department this job belongs to
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: string
description Job description (HTML). Present only when
view=full(default); omitted entirely whenview=summaryto keep list responses inside the agent context budget. UseGET /jobs/{id}orview=fullto retrieve. - Type: object · IdName nullable
education _level Required education level
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
employment _type Employment type (e.g. Full-time, Part-time, Contract)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
experience _level Required experience level (e.g. Entry, Mid, Senior)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: array object[] · JobHiringTeamMember[]
hiring _team Team members assigned to this job. Embedded via
include=hiring_team. Suppressed whenview=summaryeven if the include was requested.- Type: string
full _name requiredUser full name.
- Type: integer
id requiredUser ID.
- Type: string | null
email User email.
- Type: string | null
role Role on hiring team (e.g. hiring_manager, recruiter).
- Type: integer | null
hours _per _week _max Maximum hours per week
- Type: integer | null
hours _per _week _min Minimum hours per week
- Type: object
indeed _posting _data Indeed job board posting metadata. Present only when
view=full(default); omitted entirely whenview=summary.- Type: anything
property Name
- Type: string | null
internal _job _id Company's internal job identifier (e.g. requisition number)
- Type: string | null
internal _title Internal job title visible only to the hiring team
- Type: boolean
is _satellite Whether this job is a satellite (child) of a canonical job. Satellite jobs share the candidate pipeline of their parent.
- Type: object · JobLocation nullable
location Job location details
- Type: string
city City.
- Type: string
country Country.
- Type: string
full _address Full formatted address.
- Type: string
postal _code Postal code.
- Type: string
state State or region.
- Type: string
street _address Street address.
- Type: anything
property Name
- Type: integer | null
parent _job _id ID of the canonical (parent) job. Null for canonical jobs. Recruiting operations should target the canonical job.
- Type: array object[] | null nullable
pipeline _stages Pipeline stages for this job's workflow. Only included when
include=pipeline_stagesis specified. Suppressed whenview=summaryeven if the include was requested.- Type: integer
id Integer numbers.
- Type: string
name
- Type: string | nullenum
resume _field _status Whether resume upload is required, optional, or hidden on the application form
required optional hidden
- Type: string | null
salary _currency Salary currency code (e.g. USD, EUR)
- Type: number | null
salary _max Maximum salary
- Type: number | null
salary _min Minimum salary
- Type: string | nullenum
salary _period Salary period
annually monthly daily hourly
- Type: string
url _backoffice 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. - Type: object · IdName nullable
workflow Hiring workflow (pipeline) assigned to this job. Embedded via
include=workflow. Suppressed whenview=summaryeven if the include was requested.- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: integer | null
workflow _id ID of the hiring workflow (pipeline) assigned to this job
- Type: string | null
job _alias Short alias of the job, usable in URLs (e.g. 79SZHfT)
- Type: integer | nullFormat: int64
last _message _at 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.
- Type: integer | nullFormat: int64
rejected _at Unix timestamp (seconds)
- Type: array object[] | null · IdName[] nullable
rejection _reason Reasons for rejection. Null if not rejected.
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
stage Current pipeline stage of the application
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: stringFormat: uri
url _backoffice 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
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Unauthorized
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Forbidden
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Not found
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Content-Type must be application/json
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Too many requests
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
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
}Updated application
Reject application
Rejects an application with optional rejection reason and note context. Standard endpoint for rejection workflows and reporting consistency.
- Type: integer
id requiredResource ID (numeric).
- Type: string
include Comma-separated list of related resources to include. Supported:
candidate— full candidate profile,cv.text— parsed plain-text CV content,job— full job payload withurl_backofficefor UI deep-linking.
- Type: integer
rejection _reason _id Rejection reason ID from GET /taxonomy/rejection-reasons.
- Type: boolean
suppress _notification Set to true to skip sending the rejection email to the candidate.
Updated application
Type: object- Type: integer
candidate _id requiredID of the candidate
- Type: integer
company _id requiredID of the company
- Type: integerFormat: int64
created _at requiredUnix timestamp (seconds)
- Type: integer
id requiredUnique identifier
- Type: boolean
is _disqualified requiredWhether the candidate is disqualified for this application
- Type: integer
job _id requiredID of the job
- Type: stringenum
status requiredApplication status. Changes via hire/reject/unreject actions.
active hired rejected
- Type: integerFormat: int64
updated _at requiredUnix timestamp (seconds)
- Type: string | null
ai _recommendation AI-generated recommendation label (e.g. Strong, Good, Weak)
- Type: integer | null
ai _score AI-generated candidate fit score (0-100)
- Type: integer | nullFormat: int64
ai _scoring _updated _at Unix timestamp (seconds) of the latest completed AI scoring result
- Type: object · ApplicationCandidate nullable
candidate Embedded candidate data (included when requested via
include=candidate)- Type: integer
company _id requiredID of the company this candidate belongs to
- Type: integerFormat: int64
created _at requiredUnix timestamp (seconds)
- Type: integer
id requiredUnique identifier
- Type: array object[] · ProfileAnswer[]
profile requiredCandidate profile field answers
- Type: integer
question _id requiredQuestion ID.
- Type: string
question _text requiredQuestion label.
value requiredAnswer value (string, array, or null).
- Type: integerFormat: int64
updated _at requiredUnix timestamp (seconds)
- Type: integer | null
days _since _last _message Number of whole days since the last message. Computed at request time. Null if no messages exist.
- Type: array string[] | null nullable
emails List of candidate email addresses
- Type: string | null
first _name Candidate's first name
- Type: string | null
ip IP address from which the candidate applied
- Type: integer | nullFormat: int64
last _message _at Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.
- Type: string | null
last _name Candidate's last name
- Type: object · IdName nullable
origin Where the candidate originally came from
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: array string[] | null nullable
phones List of candidate phone numbers
- Type: object · IdName nullable
source How the candidate was sourced
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object nullable
custom _fields Custom field values as key-value pairs
- Type: anything
property Name
- nullable
cv Application CV. Returns standard attachment metadata + download URL. When
?include=cv.textis requested, atextfield with parsed plain-text content is added.- Type: object · AttachmentFile
file required- Type: string
file _ext requiredFile extension.
- Type: string
file _type requiredFile type category.
- Type: boolean nullable
is _image requiredWhether the file is an image.
- Type: string
orig _file _name requiredOriginal file name.
- Type: string
readable _size requiredHuman-readable file size.
- Type: string
relative _time requiredHuman-readable time since upload (e.g.
"2 days ago"). - Type: stringFormat: uri nullable
url requiredAbsolute download URL (e.g.
https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit withAuthorization: Bearer <API_KEY>. - Type: stringFormat: uuid
uuid requiredUnique attachment identifier. Stable across API calls; use in referencing endpoints.
- Type: string nullable
text Parsed plain-text CV content. Included only when
?include=cv.textis requested ANDview=full(the default). Suppressed whenview=summaryeven 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.
- Type: integer | null
days _since _last _message Number of whole days since the last message. Computed at request time. Null if no messages exist.
- Type: integer | nullFormat: int64
hired _at Unix timestamp (seconds)
- Type: array object[] | null · JobHiringTeamMember[] nullable
hiring _team Team members assigned to this application's job
- Type: string
full _name requiredUser full name.
- Type: integer
id requiredUser ID.
- Type: string | null
email User email.
- Type: string | null
role Role on hiring team (e.g. hiring_manager, recruiter).
- Type: string | null
internal _job _id Company's internal job identifier
- Type: object · Job nullable
job Embedded job payload (included when requested via
include=job). Usejob.url_backofficeto deep-link UI widgets to the job's pipeline view in the recruiter app.- Type: integer
company _id requiredID of the company this job belongs to
- Type: integerFormat: int64
created _at requiredUnix timestamp (seconds)
- Type: integer
id requiredUnique identifier
- Type: boolean
is _remote requiredWhether this is a remote position
- Type: string
status requiredJob status: open, closed, draft, or archived
- Type: string
title requiredPublic job title shown to candidates
- Type: integerFormat: int64
updated _at requiredUnix timestamp (seconds)
- Type: string
url requiredPublic URL of the job posting page
- Type: array object[] · AiScoringCriterion[]
ai _scoring _criteria AI scoring criteria configured for this job, ordered by
positionASC. Returned as an empty array when none are configured. Present only whenview=full(default); omitted entirely whenview=summary.- Type: integer
id requiredUnique identifier of the criterion.
- Type: integer
position required0-based ordinal of the criterion in the job's list.
- Type: string
text requiredPrompt text describing what to evaluate.
- Type: integer
weight min:1max:10requiredRelative importance of this criterion in the total score (1–10).
- Type: string | null
title Optional short label for the criterion.
- Type: string | null
alias 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. - Type: object · IdName nullable
category Job category (e.g. Engineering, Marketing)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
department Department this job belongs to
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: string
description Job description (HTML). Present only when
view=full(default); omitted entirely whenview=summaryto keep list responses inside the agent context budget. UseGET /jobs/{id}orview=fullto retrieve. - Type: object · IdName nullable
education _level Required education level
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
employment _type Employment type (e.g. Full-time, Part-time, Contract)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
experience _level Required experience level (e.g. Entry, Mid, Senior)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: array object[] · JobHiringTeamMember[]
hiring _team Team members assigned to this job. Embedded via
include=hiring_team. Suppressed whenview=summaryeven if the include was requested.- Type: string
full _name requiredUser full name.
- Type: integer
id requiredUser ID.
- Type: string | null
email User email.
- Type: string | null
role Role on hiring team (e.g. hiring_manager, recruiter).
- Type: integer | null
hours _per _week _max Maximum hours per week
- Type: integer | null
hours _per _week _min Minimum hours per week
- Type: object
indeed _posting _data Indeed job board posting metadata. Present only when
view=full(default); omitted entirely whenview=summary.- Type: anything
property Name
- Type: string | null
internal _job _id Company's internal job identifier (e.g. requisition number)
- Type: string | null
internal _title Internal job title visible only to the hiring team
- Type: boolean
is _satellite Whether this job is a satellite (child) of a canonical job. Satellite jobs share the candidate pipeline of their parent.
- Type: object · JobLocation nullable
location Job location details
- Type: string
city City.
- Type: string
country Country.
- Type: string
full _address Full formatted address.
- Type: string
postal _code Postal code.
- Type: string
state State or region.
- Type: string
street _address Street address.
- Type: anything
property Name
- Type: integer | null
parent _job _id ID of the canonical (parent) job. Null for canonical jobs. Recruiting operations should target the canonical job.
- Type: array object[] | null nullable
pipeline _stages Pipeline stages for this job's workflow. Only included when
include=pipeline_stagesis specified. Suppressed whenview=summaryeven if the include was requested.- Type: integer
id Integer numbers.
- Type: string
name
- Type: string | nullenum
resume _field _status Whether resume upload is required, optional, or hidden on the application form
required optional hidden
- Type: string | null
salary _currency Salary currency code (e.g. USD, EUR)
- Type: number | null
salary _max Maximum salary
- Type: number | null
salary _min Minimum salary
- Type: string | nullenum
salary _period Salary period
annually monthly daily hourly
- Type: string
url _backoffice 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. - Type: object · IdName nullable
workflow Hiring workflow (pipeline) assigned to this job. Embedded via
include=workflow. Suppressed whenview=summaryeven if the include was requested.- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: integer | null
workflow _id ID of the hiring workflow (pipeline) assigned to this job
- Type: string | null
job _alias Short alias of the job, usable in URLs (e.g. 79SZHfT)
- Type: integer | nullFormat: int64
last _message _at 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.
- Type: integer | nullFormat: int64
rejected _at Unix timestamp (seconds)
- Type: array object[] | null · IdName[] nullable
rejection _reason Reasons for rejection. Null if not rejected.
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
stage Current pipeline stage of the application
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: stringFormat: uri
url _backoffice 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
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredValidation error details object.
- Type: string
name requiredAlways "Validation Error" for validation failures
- Type: object
validation _errors requiredField-level validation errors (field name to error message)
- Type: string
property Name
- Type: integer
code Integer numbers.
- Type: string
message - Type: integer
status Integer numbers.
Unauthorized
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Forbidden
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Not found
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Content-Type must be application/json
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Too many requests
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
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
}Updated application
Advance application to next stage
Advances the application to the next stage according to workflow order.
- Type: integer
id requiredResource ID (numeric).
- Type: string
include Comma-separated list of related resources to include. Supported:
candidate— full candidate profile,cv.text— parsed plain-text CV content,job— full job payload withurl_backofficefor UI deep-linking.
Updated application
Type: object- Type: integer
candidate _id requiredID of the candidate
- Type: integer
company _id requiredID of the company
- Type: integerFormat: int64
created _at requiredUnix timestamp (seconds)
- Type: integer
id requiredUnique identifier
- Type: boolean
is _disqualified requiredWhether the candidate is disqualified for this application
- Type: integer
job _id requiredID of the job
- Type: stringenum
status requiredApplication status. Changes via hire/reject/unreject actions.
active hired rejected
- Type: integerFormat: int64
updated _at requiredUnix timestamp (seconds)
- Type: string | null
ai _recommendation AI-generated recommendation label (e.g. Strong, Good, Weak)
- Type: integer | null
ai _score AI-generated candidate fit score (0-100)
- Type: integer | nullFormat: int64
ai _scoring _updated _at Unix timestamp (seconds) of the latest completed AI scoring result
- Type: object · ApplicationCandidate nullable
candidate Embedded candidate data (included when requested via
include=candidate)- Type: integer
company _id requiredID of the company this candidate belongs to
- Type: integerFormat: int64
created _at requiredUnix timestamp (seconds)
- Type: integer
id requiredUnique identifier
- Type: array object[] · ProfileAnswer[]
profile requiredCandidate profile field answers
- Type: integer
question _id requiredQuestion ID.
- Type: string
question _text requiredQuestion label.
value requiredAnswer value (string, array, or null).
- Type: integerFormat: int64
updated _at requiredUnix timestamp (seconds)
- Type: integer | null
days _since _last _message Number of whole days since the last message. Computed at request time. Null if no messages exist.
- Type: array string[] | null nullable
emails List of candidate email addresses
- Type: string | null
first _name Candidate's first name
- Type: string | null
ip IP address from which the candidate applied
- Type: integer | nullFormat: int64
last _message _at Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.
- Type: string | null
last _name Candidate's last name
- Type: object · IdName nullable
origin Where the candidate originally came from
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: array string[] | null nullable
phones List of candidate phone numbers
- Type: object · IdName nullable
source How the candidate was sourced
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object nullable
custom _fields Custom field values as key-value pairs
- Type: anything
property Name
- nullable
cv Application CV. Returns standard attachment metadata + download URL. When
?include=cv.textis requested, atextfield with parsed plain-text content is added.- Type: object · AttachmentFile
file required- Type: string
file _ext requiredFile extension.
- Type: string
file _type requiredFile type category.
- Type: boolean nullable
is _image requiredWhether the file is an image.
- Type: string
orig _file _name requiredOriginal file name.
- Type: string
readable _size requiredHuman-readable file size.
- Type: string
relative _time requiredHuman-readable time since upload (e.g.
"2 days ago"). - Type: stringFormat: uri nullable
url requiredAbsolute download URL (e.g.
https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit withAuthorization: Bearer <API_KEY>. - Type: stringFormat: uuid
uuid requiredUnique attachment identifier. Stable across API calls; use in referencing endpoints.
- Type: string nullable
text Parsed plain-text CV content. Included only when
?include=cv.textis requested ANDview=full(the default). Suppressed whenview=summaryeven 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.
- Type: integer | null
days _since _last _message Number of whole days since the last message. Computed at request time. Null if no messages exist.
- Type: integer | nullFormat: int64
hired _at Unix timestamp (seconds)
- Type: array object[] | null · JobHiringTeamMember[] nullable
hiring _team Team members assigned to this application's job
- Type: string
full _name requiredUser full name.
- Type: integer
id requiredUser ID.
- Type: string | null
email User email.
- Type: string | null
role Role on hiring team (e.g. hiring_manager, recruiter).
- Type: string | null
internal _job _id Company's internal job identifier
- Type: object · Job nullable
job Embedded job payload (included when requested via
include=job). Usejob.url_backofficeto deep-link UI widgets to the job's pipeline view in the recruiter app.- Type: integer
company _id requiredID of the company this job belongs to
- Type: integerFormat: int64
created _at requiredUnix timestamp (seconds)
- Type: integer
id requiredUnique identifier
- Type: boolean
is _remote requiredWhether this is a remote position
- Type: string
status requiredJob status: open, closed, draft, or archived
- Type: string
title requiredPublic job title shown to candidates
- Type: integerFormat: int64
updated _at requiredUnix timestamp (seconds)
- Type: string
url requiredPublic URL of the job posting page
- Type: array object[] · AiScoringCriterion[]
ai _scoring _criteria AI scoring criteria configured for this job, ordered by
positionASC. Returned as an empty array when none are configured. Present only whenview=full(default); omitted entirely whenview=summary.- Type: integer
id requiredUnique identifier of the criterion.
- Type: integer
position required0-based ordinal of the criterion in the job's list.
- Type: string
text requiredPrompt text describing what to evaluate.
- Type: integer
weight min:1max:10requiredRelative importance of this criterion in the total score (1–10).
- Type: string | null
title Optional short label for the criterion.
- Type: string | null
alias 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. - Type: object · IdName nullable
category Job category (e.g. Engineering, Marketing)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
department Department this job belongs to
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: string
description Job description (HTML). Present only when
view=full(default); omitted entirely whenview=summaryto keep list responses inside the agent context budget. UseGET /jobs/{id}orview=fullto retrieve. - Type: object · IdName nullable
education _level Required education level
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
employment _type Employment type (e.g. Full-time, Part-time, Contract)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
experience _level Required experience level (e.g. Entry, Mid, Senior)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: array object[] · JobHiringTeamMember[]
hiring _team Team members assigned to this job. Embedded via
include=hiring_team. Suppressed whenview=summaryeven if the include was requested.- Type: string
full _name requiredUser full name.
- Type: integer
id requiredUser ID.
- Type: string | null
email User email.
- Type: string | null
role Role on hiring team (e.g. hiring_manager, recruiter).
- Type: integer | null
hours _per _week _max Maximum hours per week
- Type: integer | null
hours _per _week _min Minimum hours per week
- Type: object
indeed _posting _data Indeed job board posting metadata. Present only when
view=full(default); omitted entirely whenview=summary.- Type: anything
property Name
- Type: string | null
internal _job _id Company's internal job identifier (e.g. requisition number)
- Type: string | null
internal _title Internal job title visible only to the hiring team
- Type: boolean
is _satellite Whether this job is a satellite (child) of a canonical job. Satellite jobs share the candidate pipeline of their parent.
- Type: object · JobLocation nullable
location Job location details
- Type: string
city City.
- Type: string
country Country.
- Type: string
full _address Full formatted address.
- Type: string
postal _code Postal code.
- Type: string
state State or region.
- Type: string
street _address Street address.
- Type: anything
property Name
- Type: integer | null
parent _job _id ID of the canonical (parent) job. Null for canonical jobs. Recruiting operations should target the canonical job.
- Type: array object[] | null nullable
pipeline _stages Pipeline stages for this job's workflow. Only included when
include=pipeline_stagesis specified. Suppressed whenview=summaryeven if the include was requested.- Type: integer
id Integer numbers.
- Type: string
name
- Type: string | nullenum
resume _field _status Whether resume upload is required, optional, or hidden on the application form
required optional hidden
- Type: string | null
salary _currency Salary currency code (e.g. USD, EUR)
- Type: number | null
salary _max Maximum salary
- Type: number | null
salary _min Minimum salary
- Type: string | nullenum
salary _period Salary period
annually monthly daily hourly
- Type: string
url _backoffice 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. - Type: object · IdName nullable
workflow Hiring workflow (pipeline) assigned to this job. Embedded via
include=workflow. Suppressed whenview=summaryeven if the include was requested.- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: integer | null
workflow _id ID of the hiring workflow (pipeline) assigned to this job
- Type: string | null
job _alias Short alias of the job, usable in URLs (e.g. 79SZHfT)
- Type: integer | nullFormat: int64
last _message _at 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.
- Type: integer | nullFormat: int64
rejected _at Unix timestamp (seconds)
- Type: array object[] | null · IdName[] nullable
rejection _reason Reasons for rejection. Null if not rejected.
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
stage Current pipeline stage of the application
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: stringFormat: uri
url _backoffice 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
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Unauthorized
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Forbidden
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Not found
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Content-Type must be application/json
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Too many requests
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
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
}Updated application
Transfer application to another job
Transfers an application to another job with optional target stage.
- Type: integer
id requiredResource ID (numeric).
- Type: string
include Comma-separated list of related resources to include. Supported:
candidate— full candidate profile,cv.text— parsed plain-text CV content,job— full job payload withurl_backofficefor UI deep-linking.
- Type: integer
job _id requiredTarget job ID to transfer the application to.
- Type: integer
stage _id Pipeline stage ID on the target job. If omitted, defaults to the first stage.
Updated application
Type: object- Type: integer
candidate _id requiredID of the candidate
- Type: integer
company _id requiredID of the company
- Type: integerFormat: int64
created _at requiredUnix timestamp (seconds)
- Type: integer
id requiredUnique identifier
- Type: boolean
is _disqualified requiredWhether the candidate is disqualified for this application
- Type: integer
job _id requiredID of the job
- Type: stringenum
status requiredApplication status. Changes via hire/reject/unreject actions.
active hired rejected
- Type: integerFormat: int64
updated _at requiredUnix timestamp (seconds)
- Type: string | null
ai _recommendation AI-generated recommendation label (e.g. Strong, Good, Weak)
- Type: integer | null
ai _score AI-generated candidate fit score (0-100)
- Type: integer | nullFormat: int64
ai _scoring _updated _at Unix timestamp (seconds) of the latest completed AI scoring result
- Type: object · ApplicationCandidate nullable
candidate Embedded candidate data (included when requested via
include=candidate)- Type: integer
company _id requiredID of the company this candidate belongs to
- Type: integerFormat: int64
created _at requiredUnix timestamp (seconds)
- Type: integer
id requiredUnique identifier
- Type: array object[] · ProfileAnswer[]
profile requiredCandidate profile field answers
- Type: integer
question _id requiredQuestion ID.
- Type: string
question _text requiredQuestion label.
value requiredAnswer value (string, array, or null).
- Type: integerFormat: int64
updated _at requiredUnix timestamp (seconds)
- Type: integer | null
days _since _last _message Number of whole days since the last message. Computed at request time. Null if no messages exist.
- Type: array string[] | null nullable
emails List of candidate email addresses
- Type: string | null
first _name Candidate's first name
- Type: string | null
ip IP address from which the candidate applied
- Type: integer | nullFormat: int64
last _message _at Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist.
- Type: string | null
last _name Candidate's last name
- Type: object · IdName nullable
origin Where the candidate originally came from
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: array string[] | null nullable
phones List of candidate phone numbers
- Type: object · IdName nullable
source How the candidate was sourced
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object nullable
custom _fields Custom field values as key-value pairs
- Type: anything
property Name
- nullable
cv Application CV. Returns standard attachment metadata + download URL. When
?include=cv.textis requested, atextfield with parsed plain-text content is added.- Type: object · AttachmentFile
file required- Type: string
file _ext requiredFile extension.
- Type: string
file _type requiredFile type category.
- Type: boolean nullable
is _image requiredWhether the file is an image.
- Type: string
orig _file _name requiredOriginal file name.
- Type: string
readable _size requiredHuman-readable file size.
- Type: string
relative _time requiredHuman-readable time since upload (e.g.
"2 days ago"). - Type: stringFormat: uri nullable
url requiredAbsolute download URL (e.g.
https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}). Hit withAuthorization: Bearer <API_KEY>. - Type: stringFormat: uuid
uuid requiredUnique attachment identifier. Stable across API calls; use in referencing endpoints.
- Type: string nullable
text Parsed plain-text CV content. Included only when
?include=cv.textis requested ANDview=full(the default). Suppressed whenview=summaryeven 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.
- Type: integer | null
days _since _last _message Number of whole days since the last message. Computed at request time. Null if no messages exist.
- Type: integer | nullFormat: int64
hired _at Unix timestamp (seconds)
- Type: array object[] | null · JobHiringTeamMember[] nullable
hiring _team Team members assigned to this application's job
- Type: string
full _name requiredUser full name.
- Type: integer
id requiredUser ID.
- Type: string | null
email User email.
- Type: string | null
role Role on hiring team (e.g. hiring_manager, recruiter).
- Type: string | null
internal _job _id Company's internal job identifier
- Type: object · Job nullable
job Embedded job payload (included when requested via
include=job). Usejob.url_backofficeto deep-link UI widgets to the job's pipeline view in the recruiter app.- Type: integer
company _id requiredID of the company this job belongs to
- Type: integerFormat: int64
created _at requiredUnix timestamp (seconds)
- Type: integer
id requiredUnique identifier
- Type: boolean
is _remote requiredWhether this is a remote position
- Type: string
status requiredJob status: open, closed, draft, or archived
- Type: string
title requiredPublic job title shown to candidates
- Type: integerFormat: int64
updated _at requiredUnix timestamp (seconds)
- Type: string
url requiredPublic URL of the job posting page
- Type: array object[] · AiScoringCriterion[]
ai _scoring _criteria AI scoring criteria configured for this job, ordered by
positionASC. Returned as an empty array when none are configured. Present only whenview=full(default); omitted entirely whenview=summary.- Type: integer
id requiredUnique identifier of the criterion.
- Type: integer
position required0-based ordinal of the criterion in the job's list.
- Type: string
text requiredPrompt text describing what to evaluate.
- Type: integer
weight min:1max:10requiredRelative importance of this criterion in the total score (1–10).
- Type: string | null
title Optional short label for the criterion.
- Type: string | null
alias 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. - Type: object · IdName nullable
category Job category (e.g. Engineering, Marketing)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
department Department this job belongs to
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: string
description Job description (HTML). Present only when
view=full(default); omitted entirely whenview=summaryto keep list responses inside the agent context budget. UseGET /jobs/{id}orview=fullto retrieve. - Type: object · IdName nullable
education _level Required education level
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
employment _type Employment type (e.g. Full-time, Part-time, Contract)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
experience _level Required experience level (e.g. Entry, Mid, Senior)
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: array object[] · JobHiringTeamMember[]
hiring _team Team members assigned to this job. Embedded via
include=hiring_team. Suppressed whenview=summaryeven if the include was requested.- Type: string
full _name requiredUser full name.
- Type: integer
id requiredUser ID.
- Type: string | null
email User email.
- Type: string | null
role Role on hiring team (e.g. hiring_manager, recruiter).
- Type: integer | null
hours _per _week _max Maximum hours per week
- Type: integer | null
hours _per _week _min Minimum hours per week
- Type: object
indeed _posting _data Indeed job board posting metadata. Present only when
view=full(default); omitted entirely whenview=summary.- Type: anything
property Name
- Type: string | null
internal _job _id Company's internal job identifier (e.g. requisition number)
- Type: string | null
internal _title Internal job title visible only to the hiring team
- Type: boolean
is _satellite Whether this job is a satellite (child) of a canonical job. Satellite jobs share the candidate pipeline of their parent.
- Type: object · JobLocation nullable
location Job location details
- Type: string
city City.
- Type: string
country Country.
- Type: string
full _address Full formatted address.
- Type: string
postal _code Postal code.
- Type: string
state State or region.
- Type: string
street _address Street address.
- Type: anything
property Name
- Type: integer | null
parent _job _id ID of the canonical (parent) job. Null for canonical jobs. Recruiting operations should target the canonical job.
- Type: array object[] | null nullable
pipeline _stages Pipeline stages for this job's workflow. Only included when
include=pipeline_stagesis specified. Suppressed whenview=summaryeven if the include was requested.- Type: integer
id Integer numbers.
- Type: string
name
- Type: string | nullenum
resume _field _status Whether resume upload is required, optional, or hidden on the application form
required optional hidden
- Type: string | null
salary _currency Salary currency code (e.g. USD, EUR)
- Type: number | null
salary _max Maximum salary
- Type: number | null
salary _min Minimum salary
- Type: string | nullenum
salary _period Salary period
annually monthly daily hourly
- Type: string
url _backoffice 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. - Type: object · IdName nullable
workflow Hiring workflow (pipeline) assigned to this job. Embedded via
include=workflow. Suppressed whenview=summaryeven if the include was requested.- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: integer | null
workflow _id ID of the hiring workflow (pipeline) assigned to this job
- Type: string | null
job _alias Short alias of the job, usable in URLs (e.g. 79SZHfT)
- Type: integer | nullFormat: int64
last _message _at 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.
- Type: integer | nullFormat: int64
rejected _at Unix timestamp (seconds)
- Type: array object[] | null · IdName[] nullable
rejection _reason Reasons for rejection. Null if not rejected.
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: object · IdName nullable
stage Current pipeline stage of the application
- Type: integer
id requiredUnique identifier.
- Type: string
name requiredDisplay name.
- Type: stringFormat: uri
url _backoffice 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
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredValidation error details object.
- Type: string
name requiredAlways "Validation Error" for validation failures
- Type: object
validation _errors requiredField-level validation errors (field name to error message)
- Type: string
property Name
- Type: integer
code Integer numbers.
- Type: string
message - Type: integer
status Integer numbers.
Unauthorized
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Forbidden
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Not found
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Content-Type must be application/json
Type: integerX - Rate Limit - Limit Request limit for the current rate-limit window. Returned for unapproved API keys.
Type: integerX - Rate Limit - Remaining Remaining requests in the current rate-limit window. Returned for unapproved API keys.
Type: integerFormat: int64X - Rate Limit - Reset Unix timestamp when the current rate-limit window resets. Returned for unapproved API keys.
Type: object- Type: object
error requiredError details object.
- Type: integer
code requiredApplication error code (0 for generic errors)
- Type: string
message requiredDetailed error message
- Type: string
name requiredHuman-readable error type (e.g. "Not Found", "Bad Request", "Forbidden")
- Type: integer
status requiredHTTP status code
Too many requests
X - Rate Limit - Limit