propose_jobs

Propose published jobs, or terms independent of any job, to a candidate

All MCP toolsWrite

The employer's move inside a match: propose one or several of your organization's published jobs — or terms independent of any job posting (terms: true), with or without jobs — to a candidate the organization may see — matched by the engine to one of its jobs, or one who said interested to one of them. No message rides along. All rows land or none: cannot_propose names the job ids the person's registered conditions exclude (no reason is ever given; the terms row compares no conditions, so it is never cannot_propose), already_proposed the ones awaiting an answer or already mutual (a passed job may be proposed again; details.terms: true names the terms row — a record of the pair awaits its answer, or the chat's topic already is the agreed terms), pair_not_formed a person the organization may not see, refused_organization a person who refused the company. A job the person already says interested to completes mutual on the spot and opens the pair's chat; the rest — the terms row included — reach the person as ONE decision item per company, answered row by row. An interested answer to the terms row makes the pair mutual with no job: the chat opens with the agreed terms as its topic from the start. Only your organization's PUBLISHED jobs may be proposed — a draft or another organization's job refuses with job_not_found. From the candidate's detail page or the pair's chat it is the same move: a proposal made after the chat opened appears in both sides' chat as one line (get_employer_thread / get_conversation proposals) linked to the candidate's Decisions; the answer is never duplicated in the chat. From a matched candidate (list_matched_candidates) the same call proposes THIS job; to lower the matched job and propose another instead, pass_matched_candidate first, then propose_jobs with the other job. actorPersonId is the human principal you act for (persons.id), never a credential identity: candidate agents pass the candidate, employer agents pass the hiring-side member.

Input schema

{
  "type": "object",
  "properties": {
    "actorPersonId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "The acting hiring-side member (persons.id) — the proposal is recorded as theirs."
    },
    "personToken": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "The candidate, as an opaque subject_token."
    },
    "jobIds": {
      "description": "The published jobs to propose (jobs.id), distinct; one or several, or none when terms is true.",
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "string",
        "format": "uuid",
        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
      }
    },
    "terms": {
      "description": "true to propose terms independent of any job posting (with or without jobs) — the terms row of the person's decision item; nothing of the terms is recorded.",
      "type": "boolean"
    }
  },
  "required": [
    "actorPersonId",
    "personToken"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output schema

{
  "type": "object",
  "properties": {
    "jobs": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "jobId": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "interestId": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "The proposal's interests row (interests.id)."
          },
          "state": {
            "type": "string",
            "enum": [
              "waiting",
              "mutual"
            ],
            "description": "\"waiting\" (awaiting the person's answer) or \"mutual\" (the person already said interested)."
          }
        },
        "required": [
          "jobId",
          "interestId",
          "state"
        ],
        "additionalProperties": false
      },
      "description": "One entry per proposed job, in input order; empty when terms were proposed alone."
    },
    "terms": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "agreementId": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "The proposal-born agreement record (agreements.id) — answer_proposal's agreementId on the person's side."
            },
            "state": {
              "type": "string",
              "const": "waiting",
              "description": "Always awaiting the person's answer: terms never complete mutual on the spot."
            }
          },
          "required": [
            "agreementId",
            "state"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ],
      "description": "The terms row this proposal recorded; null when no terms were proposed."
    },
    "threadId": {
      "anyOf": [
        {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        {
          "type": "null"
        }
      ],
      "description": "The chat a mutual transition opened in this call, when one did; null otherwise."
    },
    "notificationsPublished": {
      "type": "boolean",
      "description": "False when the post-commit notification publish failed — the committed rows stand (row-first); the recipients may not have been notified."
    }
  },
  "required": [
    "jobs",
    "terms",
    "threadId",
    "notificationsPublished"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}

On this page