100Hires · Schema

JobUpdateRequest

RecruitingArtificial IntelligenceHuman ResourcesSoftware-as-a-ServiceSmall Business

Properties

Name Type Description
form_id integer Application form ID to assign to this job. Replaces the job's active form; the previous link is kept inactive. The response's `form_id` reflects the new form.
status string Job status (e.g. Draft, Public). See GET /taxonomy/statuses.
title string Public job title.
internal_title string Internal-only title visible to the hiring team.
internal_job_id string External reference ID from your ATS or HR system.
description string Job description (HTML allowed).
language stringnull Locale the job page renders in, overriding the career site language (e.g. de-DE; underscore aliases like de_DE are normalized). Omit the field to leave the current override untouched; send null to rem
resume_field_status string Resume field behavior on the application form.
location_city string Job city. Required unless is_remote is true; leave city, state and postal code empty for a nationwide remote posting on Indeed. Street, city, state, postal code and country are validated together on s
location_country string Job country: a country name or an ISO 3166-1 alpha-2 code from the country list. Anything else is rejected with a validation error.
location_state string Job state or region.
location_street_address string Street address.
location_full_address string Accepted and ignored: the job address is assembled from street, city, state, postal code and country. Kept for compatibility.
location_postal_code string Postal or ZIP code.
salary_min number Minimum salary.
salary_max number Maximum salary.
salary_currency string Salary currency code (e.g. USD, EUR).
salary_period string Salary period. A job created without it is "annually". An "annually" salary with an amount below 1000 is rejected as an hourly rate typed against the yearly period: send "hourly" instead.
is_remote boolean Whether this is a remote position. With an empty city, state and postal code Indeed lists it nationwide.
is_hybrid boolean Hybrid position: office days plus remote days at the job address, so location_city stays required. Requires is_remote false; sending both as true is rejected, and is_remote true on a hybrid job clears
job_board_remote_scope stringnull How a remote job is listed on Indeed: city (default) keeps the address, statewide sends the state alone, nationwide the country alone. Other boards always get the full address. Non-city requires is_re
employment_type_id integer Employment type ID from GET /taxonomy/employment-types.
department_id integer Department ID from GET /taxonomy/departments.
category_id integer Job category ID from GET /taxonomy/categories.
education_level_id integer Education level ID from GET /taxonomy/education-levels.
experience_level_id integer Experience level ID from GET /taxonomy/experience-levels.
workflow_id integer Workflow ID to assign to this job.
parent_job_id integer Canonical parent job ID. If provided, the job becomes a satellite job.
knockout_questions array Boolean knockout questions added to the application form. Each question with `disqualify_on_wrong_answer=true` creates an auto-disqualify rule on the Applied stage.
ai_scoring_criteria array AI scoring criteria for evaluating candidates against this job. Diff-replace by `id`: items with `id` update the matching existing criterion (preserving identity), items without `id` create new criter
View JSON Schema on GitHub

JSON Schema

100hires-com-job-update-request-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/100hires-com/json-schema/100hires-com-job-update-request-schema.json",
  "title": "JobUpdateRequest",
  "x-generated": "2026-10-31",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/100hires-com-openapi.json#/components/schemas/JobUpdateRequest",
  "type": "object",
  "properties": {
    "form_id": {
      "type": "integer",
      "description": "Application form ID to assign to this job. Replaces the job's active form; the previous link is kept inactive. The response's `form_id` reflects the new form."
    },
    "status": {
      "type": "string",
      "description": "Job status (e.g. Draft, Public). See GET /taxonomy/statuses."
    },
    "title": {
      "type": "string",
      "description": "Public job title."
    },
    "internal_title": {
      "type": "string",
      "description": "Internal-only title visible to the hiring team."
    },
    "internal_job_id": {
      "type": "string",
      "description": "External reference ID from your ATS or HR system."
    },
    "description": {
      "type": "string",
      "description": "Job description (HTML allowed)."
    },
    "language": {
      "type": [
        "string",
        "null"
      ],
      "minLength": 1,
      "maxLength": 35,
      "description": "Locale the job page renders in, overriding the career site language (e.g. de-DE; underscore aliases like de_DE are normalized). Omit the field to leave the current override untouched; send null to remove it and follow the career site language. Unknown, disabled, empty and longer-than-35-character values are rejected with a 400 validation error on `language`. Available locales come from GET /languages."
    },
    "resume_field_status": {
      "type": "string",
      "description": "Resume field behavior on the application form.",
      "enum": [
        "required",
        "optional",
        "hidden"
      ]
    },
    "location_city": {
      "type": "string",
      "description": "Job city. Required unless is_remote is true; leave city, state and postal code empty for a nationwide remote posting on Indeed. Street, city, state, postal code and country are validated together on save, the same way the back-office form checks them: with Google Address Validation in the countries it covers, with a geocoding provider elsewhere. A confirmed location is stored as validated, so a misspelt city is corrected; a location that is unknown, suspicious (for example a city in the wrong state) or would need a part replaced is stored as sent, and the job boards tab of the job reports it until it is fixed. Components that are already confirmed are not checked again."
    },
    "location_country": {
      "type": "string",
      "description": "Job country: a country name or an ISO 3166-1 alpha-2 code from the country list. Anything else is rejected with a validation error."
    },
    "location_state": {
      "type": "string",
      "description": "Job state or region."
    },
    "location_street_address": {
      "type": "string",
      "description": "Street address."
    },
    "location_full_address": {
      "type": "string",
      "description": "Accepted and ignored: the job address is assembled from street, city, state, postal code and country. Kept for compatibility."
    },
    "location_postal_code": {
      "type": "string",
      "description": "Postal or ZIP code."
    },
    "salary_min": {
      "type": "number",
      "description": "Minimum salary."
    },
    "salary_max": {
      "type": "number",
      "description": "Maximum salary."
    },
    "salary_currency": {
      "type": "string",
      "description": "Salary currency code (e.g. USD, EUR)."
    },
    "salary_period": {
      "type": "string",
      "description": "Salary period. A job created without it is \"annually\". An \"annually\" salary with an amount below 1000 is rejected as an hourly rate typed against the yearly period: send \"hourly\" instead.",
      "enum": [
        "annually",
        "monthly",
        "daily",
        "hourly"
      ]
    },
    "is_remote": {
      "type": "boolean",
      "description": "Whether this is a remote position. With an empty city, state and postal code Indeed lists it nationwide."
    },
    "is_hybrid": {
      "type": "boolean",
      "description": "Hybrid position: office days plus remote days at the job address, so location_city stays required. Requires is_remote false; sending both as true is rejected, and is_remote true on a hybrid job clears is_hybrid. Indeed lists it as Hybrid Remote, LinkedIn as Hybrid, other boards as an on-site job at that address."
    },
    "job_board_remote_scope": {
      "type": [
        "string",
        "null"
      ],
      "enum": [
        "city",
        "statewide",
        "nationwide",
        null
      ],
      "default": "city",
      "description": "How a remote job is listed on Indeed: city (default) keeps the address, statewide sends the state alone, nationwide the country alone. Other boards always get the full address. Non-city requires is_remote true, statewide also location_state; null resets to city."
    },
    "employment_type_id": {
      "type": "integer",
      "description": "Employment type ID from GET /taxonomy/employment-types."
    },
    "department_id": {
      "type": "integer",
      "description": "Department ID from GET /taxonomy/departments."
    },
    "category_id": {
      "type": "integer",
      "description": "Job category ID from GET /taxonomy/categories."
    },
    "education_level_id": {
      "type": "integer",
      "description": "Education level ID from GET /taxonomy/education-levels."
    },
    "experience_level_id": {
      "type": "integer",
      "description": "Experience level ID from GET /taxonomy/experience-levels."
    },
    "workflow_id": {
      "type": "integer",
      "description": "Workflow ID to assign to this job."
    },
    "parent_job_id": {
      "type": "integer",
      "description": "Canonical parent job ID. If provided, the job becomes a satellite job."
    },
    "knockout_questions": {
      "type": "array",
      "description": "Boolean knockout questions added to the application form. Each question with `disqualify_on_wrong_answer=true` creates an auto-disqualify rule on the Applied stage.",
      "items": {
        "type": "object",
        "required": [
          "text",
          "expected_answer",
          "disqualify_on_wrong_answer"
        ],
        "properties": {
          "text": {
            "type": "string",
            "description": "Question text shown to the applicant."
          },
          "expected_answer": {
            "type": "string",
            "enum": [
              "Yes",
              "No"
            ],
            "description": "The correct/desired answer."
          },
          "disqualify_on_wrong_answer": {
            "type": "boolean",
            "description": "If true, applicants who answer incorrectly are automatically disqualified."
          }
        }
      }
    },
    "ai_scoring_criteria": {
      "type": "array",
      "description": "AI scoring criteria for evaluating candidates against this job.\nDiff-replace by `id`: items with `id` update the matching existing\ncriterion (preserving identity), items without `id` create new\ncriteria, and existing criteria not referenced in the payload are\nremoved. Omit the field to leave existing criteria untouched. Pass\nan empty array to detach all criteria. Each item's order in the\narray becomes its `position`.\n",
      "items": {
        "$ref": "#/$defs/AiScoringCriterionInput"
      }
    }
  },
  "additionalProperties": false,
  "$defs": {
    "AiScoringCriterionInput": {
      "type": "object",
      "required": [
        "text",
        "weight"
      ],
      "properties": {
        "id": {
          "type": "integer",
          "description": "ID of an existing criterion attached to this job. When present, the\ncorresponding criterion is updated in place (or, if it has scores,\ndetached and replaced — `ManageCriteria::createOrUpdate` semantics).\nOmit `id` to create a new criterion. Items existing on the job that\nare not present in the request (matched by `id`) are removed\n(soft-deleted if unscored, detached if used in past evaluations).\n"
        },
        "title": {
          "type": "string",
          "description": "Optional short label for the criterion."
        },
        "text": {
          "type": "string",
          "description": "Prompt text describing what to evaluate. Required."
        },
        "weight": {
          "type": "integer",
          "minimum": 1,
          "maximum": 10,
          "description": "Relative importance of this criterion in the total score (1–10)."
        }
      }
    }
  }
}

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.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/100hires-com-job-update-request"
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.