get_selection

Get one selection record with its timeline

All MCP toolsRead

Start with list_selections, then open one here: one of the person's OWN selection records — the record's seat is a job (jobId) or the agreed terms (agreementId), exactly one, with the pair's chat (threadId) when one is open — with its full history (candidacy_transitions, oldest first) and its interview slots (all statuses, starts_at ascending, with the person's own response on each — respond with respond_interview_slot). Someone else's, cross-organization, and nonexistent ids refuse identically (no existence oracle).

Input schema

{
  "type": "object",
  "properties": {
    "personId": {
      "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 person the selection record belongs to (persons.id)."
    },
    "candidacyId": {
      "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 selection record to read (candidacies.id)."
    }
  },
  "required": [
    "personId",
    "candidacyId"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output schema

{
  "type": "object",
  "properties": {
    "selection": {
      "type": "object",
      "properties": {
        "candidacyId": {
          "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 selection record (candidacies.id)."
        },
        "jobId": {
          "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 job this selection record is on (jobs.id) when the seat is a job's; null on the agreed terms."
        },
        "agreementId": {
          "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 agreed terms this selection record is on (agreements.id) when the seat is the agreement's; null on a job seat — exactly one of jobId / agreementId is set (ADR-0229)."
        },
        "origin": {
          "type": "string",
          "enum": [
            "external"
          ],
          "description": "Candidacy origin: \"external\" (the selection record opened from outside the organization). The state machine never conditions on it."
        },
        "state": {
          "type": "string",
          "enum": [
            "applied",
            "screening_passed",
            "interviewing",
            "offered",
            "accepted",
            "converted",
            "withdrawn",
            "declined"
          ],
          "description": "Candidacy state: the active pipeline \"applied\" → \"screening_passed\" → \"interviewing\" → \"offered\" → \"accepted\" → \"converted\", plus the terminal negatives \"withdrawn\" (seeker-initiated) and \"declined\" (hirer-initiated)."
        },
        "profileVersion": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": 1,
              "maximum": 9007199254740991
            },
            {
              "type": "null"
            }
          ],
          "description": "The profile_versions.version pinned when the record opened (int >= 1); null when the person had no profile version yet."
        },
        "appliedAt": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
          "description": "When the selection record opened (applied), ISO 8601 datetime (UTC)."
        },
        "stateChangedAt": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
          "description": "When the current state was entered, ISO 8601 datetime (UTC)."
        },
        "jobTitle": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "The job's title at read time; null on the agreed terms."
        },
        "jobPublished": {
          "type": "boolean",
          "description": "Published ⇔ true (the ADR-0082 visibility fact) — false marks a no-longer-published job, and is always false on the agreed terms (no posting)."
        },
        "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 pair's chat when one is open (threads.id) — the agreed terms live there; get_conversation reads it. Null when the pair has no chat."
        },
        "transitions": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "from": {
                "type": "string",
                "enum": [
                  "applied",
                  "screening_passed",
                  "interviewing",
                  "offered",
                  "accepted",
                  "converted",
                  "withdrawn",
                  "declined"
                ],
                "description": "Candidacy state: the active pipeline \"applied\" → \"screening_passed\" → \"interviewing\" → \"offered\" → \"accepted\" → \"converted\", plus the terminal negatives \"withdrawn\" (seeker-initiated) and \"declined\" (hirer-initiated)."
              },
              "to": {
                "type": "string",
                "enum": [
                  "applied",
                  "screening_passed",
                  "interviewing",
                  "offered",
                  "accepted",
                  "converted",
                  "withdrawn",
                  "declined"
                ],
                "description": "Candidacy state: the active pipeline \"applied\" → \"screening_passed\" → \"interviewing\" → \"offered\" → \"accepted\" → \"converted\", plus the terminal negatives \"withdrawn\" (seeker-initiated) and \"declined\" (hirer-initiated)."
              },
              "occurredAt": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
                "description": "When the transition happened, ISO 8601 datetime (UTC)."
              },
              "actorToken": {
                "description": "Opaque subject_token of the actor who drove the transition, if any.",
                "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)$"
              }
            },
            "required": [
              "from",
              "to",
              "occurredAt"
            ],
            "additionalProperties": false,
            "description": "A candidacy state transition event: from/to must be an allowed pair in the canonical transition table (self-transitions are never allowed)."
          },
          "description": "The selection record's history (candidacy_transitions), oldest first — the locked event shape; opening (applied) is not a transition, so a fresh record has none."
        },
        "slots": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "slotId": {
                "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 interview slot (interview_slots.id)."
              },
              "candidacyId": {
                "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 candidacy this slot hangs off (candidacies.id) — the selection record the company's first proposal on the mutual pair opened; the slot's one parent."
              },
              "status": {
                "type": "string",
                "enum": [
                  "proposed",
                  "confirmed",
                  "cancelled"
                ],
                "description": "Interview slot status: \"proposed\", \"confirmed\" (at most one UNDECIDED per candidacy; decided past ones remain as the record), or \"cancelled\". Nothing leaves cancelled."
              },
              "startsAt": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
                "description": "When the slot starts, ISO 8601 datetime (UTC)."
              },
              "endsAt": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "When the slot ends, ISO 8601 datetime (UTC); null when open-ended."
              },
              "candidateResponse": {
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "accepted",
                      "declined"
                    ],
                    "description": "Candidate response to an interview slot: \"accepted\" or \"declined\" (does not fit their schedule). Mutable — the latest response wins; absent (null) means no response yet. A confirmed slot takes no response; the person's verb there is the interview cancel."
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "The candidate's latest response: accepted, declined, or null (no response yet). A declined slot refuses confirmation until the response changes."
              },
              "respondedAt": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "When the latest response was recorded, ISO 8601 (UTC); null when unresponded."
              },
              "candidateVerdict": {
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "continue",
                      "withdraw"
                    ],
                    "description": "Candidate post-interview intent: \"continue\" (stay in this selection process) or \"withdraw\" (leave it). Absent (null) means no intent recorded yet; withdraw co-occurs with the withdrawn transition."
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "The candidate's post-interview intent: continue, withdraw, or null (not recorded yet). Meaningful only once the confirmed slot's start has passed."
              },
              "candidateVerdictAt": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "When the candidate intent was recorded, ISO 8601 (UTC); null when unrecorded."
              },
              "employerVerdict": {
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "passed",
                      "declined"
                    ],
                    "description": "Employer interview verdict: \"passed\" (state unchanged) or \"declined\" (co-occurs with the declined transition). Absent (null) means no verdict recorded yet."
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "The employer's verdict on the completed interview: passed, declined, or null (not recorded yet)."
              },
              "employerVerdictAt": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "When the employer verdict was recorded, ISO 8601 (UTC); null when unrecorded."
              },
              "contact": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "phone": {
                        "description": "Phone number in customary domestic notation, e.g. \"03-1234-5678\" or \"+81 3 1234 5678\" — digits, \"+\", \"-\", spaces and parentheses only; never normalized or verified.",
                        "type": "string",
                        "pattern": "^(?=.*[0-9])[0-9+(](?:[0-9+\\-() ]*[0-9)])?$"
                      },
                      "email": {
                        "description": "Contact email address for enquiries about this posting.",
                        "type": "string",
                        "format": "email",
                        "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                      },
                      "note": {
                        "type": "string",
                        "pattern": "^\\S(?:[\\s\\S]*\\S)?$",
                        "description": "One line beside the channels — the department, the person in charge, reception hours — trimmed and non-empty."
                      }
                    },
                    "additionalProperties": false,
                    "description": "Employer contact for the posting: phone and/or email (at least one), plus an optional one-line note. Published as posting content — no disclosure gate."
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "The employer's day-of contact stated for THIS interview at proposal (ADR-0217) — the raw statement, not the resolution: null when none was stated, in which case the posting's contact is the day-of contact."
              },
              "cancelledAt": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "When a confirmed interview was cancelled, ISO 8601 (UTC) — recorded with who and when; a proposed slot's withdrawal and the expiry sweep leave it null."
              },
              "cancelledBy": {
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "candidate",
                      "employer"
                    ],
                    "description": "Which side cancelled the confirmed interview: \"candidate\" or \"employer\". Absent (null) when the slot was not a cancelled confirmed interview — a proposed slot's withdrawal and the expiry sweep record no side."
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Which side cancelled the confirmed interview — recorded with who and when; a proposed slot's withdrawal and the expiry sweep leave it null."
              },
              "candidateAvailabilityNote": {
                "anyOf": [
                  {
                    "type": "string",
                    "maxLength": 256
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "The candidate's own words about the times that suit them, written beside a declined response or beside their own cancellation of a confirmed interview; null when they said nothing."
              }
            },
            "required": [
              "slotId",
              "candidacyId",
              "status",
              "startsAt",
              "endsAt",
              "candidateResponse",
              "respondedAt",
              "candidateVerdict",
              "candidateVerdictAt",
              "employerVerdict",
              "employerVerdictAt",
              "contact",
              "cancelledAt",
              "cancelledBy",
              "candidateAvailabilityNote"
            ],
            "additionalProperties": false,
            "description": "One interview slot's scheduling state: proposed, confirmed (at most one UNDECIDED per candidacy; decided past interviews remain as confirmed rows), or cancelled — plus the candidate's latest response, the post-interview result pair, and the cancellation record (who and when) of a cancelled confirmed interview."
          },
          "description": "The selection record's interview slots, all statuses, (starts_at, id) ascending — the same rows the employer pipeline sees, with the candidate's own response on each."
        }
      },
      "required": [
        "candidacyId",
        "jobId",
        "agreementId",
        "origin",
        "state",
        "profileVersion",
        "appliedAt",
        "stateChangedAt",
        "jobTitle",
        "jobPublished",
        "threadId",
        "transitions",
        "slots"
      ],
      "additionalProperties": false,
      "description": "The selection record detail: the list entry plus the pair's chat, its ordered history and interview slots."
    }
  },
  "required": [
    "selection"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}

On this page