100Hires · Schema
Application
RecruitingArtificial IntelligenceHuman ResourcesSoftware-as-a-ServiceSmall Business
Properties
| Name | Type | Description |
|---|---|---|
| id | integer | Unique identifier |
| candidate_id | integer | ID of the candidate |
| job_id | integer | ID of the job |
| job_alias | stringnull | Short alias of the job, usable in URLs (e.g. 79SZHfT) |
| internal_job_id | stringnull | Company's internal job identifier |
| company_id | integer | ID of the company |
| url_backoffice | string | Absolute backoffice URL of the application's view (candidate page in this job) in the 100Hires recruiter app. Use to render deep-links in agent UIs. |
| stage | object | Current pipeline stage of the application |
| status | string | Application status. Changes via hire/reject/unreject actions. |
| is_disqualified | boolean | Whether the candidate is disqualified for this application |
| cv | object | Resume/CV data attached to this application |
| rejected_at | integernull | Unix timestamp (seconds) |
| rejection_reason | object | Reasons for rejection. Null if not rejected. |
| hired_at | integernull | Unix timestamp (seconds) |
| hiring_team | object | Team members assigned to this application's job |
| custom_fields | object | Custom field values as key-value pairs |
| ai_score | integernull | AI-generated candidate fit score (0-100) |
| ai_recommendation | stringnull | AI-generated recommendation label (e.g. Strong, Good, Weak) |
| ai_scoring_updated_at | integernull | Unix timestamp (seconds) of the latest completed AI scoring result |
| created_at | integer | Unix timestamp (seconds) |
| updated_at | integer | Unix timestamp (seconds) |
| last_message_at | integernull | Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from the candidate in this application's company. Null if no messages exist. |
| days_since_last_message | integernull | Number of whole days since the last message. Computed at request time. Null if no messages exist. |
| candidate | object | Embedded candidate data (included when requested via `include=candidate`) |
| job | object | Embedded job payload (included when requested via `include=job`). Use `job.url_backoffice` to deep-link UI widgets to the job's pipeline view in the recruiter app. |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/100hires-com/json-schema/100hires-com-application-schema.json",
"title": "Application",
"x-generated": "2026-10-31",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/100hires-com-openapi.json#/components/schemas/Application",
"type": "object",
"required": [
"id",
"candidate_id",
"job_id",
"company_id",
"status",
"is_disqualified",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "integer",
"description": "Unique identifier"
},
"candidate_id": {
"type": "integer",
"description": "ID of the candidate"
},
"job_id": {
"type": "integer",
"description": "ID of the job"
},
"job_alias": {
"type": [
"string",
"null"
],
"description": "Short alias of the job, usable in URLs (e.g. 79SZHfT)"
},
"internal_job_id": {
"type": [
"string",
"null"
],
"description": "Company's internal job identifier"
},
"company_id": {
"type": "integer",
"description": "ID of the company"
},
"url_backoffice": {
"type": "string",
"format": "uri",
"description": "Absolute backoffice URL of the application's view (candidate page in this job) in the 100Hires recruiter app. Use to render deep-links in agent UIs."
},
"stage": {
"oneOf": [
{
"$ref": "#/$defs/IdName"
},
{
"type": "null"
}
],
"description": "Current pipeline stage of the application"
},
"status": {
"type": "string",
"enum": [
"active",
"hired",
"rejected"
],
"description": "Application status. Changes via hire/reject/unreject actions."
},
"is_disqualified": {
"type": "boolean",
"description": "Whether the candidate is disqualified for this application"
},
"cv": {
"oneOf": [
{
"$ref": "#/$defs/ApplicationCvData"
},
{
"type": "null"
}
],
"description": "Resume/CV data attached to this application"
},
"rejected_at": {
"type": [
"integer",
"null"
],
"format": "int64",
"description": "Unix timestamp (seconds)"
},
"rejection_reason": {
"oneOf": [
{
"type": "array",
"items": {
"$ref": "#/$defs/IdName"
}
},
{
"type": "null"
}
],
"description": "Reasons for rejection. Null if not rejected."
},
"hired_at": {
"type": [
"integer",
"null"
],
"format": "int64",
"description": "Unix timestamp (seconds)"
},
"hiring_team": {
"oneOf": [
{
"type": "array",
"items": {
"$ref": "#/$defs/JobHiringTeamMember"
}
},
{
"type": "null"
}
],
"description": "Team members assigned to this application's job"
},
"custom_fields": {
"oneOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"description": "Custom field values as key-value pairs"
},
"ai_score": {
"type": [
"integer",
"null"
],
"description": "AI-generated candidate fit score (0-100)"
},
"ai_recommendation": {
"type": [
"string",
"null"
],
"description": "AI-generated recommendation label (e.g. Strong, Good, Weak)"
},
"ai_scoring_updated_at": {
"type": [
"integer",
"null"
],
"format": "int64",
"description": "Unix timestamp (seconds) of the latest completed AI scoring result"
},
"created_at": {
"type": "integer",
"format": "int64",
"description": "Unix timestamp (seconds)"
},
"updated_at": {
"type": "integer",
"format": "int64",
"description": "Unix timestamp (seconds)"
},
"last_message_at": {
"type": [
"integer",
"null"
],
"format": "int64",
"description": "Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from the candidate in this application's company. Null if no messages exist."
},
"days_since_last_message": {
"type": [
"integer",
"null"
],
"description": "Number of whole days since the last message. Computed at request time. Null if no messages exist."
},
"candidate": {
"oneOf": [
{
"$ref": "#/$defs/ApplicationCandidate"
},
{
"type": "null"
}
],
"description": "Embedded candidate data (included when requested via `include=candidate`)"
},
"job": {
"oneOf": [
{
"$ref": "#/$defs/Job"
},
{
"type": "null"
}
],
"description": "Embedded job payload (included when requested via `include=job`). Use `job.url_backoffice` to deep-link UI widgets to the job's pipeline view in the recruiter app."
}
},
"$defs": {
"AiScoringCriterion": {
"type": "object",
"required": [
"id",
"text",
"weight",
"position"
],
"properties": {
"id": {
"type": "integer",
"description": "Unique identifier of the criterion."
},
"title": {
"type": [
"string",
"null"
],
"description": "Optional short label for the criterion."
},
"text": {
"type": "string",
"description": "Prompt text describing what to evaluate."
},
"weight": {
"type": "integer",
"minimum": 1,
"maximum": 10,
"description": "Relative importance of this criterion in the total score (1–10)."
},
"position": {
"type": "integer",
"description": "0-based ordinal of the criterion in the job's list."
}
}
},
"ApiAttachment": {
"type": "object",
"description": "Unified attachment shape returned by apiV2 endpoints (resumes, candidate files, application attachments, message attachments, call recordings, voicemail audio in nurture campaigns).\n\n`url` is an absolute URL served by the API host (`https://api.100hires.com/v2/attachments/{category}/{uuid}/{file_name}`) and serves the raw file bytes with `Authorization: Bearer <API_KEY>`. The response on `url` sets `Content-Disposition: attachment; filename=\"...\"` with the human-readable filename.\n\nUse `uuid` to reference the attachment in other endpoints (e.g. nurture voicemail step).\n",
"required": [
"uuid",
"url",
"relative_time",
"file"
],
"properties": {
"uuid": {
"type": "string",
"format": "uuid",
"description": "Unique attachment identifier. Stable across API calls; use in referencing endpoints."
},
"url": {
"type": [
"string",
"null"
],
"format": "uri",
"description": "Absolute download URL (e.g. `https://api.100hires.com/v2/attachments/application/{uuid}/{file_name}`). Hit with `Authorization: Bearer <API_KEY>`."
},
"relative_time": {
"type": "string",
"description": "Human-readable time since upload (e.g. `\"2 days ago\"`)."
},
"file": {
"$ref": "#/$defs/AttachmentFile"
}
}
},
"ApplicationCandidate": {
"type": "object",
"required": [
"id",
"company_id",
"profile",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "integer",
"description": "Unique identifier"
},
"company_id": {
"type": "integer",
"description": "ID of the company this candidate belongs to"
},
"first_name": {
"type": [
"string",
"null"
],
"description": "Candidate's first name"
},
"last_name": {
"type": [
"string",
"null"
],
"description": "Candidate's last name"
},
"emails": {
"oneOf": [
{
"type": "array",
"items": {
"type": "string",
"format": "email"
}
},
{
"type": "null"
}
],
"description": "List of candidate email addresses"
},
"phones": {
"oneOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "List of candidate phone numbers"
},
"source": {
"oneOf": [
{
"$ref": "#/$defs/IdName"
},
{
"type": "null"
}
],
"description": "How the candidate was sourced"
},
"origin": {
"oneOf": [
{
"$ref": "#/$defs/IdName"
},
{
"type": "null"
}
],
"description": "Where the candidate originally came from"
},
"profile": {
"type": "array",
"items": {
"$ref": "#/$defs/ProfileAnswer"
},
"description": "Candidate profile field answers"
},
"created_at": {
"type": "integer",
"format": "int64",
"description": "Unix timestamp (seconds)"
},
"updated_at": {
"type": "integer",
"format": "int64",
"description": "Unix timestamp (seconds)"
},
"last_message_at": {
"type": [
"integer",
"null"
],
"format": "int64",
"description": "Unix timestamp (seconds) of the most recent message (email or SMS) sent to or received from this candidate. Null if no messages exist."
},
"days_since_last_message": {
"type": [
"integer",
"null"
],
"description": "Number of whole days since the last message. Computed at request time. Null if no messages exist."
},
"ip": {
"type": [
"string",
"null"
],
"description": "IP address from which the candidate applied"
}
}
},
"ApplicationCvData": {
"description": "Application CV. Returns standard attachment metadata + download URL. When `?include=cv.text` is requested, a `text` field with parsed plain-text content is added.",
"allOf": [
{
"$ref": "#/$defs/ApiAttachment"
},
{
"type": "object",
"properties": {
"text": {
"type": [
"string",
"null"
],
"description": "Parsed plain-text CV content. Included only when `?include=cv.text` is requested AND `view=full` (the default). Suppressed when `view=summary` even if the include was requested — parsed CV text can be tens of KB per attachment. May be null if parsing fails or format is unsupported."
}
}
}
]
},
"AttachmentFile": {
"type": "object",
"required": [
"is_image",
"orig_file_name",
"file_ext",
"file_type",
"readable_size"
],
"properties": {
"is_image": {
"type": [
"boolean",
"null"
],
"description": "Whether the file is an image."
},
"orig_file_name": {
"type": "string",
"description": "Original file name."
},
"file_ext": {
"type": "string",
"description": "File extension."
},
"file_type": {
"type": "string",
"description": "File type category."
},
"readable_size": {
"type": "string",
"description": "Human-readable file size."
}
},
"additionalProperties": false
},
"IdName": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "integer",
"description": "Unique identifier."
},
"name": {
"type": "string",
"description": "Display name."
}
}
},
"Job": {
"type": "object",
"required": [
"id",
"company_id",
"title",
"status",
"url",
"is_remote",
"is_hybrid",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "integer",
"description": "Unique identifier"
},
"alias": {
"type": [
"string",
"null"
],
"description": "Short alphanumeric alias used in UI URLs. Use this to build job links — `https://app.100hires.com/job/{alias}/candidates/pipeline`. Also accepted as `{id}` in API requests."
},
"company_id": {
"type": "integer",
"description": "ID of the company this job belongs to"
},
"title": {
"type": "string",
"description": "Public job title shown to candidates"
},
"internal_title": {
"type": [
"string",
"null"
],
"description": "Internal job title visible only to the hiring team"
},
"internal_job_id": {
"type": [
"string",
"null"
],
"description": "Company's internal job identifier (e.g. requisition number)"
},
"description": {
"type": "string",
"description": "Job description (HTML). Present only when `view=full` (default); omitted entirely when `view=summary` to keep list responses inside the agent context budget. Use `GET /jobs/{id}` or `view=full` to retrieve."
},
"resume_field_status": {
"type": [
"string",
"null"
],
"enum": [
"required",
"optional",
"hidden"
],
"description": "Whether resume upload is required, optional, or hidden on the application form"
},
"location": {
"oneOf": [
{
"$ref": "#/$defs/JobLocation"
},
{
"type": "null"
}
],
"description": "Job location details"
},
"url": {
"type": "string",
"description": "Public URL of the job posting page"
},
"url_backoffice": {
"type": "string",
"description": "Backoffice URL — opens the job's pipeline view inside the recruiter app (`https://app.100hires.com/job/{alias}/candidates/pipeline`). Use this to link agent widgets / UI to the in-app job page rather than the public career page."
},
"is_remote": {
"type": "boolean",
"description": "Whether this is a remote position"
},
"is_hybrid": {
"type": "boolean",
"description": "Whether this is a hybrid position: office days plus remote days at the job address. Never true together with is_remote."
},
"job_board_remote_scope": {
"type": [
"string",
"null"
],
"enum": [
"city",
"statewide",
"nationwide"
],
"description": "How a remote job is listed on Indeed: city, statewide or nationwide. Null when the job is not remote."
},
"status": {
"type": "string",
"description": "Job status: open, closed, draft, or archived"
},
"department": {
"oneOf": [
{
"$ref": "#/$defs/IdName"
},
{
"type": "null"
}
],
"description": "Department this job belongs to"
},
"category": {
"oneOf": [
{
"$ref": "#/$defs/IdName"
},
{
"type": "null"
}
],
"description": "Job category (e.g. Engineering, Marketing)"
},
"employment_type": {
"oneOf": [
{
"$ref": "#/$defs/IdName"
},
{
"type": "null"
}
],
"description": "Employment type (e.g. Full-time, Part-time, Contract)"
},
"education_level": {
"oneOf": [
{
"$ref": "#/$defs/IdName"
},
{
"type": "null"
}
],
"description": "Required education level"
},
"experience_level": {
"oneOf": [
{
"$ref": "#/$defs/IdName"
},
{
"type": "null"
}
],
"description": "Required experience level (e.g. Entry, Mid, Senior)"
},
"workflow_id": {
"type": [
"integer",
"null"
],
"description": "ID of the hiring workflow (pipeline) assigned to this job"
},
"workflow": {
"oneOf": [
{
"$ref": "#/$defs/IdName"
},
{
"type": "null"
}
],
"description": "Hiring workflow (pipeline) assigned to this job. Embedded via `include=workflow`. Suppressed when `view=summary` even if the include was requested."
},
"form_id": {
"type": [
"integer",
"null"
],
"description": "ID of the application form candidates fill in for this job — the form attached to the job, or the company default form when the job has none attached yet (the same rule the public apply page follows). `null` only when the company has no forms. Fetch the questions with `GET /forms/{id}`. Present in both `view=full` and `view=summary`."
},
"pipeline_stages": {
"oneOf": [
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
}
}
}
},
{
"type": "null"
}
],
"description": "Pipeline stages for this job's workflow. Only included when `include=pipeline_stages` is specified. Suppressed when `view=summary` even if the include was requested."
},
"salary_min": {
"type": [
"number",
"null"
],
"description": "Minimum salary"
},
"salary_max": {
"type": [
"number",
"null"
],
"description": "Maximum salary"
},
"salary_currency": {
"type": [
"string",
"null"
],
"description": "Salary currency code (e.g. USD, EUR)"
},
"salary_period": {
"type": [
"string",
"null"
],
"enum": [
"annually",
"monthly",
"daily",
"hourly"
],
"description": "Salary period"
},
"hours_per_week_min": {
"type": [
"integer",
"null"
],
"description": "Minimum hours per week"
},
"hours_per_week_max": {
"type": [
"integer",
"null"
],
"description": "Maximum hours per week"
},
"indeed_posting_data": {
"type": "object",
"additionalProperties": true,
"description": "Indeed job board posting metadata. Present only when `view=full` (default); omitted entirely when `view=summary`."
},
"hiring_team": {
"type": "array",
"items": {
"$ref": "#/$defs/JobHiringTeamMember"
},
"description": "Team members assigned to this job. Embedded via `include=hiring_team`. Suppressed when `view=summary` even if the include was requested."
},
"is_satellite": {
"type": "boolean",
"description": "Whether this job is a satellite (child) of a canonical job. Satellite jobs share the candidate pipeline of their parent."
},
"parent_job_id": {
"type": [
"integer",
"null"
],
"description": "ID of the canonical (parent) job. Null for canonical jobs. Recruiting operations should target the canonical job."
},
"language": {
"type": [
"string",
"null"
],
"description": "Locale this job's public page renders in, overriding the career site language. Null means the page follows the career site language (`GET /companies/career-site-settings`), which in turn falls back to en-US. This is the override, not the effective language. Present in both `view=full` and `view=summary`."
},
"created_at": {
"type": "integer",
"format": "int64",
"description": "Unix timestamp (seconds)"
},
"updated_at": {
"type": "integer",
"format": "int64",
"description": "Unix timestamp (seconds)"
},
"ai_scoring_criteria": {
"type": "array",
"description": "AI scoring criteria configured for this job, ordered by `position` ASC. Returned as an empty array when none are configured. Present only when `view=full` (default); omitted entirely when `view=summary`.",
"items": {
"$ref": "#/$defs/AiScoringCriterion"
}
}
}
},
"JobHiringTeamMember": {
"type": "object",
"required": [
"id",
"full_name"
],
"properties": {
"id": {
"type": "integer",
"description": "User ID."
},
"full_name": {
"type": "string",
"description": "User full name."
},
"email": {
"type": [
"string",
"null"
],
"description": "User email."
},
"role": {
"type": [
"string",
"null"
],
"description": "Role on hiring team (e.g. hiring_manager, recruiter)."
}
}
},
"JobLocation": {
"type": "object",
"properties": {
"country": {
"type": "string",
"description": "Country."
},
"city": {
"type": "string",
"description": "City."
},
"state": {
"type": "string",
"description": "State or region."
},
"postal_code": {
"type": "string",
"description": "Postal code."
},
"street_address": {
"type": "string",
"description": "Street address."
},
"full_address": {
"type": "string",
"description": "Full formatted address."
}
}
},
"ProfileAnswer": {
"type": "object",
"required": [
"question_id",
"question_text",
"value"
],
"properties": {
"question_id": {
"type": "integer",
"description": "Question ID."
},
"question_text": {
"type": "string",
"description": "Question label."
},
"value": {
"description": "Answer value (string, array, or null)."
}
}
}
}
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/100hires-com-application"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.