{
  "openapi": "3.1.1",
  "info": {
    "title": "Alfa API",
    "version": "1.0.0",
    "description": "The Alfa recruiting API: jobs, candidates, sourcing, Lisa and the public application flow. Authenticated operations take the session token of a signed-in user as a bearer token, except the server-to-server operations under `/v1/integration`, which take an Alfa API key. Errors are RFC 9457 problem details.",
    "contact": { "name": "Alfa", "url": "https://welovealfa.com" }
  },
  "servers": [
    { "url": "https://api.welovealfa.com", "description": "Production" },
    { "url": "https://staging-api.welovealfa.com", "description": "Staging" },
    { "url": "https://dev-api.welovealfa.com", "description": "Development" }
  ],
  "tags": [
    { "name": "ATS" },
    { "name": "ATS history" },
    { "name": "ATS integration" },
    { "name": "ATS jobs" },
    { "name": "Agent" },
    { "name": "Analytics" },
    { "name": "Applicant intake" },
    { "name": "Application interview" },
    { "name": "Applications" },
    { "name": "Billing" },
    { "name": "Candidate search demo" },
    { "name": "Candidates" },
    { "name": "Connector" },
    { "name": "Dashboard PDF" },
    { "name": "Developers" },
    { "name": "Exports" },
    { "name": "Files" },
    { "name": "Inbox" },
    { "name": "Interview bookings" },
    { "name": "Interviews" },
    { "name": "Job board" },
    { "name": "Job setup" },
    { "name": "Jobs" },
    { "name": "Me" },
    { "name": "Meetings" },
    { "name": "Newsletter" },
    { "name": "Omnibar search" },
    { "name": "Organization" },
    { "name": "Organization members" },
    { "name": "Public jobs" },
    { "name": "Search" },
    { "name": "Signup" },
    { "name": "Sourced candidates" },
    { "name": "Status" },
    { "name": "Talent search" },
    { "name": "Telemetry" },
    { "name": "Tools" },
    { "name": "Webhooks" }
  ],
  "security": [{ "bearerAuth": [] }],
  "paths": {
    "/v1/agent/actions/{actionKey}": {
      "get": {
        "operationId": "getAgentStagedAction",
        "summary": "Get a staged action's receipt",
        "description": "The action must belong to the given job.",
        "tags": ["Agent"],
        "parameters": [
          {
            "in": "path",
            "name": "actionKey",
            "schema": { "type": "string", "pattern": "^[A-Za-z0-9._:-]{1,200}$" },
            "required": true
          },
          {
            "in": "query",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/agent/actions/{actionKey}/draft": {
      "put": {
        "operationId": "updateAgentStagedReplyDraft",
        "summary": "Save the recruiter's edits to a staged inbox reply",
        "tags": ["Agent"],
        "parameters": [
          {
            "in": "path",
            "name": "actionKey",
            "schema": { "type": "string", "pattern": "^[A-Za-z0-9._:-]{1,200}$" },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "subject": { "type": "string" },
                  "bodyMarkdown": { "type": "string" }
                },
                "required": ["subject", "bodyMarkdown"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/agent/actions/{actionKey}/execute": {
      "post": {
        "operationId": "executeAgentStagedAction",
        "summary": "Run a confirmed staged action",
        "description": "Claims the action atomically, so a refresh, a retry or a teammate cannot run it twice. Publication alone accepts the reviewed job fields.",
        "tags": ["Agent"],
        "parameters": [
          {
            "in": "path",
            "name": "actionKey",
            "schema": { "type": "string", "pattern": "^[A-Za-z0-9._:-]{1,200}$" },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "acknowledgements": {
                    "type": "object",
                    "propertyNames": { "type": "string" },
                    "additionalProperties": { "type": "string" }
                  },
                  "reviewedDraft": {
                    "description": "The job fields the recruiter reviewed",
                    "type": "object"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/agent/actions/latest-draft": {
      "get": {
        "operationId": "getLatestAgentDraftAction",
        "summary": "Get the receipt of a draft job's latest staged action",
        "tags": ["Agent"],
        "parameters": [
          {
            "in": "query",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/agent/attention-queue": {
      "get": {
        "operationId": "getAgentAttentionQueue",
        "summary": "List the exceptions that need the recruiter today",
        "tags": ["Agent"],
        "parameters": [{ "in": "query", "name": "limit", "schema": { "type": "integer" } }],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/agent/candidates": {
      "get": {
        "operationId": "findAgentCandidates",
        "summary": "Find applicants and sourced people by name or email",
        "tags": ["Agent"],
        "parameters": [
          {
            "in": "query",
            "name": "query",
            "schema": { "type": "string", "maxLength": 500 },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/agent/candidates/{candidateId}": {
      "get": {
        "operationId": "getAgentCandidateProfile",
        "summary": "Get a candidate's headline profile, evaluation, notes and applications",
        "tags": ["Agent"],
        "parameters": [
          {
            "in": "path",
            "name": "candidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/agent/candidates/{candidateId}/cv": {
      "get": {
        "operationId": "getAgentCandidateCv",
        "summary": "Get a candidate's resume text and a link to the file",
        "tags": ["Agent"],
        "parameters": [
          {
            "in": "path",
            "name": "candidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/agent/intent-preview": {
      "post": {
        "operationId": "previewAgentIntent",
        "summary": "Classify a draft message for the composer badge",
        "tags": ["Agent"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "message": { "type": "string", "maxLength": 8000 },
                  "contextType": { "type": "string", "enum": ["root", "job", "analytics"] },
                  "context": { "type": "string", "minLength": 1 },
                  "hasOpenThread": { "type": "boolean" }
                },
                "required": ["message", "contextType"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/agent/jobs/{jobId}/candidate-reviews": {
      "get": {
        "operationId": "getAgentCandidateReview",
        "summary": "Get the evidence matrix for one to five applicants of a job",
        "tags": ["Agent"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          },
          {
            "in": "query",
            "name": "candidateIds",
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": {
                    "anyOf": [
                      { "type": "integer", "exclusiveMinimum": 0 },
                      { "type": "string", "pattern": "^\\d+$" }
                    ]
                  }
                },
                {
                  "anyOf": [
                    { "type": "integer", "exclusiveMinimum": 0 },
                    { "type": "string", "pattern": "^\\d+$" }
                  ]
                }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/agent/jobs/{jobId}/pipeline-applications": {
      "get": {
        "operationId": "listAgentPipelineApplications",
        "summary": "Get candidates' applications to a job, including removed ones",
        "tags": ["Agent"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          },
          {
            "in": "query",
            "name": "candidateIds",
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": {
                    "anyOf": [
                      { "type": "integer", "exclusiveMinimum": 0 },
                      { "type": "string", "pattern": "^\\d+$" }
                    ]
                  }
                },
                {
                  "anyOf": [
                    { "type": "integer", "exclusiveMinimum": 0 },
                    { "type": "string", "pattern": "^\\d+$" }
                  ]
                }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/agent/jobs/{jobId}/status": {
      "get": {
        "operationId": "getAgentJobStatus",
        "summary": "Get a job's lifecycle, pipeline counts and sourcing channels",
        "tags": ["Agent"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/agent/omnibar-examples": {
      "get": {
        "operationId": "listOmnibarExamples",
        "summary": "List the organisation's example requests for the composer",
        "tags": ["Agent"],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/agent/read-document": {
      "post": {
        "operationId": "readAgentDocument",
        "summary": "Read a document attached to the conversation",
        "tags": ["Agent"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "fileKey": { "type": "string", "minLength": 1 },
                  "fileName": { "type": "string", "minLength": 1 },
                  "documentType": {
                    "type": "string",
                    "enum": [
                      "resume",
                      "job_description",
                      "interview_notes",
                      "hiring_brief",
                      "other"
                    ]
                  }
                },
                "required": ["fileKey", "fileName"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/agent/sessions/{sessionId}/archive": {
      "post": {
        "operationId": "archiveAgentSession",
        "summary": "Retire a conversation so its context starts fresh",
        "tags": ["Agent"],
        "parameters": [
          {
            "in": "path",
            "name": "sessionId",
            "schema": { "type": "string", "minLength": 1 },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/agent/sessions/{sessionId}/interrupt": {
      "post": {
        "operationId": "interruptAgentSession",
        "summary": "Stop a conversation's turn in flight",
        "tags": ["Agent"],
        "parameters": [
          {
            "in": "path",
            "name": "sessionId",
            "schema": { "type": "string", "minLength": 1 },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/agent/sessions/{sessionId}/next-prompts": {
      "get": {
        "operationId": "listAgentNextPrompts",
        "summary": "Suggest follow-up prompts for a conversation's latest reply",
        "tags": ["Agent"],
        "parameters": [
          {
            "in": "path",
            "name": "sessionId",
            "schema": { "type": "string", "minLength": 1 },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/agent/sessions/current": {
      "get": {
        "operationId": "getAgentContextThread",
        "summary": "Get a context's open conversation with its messages and tool results",
        "description": "Polling (`poll`) returns only what the multiplayer heartbeat needs; `read` moves the read watermark.",
        "tags": ["Agent"],
        "parameters": [
          {
            "in": "query",
            "name": "context",
            "schema": { "type": "string", "minLength": 1 },
            "required": true
          },
          { "in": "query", "name": "poll", "schema": { "type": "boolean" } },
          {
            "in": "query",
            "name": "read",
            "schema": {
              "anyOf": [{ "type": "boolean" }, { "type": "string", "enum": ["true", "false"] }]
            }
          },
          { "in": "query", "name": "sessionId", "schema": { "type": "string", "minLength": 1 } }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/agent/sessions/warm": {
      "post": {
        "operationId": "warmAgentSession",
        "summary": "Prepare the session a new conversation's first message will use",
        "tags": ["Agent"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": { "context": { "type": "string", "minLength": 1 } },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/analytics/candidates": {
      "get": {
        "operationId": "listCandidateAnalytics",
        "summary": "A page of candidates across the organisation",
        "tags": ["Analytics"],
        "parameters": [
          {
            "in": "query",
            "name": "jobStatus",
            "schema": { "type": "string", "enum": ["all", "live", "closed", "draft"] }
          },
          {
            "in": "query",
            "name": "tags",
            "schema": {
              "anyOf": [
                { "type": "array", "items": { "type": "string", "minLength": 1 } },
                { "type": "string", "minLength": 1 }
              ]
            }
          },
          {
            "in": "query",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            }
          },
          {
            "in": "query",
            "name": "createdAfter",
            "schema": { "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" }
          },
          {
            "in": "query",
            "name": "createdBefore",
            "schema": { "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" }
          },
          {
            "in": "query",
            "name": "page",
            "schema": {
              "anyOf": [{ "type": "integer" }, { "type": "string", "pattern": "^-?\\d+$" }]
            }
          },
          {
            "in": "query",
            "name": "pageSize",
            "schema": {
              "anyOf": [{ "type": "integer" }, { "type": "string", "pattern": "^-?\\d+$" }]
            }
          },
          {
            "in": "query",
            "name": "sort",
            "schema": { "type": "string", "enum": ["recent", "score"] }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/analytics/filter-options": {
      "get": {
        "operationId": "getAnalyticsFilterOptions",
        "summary": "The jobs and tags the analytics filters offer",
        "tags": ["Analytics"],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/analytics/jobs": {
      "get": {
        "operationId": "listJobAnalytics",
        "summary": "One row of funnel metrics per job in the organisation",
        "tags": ["Analytics"],
        "parameters": [
          {
            "in": "query",
            "name": "jobStatus",
            "schema": { "type": "string", "enum": ["all", "live", "closed", "draft"] }
          },
          {
            "in": "query",
            "name": "tags",
            "schema": {
              "anyOf": [
                { "type": "array", "items": { "type": "string", "minLength": 1 } },
                { "type": "string", "minLength": 1 }
              ]
            }
          },
          {
            "in": "query",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            }
          },
          {
            "in": "query",
            "name": "createdAfter",
            "schema": { "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" }
          },
          {
            "in": "query",
            "name": "createdBefore",
            "schema": { "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/analytics/jobs/{jobId}/dashboard": {
      "get": {
        "operationId": "getJobDashboard",
        "summary": "A job's dashboard: its KPIs and candidate analytics",
        "tags": ["Analytics"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/analytics/jobs/{jobId}/kpis": {
      "get": {
        "operationId": "getJobKpis",
        "summary": "A job's headline hiring numbers",
        "tags": ["Analytics"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/analytics/overview": {
      "get": {
        "operationId": "getAnalyticsOverview",
        "summary": "The organisation's hiring overview",
        "tags": ["Analytics"],
        "parameters": [
          {
            "in": "query",
            "name": "jobStatus",
            "schema": { "type": "string", "enum": ["all", "live", "closed", "draft"] }
          },
          {
            "in": "query",
            "name": "tags",
            "schema": {
              "anyOf": [
                { "type": "array", "items": { "type": "string", "minLength": 1 } },
                { "type": "string", "minLength": 1 }
              ]
            }
          },
          {
            "in": "query",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            }
          },
          {
            "in": "query",
            "name": "createdAfter",
            "schema": { "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" }
          },
          {
            "in": "query",
            "name": "createdBefore",
            "schema": { "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/analytics/sourcing-performance": {
      "get": {
        "operationId": "getSourcingPerformance",
        "summary": "The organisation's AI sourcing campaigns and how each is performing",
        "tags": ["Analytics"],
        "parameters": [
          {
            "in": "query",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/analytics/sql": {
      "post": {
        "operationId": "runAnalyticsSql",
        "summary": "Run one read-only SELECT against the org-scoped analytics views",
        "description": "The statement is validated against a relation and function allowlist and runs as a role that can read only the organisation-scoped analytics views. A rejected statement answers `{ success: false, error }` with the reason.",
        "tags": ["Analytics"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": { "sql": { "type": "string", "minLength": 1 } },
                "required": ["sql"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/ats-history/candidates/{candidateId}": {
      "get": {
        "operationId": "getAtsHistoryCandidate",
        "summary": "Get one person from the ATS history",
        "tags": ["ATS history"],
        "parameters": [
          {
            "in": "path",
            "name": "candidateId",
            "schema": { "type": "string", "minLength": 1 },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/ats-history/search": {
      "post": {
        "operationId": "searchAtsHistory",
        "summary": "Search the organisation's ATS history for people",
        "description": "`unavailable` is true when the organisation has no searchable ATS connected.",
        "tags": ["ATS history"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": { "query": { "type": "string" } },
                "required": ["query"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/ats-integration": {
      "get": {
        "operationId": "getAtsIntegration",
        "summary": "Get the organisation's ATS integration",
        "description": "`integration` is null when no ATS is connected.",
        "tags": ["ATS integration"],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      },
      "delete": {
        "operationId": "disconnectAtsIntegration",
        "summary": "Disconnect the ATS and stop syncing with it",
        "tags": ["ATS integration"],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/ats-integration/link": {
      "post": {
        "operationId": "createAtsIntegrationLink",
        "summary": "Create the link a recruiter opens to connect their ATS",
        "tags": ["ATS integration"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": { "integrationTool": { "type": "string", "minLength": 1 } },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/ats-integration/relink": {
      "post": {
        "operationId": "relinkAtsIntegration",
        "summary": "Create the link that reconnects an expired or unfinished ATS connection",
        "tags": ["ATS integration"],
        "parameters": [],
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/ats-integration/stage-mappings": {
      "patch": {
        "operationId": "updateAtsStageMappings",
        "summary": "Map candidate statuses to ATS stages and switch the history sync",
        "description": "Only the statuses present are changed; `null` stops syncing that status. Turning the history sync on starts a full sync.",
        "tags": ["ATS integration"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "mappings": {
                    "type": "object",
                    "properties": {
                      "shortlisted": {
                        "anyOf": [{ "type": "string", "minLength": 1 }, { "type": "null" }]
                      },
                      "suitable": {
                        "anyOf": [{ "type": "string", "minLength": 1 }, { "type": "null" }]
                      },
                      "not_suitable": {
                        "anyOf": [{ "type": "string", "minLength": 1 }, { "type": "null" }]
                      },
                      "sourced_potential": {
                        "anyOf": [{ "type": "string", "minLength": 1 }, { "type": "null" }]
                      }
                    },
                    "additionalProperties": false
                  },
                  "atsHistorySync": { "type": "boolean" }
                },
                "required": ["mappings"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/ats-integration/stages": {
      "get": {
        "operationId": "listAtsIntegrationStages",
        "summary": "List the ATS's application stages",
        "description": "An integration that needs reconnecting, finishing or its first sync answers with no stages and an `integrationState` saying which.",
        "tags": ["ATS integration"],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/ats-integration/sync-status": {
      "get": {
        "operationId": "getAtsSyncStatus",
        "summary": "Get when the ATS and the ATS history last synced",
        "tags": ["ATS integration"],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/billing/checkout-sessions": {
      "post": {
        "operationId": "createCheckoutSession",
        "summary": "Start a checkout for a plan",
        "tags": ["Billing"],
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "examples": ["3f0c1d8e-6b6a-4f7e-9a51-0d2c5e7b9f10"],
              "description": "A unique value, such as a UUID, sent unchanged on every retry of one request. A retry after the request succeeded returns the same response, marked `Idempotent-Replayed: true`, without running the operation again. Reusing a key for a different request is a 422.",
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            },
            "description": "A unique value, such as a UUID, sent unchanged on every retry of one request. A retry after the request succeeded returns the same response, marked `Idempotent-Replayed: true`, without running the operation again. Reusing a key for a different request is a 422."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "plan": { "type": "string", "enum": ["lite", "plus", "pro", "enterprise"] },
                  "billingPeriod": {
                    "default": "monthly",
                    "type": "string",
                    "enum": ["monthly", "annual"]
                  },
                  "credits": { "type": "integer", "exclusiveMinimum": 0 }
                },
                "required": ["plan"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "409": { "$ref": "#/components/responses/Problem409" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/billing/invoices": {
      "get": {
        "operationId": "listInvoices",
        "summary": "List the company's invoices, newest first",
        "tags": ["Billing"],
        "parameters": [
          { "in": "query", "name": "startingAfter", "schema": { "type": "string", "minLength": 1 } }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/billing/invoices/page": {
      "get": {
        "operationId": "listInvoicesPage",
        "summary": "List the company's issued invoices, a page at a time",
        "description": "Newest first. A company with no billing account has none. Pass `nextCursor` back as `cursor` for the next page.",
        "tags": ["Billing"],
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "anyOf": [{ "type": "integer" }, { "type": "string", "pattern": "^-?\\d+$" }]
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "schema": { "type": "string", "minLength": 1, "maxLength": 512 }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Page" } } }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/billing/portal-sessions": {
      "post": {
        "operationId": "createBillingPortalSession",
        "summary": "Open the billing portal",
        "description": "Anyone in a company opens the company's billing, which needs an organisation admin (403 `BILLING_ADMIN_REQUIRED`): a member's personal billing account has none of the company's invoices.",
        "tags": ["Billing"],
        "parameters": [],
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/billing/subscribe-sessions": {
      "post": {
        "operationId": "createSubscribeSession",
        "summary": "Subscribe to a plan, publishing a job afterwards when one is named",
        "description": "Organisation admins only.",
        "tags": ["Billing"],
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "examples": ["3f0c1d8e-6b6a-4f7e-9a51-0d2c5e7b9f10"],
              "description": "A unique value, such as a UUID, sent unchanged on every retry of one request. A retry after the request succeeded returns the same response, marked `Idempotent-Replayed: true`, without running the operation again. Reusing a key for a different request is a 422.",
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            },
            "description": "A unique value, such as a UUID, sent unchanged on every retry of one request. A retry after the request succeeded returns the same response, marked `Idempotent-Replayed: true`, without running the operation again. Reusing a key for a different request is a 422."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "plan": { "type": "string", "enum": ["lite", "plus", "pro", "enterprise"] },
                  "billingPeriod": {
                    "default": "monthly",
                    "type": "string",
                    "enum": ["monthly", "annual"]
                  },
                  "jobId": {
                    "anyOf": [
                      { "type": "integer", "exclusiveMinimum": 0 },
                      { "type": "string", "pattern": "^\\d+$" }
                    ]
                  },
                  "credits": { "type": "integer", "exclusiveMinimum": 0 }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "409": { "$ref": "#/components/responses/Problem409" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/billing/subscription/cancel": {
      "post": {
        "operationId": "cancelSubscription",
        "summary": "Cancel the company's subscription at the end of the billing period",
        "description": "Organisation admins only.",
        "tags": ["Billing"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": { "reason": { "type": "string" }, "feedback": { "type": "string" } },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/billing/trial-sessions": {
      "post": {
        "operationId": "createTrialSession",
        "summary": "Start a free trial checkout",
        "description": "Organisation admins only. A card-free trial account is sent straight back to its jobs.",
        "tags": ["Billing"],
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "examples": ["3f0c1d8e-6b6a-4f7e-9a51-0d2c5e7b9f10"],
              "description": "A unique value, such as a UUID, sent unchanged on every retry of one request. A retry after the request succeeded returns the same response, marked `Idempotent-Replayed: true`, without running the operation again. Reusing a key for a different request is a 422.",
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            },
            "description": "A unique value, such as a UUID, sent unchanged on every retry of one request. A retry after the request succeeded returns the same response, marked `Idempotent-Replayed: true`, without running the operation again. Reusing a key for a different request is a 422."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "jobId": {
                    "anyOf": [
                      { "type": "integer", "exclusiveMinimum": 0 },
                      { "type": "string", "pattern": "^\\d+$" }
                    ]
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "409": { "$ref": "#/components/responses/Problem409" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/board-column-assignments/{candidateId}": {
      "put": {
        "operationId": "setCandidateBoardColumn",
        "summary": "Put a candidate in a custom board column, or back in its default column",
        "description": "A null `columnId` returns the candidate to the column its status puts it in.",
        "tags": ["Job board"],
        "parameters": [
          {
            "in": "path",
            "name": "candidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "columnId": {
                    "anyOf": [{ "type": "integer", "exclusiveMinimum": 0 }, { "type": "null" }]
                  }
                },
                "required": ["columnId"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/board-columns/{columnId}": {
      "patch": {
        "operationId": "updateBoardColumn",
        "summary": "Rename or move a custom board column, or change its call length",
        "tags": ["Job board"],
        "parameters": [
          {
            "in": "path",
            "name": "columnId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": { "type": "string" },
                  "position": { "type": "integer" },
                  "interviewMinutes": {
                    "anyOf": [{ "type": "integer", "exclusiveMinimum": 0 }, { "type": "null" }]
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      },
      "delete": {
        "operationId": "deleteBoardColumn",
        "summary": "Delete a custom board column",
        "description": "Its candidates return to their default columns.",
        "tags": ["Job board"],
        "parameters": [
          {
            "in": "path",
            "name": "columnId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/board-preferences/candidate-sort": {
      "get": {
        "operationId": "getCandidateSortPreference",
        "summary": "The caller's default candidate sort across jobs",
        "tags": ["Job board"],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      },
      "put": {
        "operationId": "setCandidateSortPreference",
        "summary": "Set the caller's default candidate sort across jobs",
        "tags": ["Job board"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": { "sortBy": { "type": "string", "enum": ["score", "date"] } },
                "required": ["sortBy"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/calendar-connection": {
      "get": {
        "operationId": "getCalendarConnection",
        "summary": "Get the caller's connected calendar and the calendars it can count as busy",
        "tags": ["Interviews"],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      },
      "delete": {
        "operationId": "deleteCalendarConnection",
        "summary": "Disconnect the caller's calendar and revoke Alfa's access to it",
        "tags": ["Interviews"],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/calendar-connection/authorize": {
      "post": {
        "operationId": "authorizeCalendarConnection",
        "summary": "Start connecting the caller's calendar; returns the consent page to open",
        "tags": ["Interviews"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": { "returnPath": { "type": "string", "maxLength": 500 } },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/calendar-connection/calendars": {
      "put": {
        "operationId": "saveCalendarConnectionCalendars",
        "summary": "Choose which of the connected calendars count as busy",
        "tags": ["Interviews"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "calendarIds": {
                    "maxItems": 50,
                    "type": "array",
                    "items": { "type": "string", "maxLength": 500 }
                  }
                },
                "required": ["calendarIds"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/calendar-connection/complete": {
      "post": {
        "operationId": "completeCalendarConnection",
        "summary": "Finish connecting a calendar with the code and state from the consent page",
        "tags": ["Interviews"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "state": { "type": "string", "minLength": 1, "maxLength": 4000 },
                  "code": { "type": "string", "maxLength": 4000 },
                  "error": { "type": "string", "maxLength": 200 }
                },
                "required": ["state"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/candidate-search-demos": {
      "post": {
        "operationId": "startCandidateSearchDemo",
        "summary": "Start a search of the synthetic candidate dataset",
        "tags": ["Candidate search demo"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "query": { "type": "string" },
                  "threshold": { "type": "number" },
                  "shortlistLimit": { "type": "integer" },
                  "batchSize": { "type": "integer" }
                },
                "required": ["query"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/candidate-search-demos/{searchId}/cancel": {
      "post": {
        "operationId": "cancelCandidateSearchDemo",
        "summary": "Stop a demo search",
        "tags": ["Candidate search demo"],
        "parameters": [
          {
            "in": "path",
            "name": "searchId",
            "schema": { "type": "string", "minLength": 1 },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/candidate-search-demos/{searchId}/verify": {
      "post": {
        "operationId": "verifyCandidateSearchDemoBatch",
        "summary": "Verify the next page of a demo search shortlist",
        "tags": ["Candidate search demo"],
        "parameters": [
          {
            "in": "path",
            "name": "searchId",
            "schema": { "type": "string", "minLength": 1 },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": { "offset": { "type": "integer" } },
                "required": ["offset"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/candidates/{candidateId}": {
      "get": {
        "operationId": "getCandidate",
        "summary": "Get a candidate with their job, interview and company",
        "tags": ["Candidates"],
        "parameters": [
          {
            "in": "path",
            "name": "candidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          },
          {
            "in": "query",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      },
      "delete": {
        "operationId": "deleteCandidate",
        "summary": "Delete a candidate (restorable)",
        "tags": ["Candidates"],
        "parameters": [
          {
            "in": "path",
            "name": "candidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          },
          {
            "in": "query",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/candidates/{candidateId}/cv": {
      "put": {
        "operationId": "replaceCandidateCv",
        "summary": "Replace a candidate's CV with an uploaded file",
        "tags": ["Candidates"],
        "parameters": [
          {
            "in": "path",
            "name": "candidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": { "cvS3File": { "type": "string", "minLength": 1 } },
                "required": ["cvS3File"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/candidates/{candidateId}/emails": {
      "get": {
        "operationId": "listCandidateEmails",
        "summary": "List the emails exchanged with a candidate",
        "tags": ["Candidates"],
        "parameters": [
          {
            "in": "path",
            "name": "candidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/candidates/{candidateId}/favourite": {
      "put": {
        "operationId": "favouriteCandidate",
        "summary": "Favourite (shortlist) a candidate",
        "tags": ["Candidates"],
        "parameters": [
          {
            "in": "path",
            "name": "candidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          },
          {
            "in": "query",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      },
      "delete": {
        "operationId": "unfavouriteCandidate",
        "summary": "Remove a candidate from favourites",
        "tags": ["Candidates"],
        "parameters": [
          {
            "in": "path",
            "name": "candidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          },
          {
            "in": "query",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/candidates/{candidateId}/interviews": {
      "get": {
        "operationId": "listCandidateInterviews",
        "summary": "List a candidate's interviews with their questions and transcripts",
        "tags": ["Interviews"],
        "parameters": [
          {
            "in": "path",
            "name": "candidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/candidates/{candidateId}/job-move-suggestions": {
      "get": {
        "operationId": "listCandidateJobMoveSuggestions",
        "summary": "Suggest jobs whose location suits a location-blocked candidate",
        "tags": ["Candidates"],
        "parameters": [
          {
            "in": "path",
            "name": "candidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          },
          {
            "in": "query",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/candidates/{candidateId}/manual-review": {
      "put": {
        "operationId": "reviewCandidateApplication",
        "summary": "Record a reviewer's decision on an application held for manual review",
        "description": "`pending` reopens a completed review. A rejection needs a reason.",
        "tags": ["Candidates"],
        "parameters": [
          {
            "in": "path",
            "name": "candidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "jobId": {
                    "anyOf": [
                      { "type": "integer", "exclusiveMinimum": 0 },
                      { "type": "string", "pattern": "^\\d+$" }
                    ]
                  },
                  "decision": { "type": "string", "enum": ["approved", "rejected", "pending"] },
                  "reason": { "type": "string" }
                },
                "required": ["jobId", "decision"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/candidates/{candidateId}/move": {
      "post": {
        "operationId": "moveCandidateToJob",
        "summary": "Move or copy a candidate to another job",
        "tags": ["Candidates"],
        "parameters": [
          {
            "in": "path",
            "name": "candidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "sourceJobId": {
                    "anyOf": [
                      { "type": "integer", "exclusiveMinimum": 0 },
                      { "type": "string", "pattern": "^\\d+$" }
                    ]
                  },
                  "targetJobId": {
                    "anyOf": [
                      { "type": "integer", "exclusiveMinimum": 0 },
                      { "type": "string", "pattern": "^\\d+$" }
                    ]
                  },
                  "mode": { "type": "string", "enum": ["move", "duplicate"] },
                  "revalidateProfile": { "type": "boolean" }
                },
                "required": ["sourceJobId", "targetJobId", "mode"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/candidates/{candidateId}/notes": {
      "get": {
        "operationId": "listCandidateNotes",
        "summary": "List the recruiters' notes on a candidate",
        "tags": ["Candidates"],
        "parameters": [
          {
            "in": "path",
            "name": "candidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      },
      "post": {
        "operationId": "addCandidateNote",
        "summary": "Add a note to a candidate",
        "tags": ["Candidates"],
        "parameters": [
          {
            "in": "path",
            "name": "candidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": { "note": { "type": "string", "minLength": 1 } },
                "required": ["note"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/candidates/{candidateId}/restore": {
      "post": {
        "operationId": "restoreCandidate",
        "summary": "Restore a deleted candidate",
        "tags": ["Candidates"],
        "parameters": [
          {
            "in": "path",
            "name": "candidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "jobId": {
                    "anyOf": [
                      { "type": "integer", "exclusiveMinimum": 0 },
                      { "type": "string", "pattern": "^\\d+$" }
                    ]
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/candidates/{candidateId}/workflow": {
      "patch": {
        "operationId": "updateCandidateWorkflow",
        "summary": "Change a candidate's pipeline status or board column",
        "description": "Sets the status (`null` clears it) and, when given, its feedback. `customColumnId` pins the card to a custom column, `null` unpins it and leaving it out keeps the current pin. Moving into the Interview column emails a booking link.",
        "tags": ["Candidates"],
        "parameters": [
          {
            "in": "path",
            "name": "candidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "status": { "anyOf": [{ "type": "string", "minLength": 1 }, { "type": "null" }] },
                  "feedback": { "type": "string" },
                  "customColumnId": {
                    "anyOf": [{ "type": "integer", "exclusiveMinimum": 0 }, { "type": "null" }]
                  },
                  "jobId": {
                    "anyOf": [
                      { "type": "integer", "exclusiveMinimum": 0 },
                      { "type": "string", "pattern": "^\\d+$" }
                    ]
                  }
                },
                "required": ["status"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/candidates/bulk-email": {
      "post": {
        "operationId": "sendCandidateEmails",
        "summary": "Send emails Lisa drafted to candidates",
        "description": "Held back: refuses with 403 `FEATURE_DISABLED` until sending from chat ships.",
        "tags": ["Candidates"],
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "examples": ["3f0c1d8e-6b6a-4f7e-9a51-0d2c5e7b9f10"],
              "description": "A unique value, such as a UUID, sent unchanged on every retry of one request. A retry after the request succeeded returns the same response, marked `Idempotent-Replayed: true`, without running the operation again. Reusing a key for a different request is a 422.",
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            },
            "description": "A unique value, such as a UUID, sent unchanged on every retry of one request. A retry after the request succeeded returns the same response, marked `Idempotent-Replayed: true`, without running the operation again. Reusing a key for a different request is a 422."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "emails": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "candidateId": { "type": "integer", "exclusiveMinimum": 0 },
                        "subject": { "type": "string" },
                        "bodyHtml": { "type": "string" }
                      },
                      "required": ["candidateId", "subject", "bodyHtml"],
                      "additionalProperties": false
                    }
                  }
                },
                "required": ["emails"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "409": { "$ref": "#/components/responses/Problem409" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/connector/authorize": {
      "get": {
        "operationId": "describeConnectorAuthorization",
        "summary": "Validate an authorization request and describe it for the consent page",
        "description": "Works before an organisation is chosen. A malformed request from a verified client answers with where to send the browser back.",
        "tags": ["Connector"],
        "parameters": [
          { "in": "query", "name": "response_type", "schema": { "type": "string" } },
          { "in": "query", "name": "client_id", "schema": { "type": "string" } },
          { "in": "query", "name": "redirect_uri", "schema": { "type": "string" } },
          { "in": "query", "name": "code_challenge", "schema": { "type": "string" } },
          { "in": "query", "name": "code_challenge_method", "schema": { "type": "string" } },
          { "in": "query", "name": "scope", "schema": { "type": "string" } },
          { "in": "query", "name": "state", "schema": { "type": "string" } },
          { "in": "query", "name": "resource", "schema": { "type": "string" } }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      },
      "post": {
        "operationId": "decideConnectorAuthorization",
        "summary": "Allow or deny a connection",
        "description": "Returns where to send the browser next: back to the client's redirect URI.",
        "tags": ["Connector"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "response_type": { "type": "string" },
                  "client_id": { "type": "string" },
                  "redirect_uri": { "type": "string" },
                  "code_challenge": { "type": "string" },
                  "code_challenge_method": { "type": "string" },
                  "scope": { "type": "string" },
                  "state": { "type": "string" },
                  "resource": { "type": "string" },
                  "decision": { "type": "string", "enum": ["allow", "deny"] }
                },
                "required": ["decision"]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/connector/connections": {
      "get": {
        "operationId": "listConnectorConnections",
        "summary": "List the caller's connected assistants in the active organisation",
        "tags": ["Connector"],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/connector/connections/{connectionId}": {
      "delete": {
        "operationId": "revokeConnectorConnection",
        "summary": "Disconnect an assistant",
        "tags": ["Connector"],
        "parameters": [
          {
            "in": "path",
            "name": "connectionId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/developers": {
      "get": {
        "operationId": "getDevelopersOverview",
        "summary": "Get the Alfa API set-up",
        "description": "Whether the Alfa API is on for the company, its Company ID and its ATS integration.",
        "tags": ["Developers"],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/developers/activity/page": {
      "get": {
        "operationId": "listDeveloperActivityPage",
        "summary": "List Alfa API activity",
        "description": "Key, connection and webhook changes, newest first.",
        "tags": ["Developers"],
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "anyOf": [{ "type": "integer" }, { "type": "string", "pattern": "^-?\\d+$" }]
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "schema": { "type": "string", "minLength": 1, "maxLength": 512 }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Page" } } }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/developers/api-keys": {
      "get": {
        "operationId": "listApiKeys",
        "summary": "List the company's API keys",
        "description": "Newest first. Only the prefix of a key is ever shown again.",
        "tags": ["Developers"],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      },
      "post": {
        "operationId": "createApiKey",
        "summary": "Generate an API key",
        "description": "Returns the full key once, as `key`. It cannot be retrieved again.",
        "tags": ["Developers"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": { "type": "string", "minLength": 1, "maxLength": 60 },
                  "environment": { "type": "string", "enum": ["test", "live"] },
                  "scopes": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": ["ats_jobs:write", "jobs:read", "candidates:read", "webhooks:manage"]
                    }
                  },
                  "expiresInDays": {
                    "anyOf": [
                      {
                        "anyOf": [
                          { "type": "number", "const": 30 },
                          { "type": "number", "const": 90 },
                          { "type": "number", "const": 365 }
                        ]
                      },
                      { "type": "null" }
                    ]
                  }
                },
                "required": ["name", "environment", "scopes"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/developers/api-keys/{keyId}": {
      "patch": {
        "operationId": "renameApiKey",
        "summary": "Rename an API key",
        "tags": ["Developers"],
        "parameters": [
          {
            "in": "path",
            "name": "keyId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 60 } },
                "required": ["name"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      },
      "delete": {
        "operationId": "revokeApiKey",
        "summary": "Revoke an API key",
        "description": "Takes effect within a minute and cannot be undone.",
        "tags": ["Developers"],
        "parameters": [
          {
            "in": "path",
            "name": "keyId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/developers/api-keys/{keyId}/rotate": {
      "post": {
        "operationId": "rotateApiKey",
        "summary": "Rotate an API key",
        "description": "Issues a new key with the same name, environment and scopes, returned once as `key`. The old key keeps working for the overlap, then stops.",
        "tags": ["Developers"],
        "parameters": [
          {
            "in": "path",
            "name": "keyId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "overlap": {
                    "type": "string",
                    "enum": ["immediately", "1_hour", "24_hours", "7_days"]
                  }
                },
                "required": ["overlap"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/developers/api-keys/{keyId}/webhook-endpoint": {
      "put": {
        "operationId": "setKeyWebhookEndpoint",
        "summary": "Set a key's webhook endpoint",
        "description": "The first time, the answer includes the signing `secret`, shown only once.",
        "tags": ["Developers"],
        "parameters": [
          {
            "in": "path",
            "name": "keyId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": { "url": { "type": "string", "maxLength": 2000, "format": "uri" } },
                "required": ["url"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      },
      "delete": {
        "operationId": "removeKeyWebhookEndpoint",
        "summary": "Remove a key's webhook endpoint",
        "tags": ["Developers"],
        "parameters": [
          {
            "in": "path",
            "name": "keyId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "204": { "description": "Success, with no response body." },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/developers/api-keys/{keyId}/webhook-endpoint/rotate-secret": {
      "post": {
        "operationId": "rotateKeyWebhookSecret",
        "summary": "Rotate a webhook signing secret",
        "description": "Returns the new secret once.",
        "tags": ["Developers"],
        "parameters": [
          {
            "in": "path",
            "name": "keyId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/developers/api-keys/{keyId}/webhook-endpoint/test": {
      "post": {
        "operationId": "testKeyWebhookEndpoint",
        "summary": "Send a test webhook event",
        "tags": ["Developers"],
        "parameters": [
          {
            "in": "path",
            "name": "keyId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/developers/connections": {
      "get": {
        "operationId": "listPlatformConnections",
        "summary": "List the platforms the company has authorized",
        "tags": ["Developers"],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      },
      "post": {
        "operationId": "authorizePlatform",
        "summary": "Authorize a platform to act for the company",
        "description": "Lets the platform's API key read and write this company's ATS jobs and candidates, and receive its webhooks, until revoked.",
        "tags": ["Developers"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "platformId": { "type": "string", "minLength": 1, "maxLength": 100 }
                },
                "required": ["platformId"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/developers/connections/{connectionId}": {
      "delete": {
        "operationId": "revokePlatformConnection",
        "summary": "Revoke a platform's authorization",
        "description": "Cuts the platform's access and stops its webhooks for this company immediately.",
        "tags": ["Developers"],
        "parameters": [
          {
            "in": "path",
            "name": "connectionId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "204": { "description": "Success, with no response body." },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/developers/platforms": {
      "get": {
        "operationId": "listAvailablePlatforms",
        "summary": "List the ATS platforms a company can authorize",
        "tags": ["Developers"],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/developers/webhook-deliveries/{deliveryId}/redeliver": {
      "post": {
        "operationId": "redeliverDeveloperWebhook",
        "summary": "Send a webhook event again",
        "tags": ["Developers"],
        "parameters": [
          {
            "in": "path",
            "name": "deliveryId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "202": {
            "description": "Accepted for background processing.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/developers/webhook-deliveries/page": {
      "get": {
        "operationId": "listDeveloperWebhookDeliveriesPage",
        "summary": "List the company's webhook deliveries",
        "tags": ["Developers"],
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "anyOf": [{ "type": "integer" }, { "type": "string", "pattern": "^-?\\d+$" }]
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "schema": { "type": "string", "minLength": 1, "maxLength": 512 }
          },
          {
            "in": "query",
            "name": "keyId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Page" } } }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/developers/webhook-endpoints": {
      "get": {
        "operationId": "listWebhookEndpoints",
        "summary": "List the company's webhook endpoints",
        "tags": ["Developers"],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/exports/candidates": {
      "post": {
        "operationId": "startCandidatesExport",
        "summary": "Start exporting the organisation's candidates to an Excel workbook",
        "description": "The workbook is built in the background. The response carries its `queueId`; read its status from `GET /v1/exports/candidates/{exportId}`.",
        "tags": ["Exports"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "jobStatus": { "type": "string", "enum": ["all", "live", "closed", "draft"] },
                  "tags": { "type": "array", "items": { "type": "string", "minLength": 1 } },
                  "jobId": {
                    "anyOf": [{ "type": "integer", "exclusiveMinimum": 0 }, { "type": "null" }]
                  },
                  "createdAfter": {
                    "anyOf": [
                      { "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" },
                      { "type": "null" }
                    ]
                  },
                  "createdBefore": {
                    "anyOf": [
                      { "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" },
                      { "type": "null" }
                    ]
                  },
                  "columns": { "type": "array", "items": { "type": "string", "minLength": 1 } }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/exports/candidates/{exportId}": {
      "get": {
        "operationId": "getCandidatesExport",
        "summary": "Read the status of a candidate export, with its download link once built",
        "description": "Only the recruiter who started the export can read it.",
        "tags": ["Exports"],
        "parameters": [
          {
            "in": "path",
            "name": "exportId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/exports/candidates/preview": {
      "post": {
        "operationId": "previewCandidatesExport",
        "summary": "Preview the columns and first rows of the organisation's candidate export",
        "tags": ["Exports"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "jobStatus": { "type": "string", "enum": ["all", "live", "closed", "draft"] },
                  "tags": { "type": "array", "items": { "type": "string", "minLength": 1 } },
                  "jobId": {
                    "anyOf": [{ "type": "integer", "exclusiveMinimum": 0 }, { "type": "null" }]
                  },
                  "createdAfter": {
                    "anyOf": [
                      { "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" },
                      { "type": "null" }
                    ]
                  },
                  "createdBefore": {
                    "anyOf": [
                      { "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" },
                      { "type": "null" }
                    ]
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/exports/dashboard-pdfs": {
      "post": {
        "operationId": "exportJobDashboardPdf",
        "summary": "Render a job's dashboard as a PDF",
        "tags": ["Exports"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": { "jobId": { "type": "integer", "exclusiveMinimum": 0 } },
                "required": ["jobId"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/exports/job-candidates": {
      "post": {
        "operationId": "exportJobCandidates",
        "summary": "Export a job's candidates to an Excel workbook",
        "tags": ["Exports"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "jobId": { "type": "integer", "exclusiveMinimum": 0 },
                  "columns": { "type": "array", "items": { "type": "string", "minLength": 1 } }
                },
                "required": ["jobId"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/exports/job-candidates/preview": {
      "post": {
        "operationId": "previewJobCandidatesExport",
        "summary": "Preview the columns and first rows of a job's candidate export",
        "tags": ["Exports"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": { "jobId": { "type": "integer", "exclusiveMinimum": 0 } },
                "required": ["jobId"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/exports/jobs": {
      "post": {
        "operationId": "exportJobs",
        "summary": "Export the organisation's jobs to an Excel workbook",
        "tags": ["Exports"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "jobStatus": { "type": "string", "enum": ["all", "live", "closed", "draft"] },
                  "tags": { "type": "array", "items": { "type": "string", "minLength": 1 } },
                  "jobId": {
                    "anyOf": [{ "type": "integer", "exclusiveMinimum": 0 }, { "type": "null" }]
                  },
                  "createdAfter": {
                    "anyOf": [
                      { "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" },
                      { "type": "null" }
                    ]
                  },
                  "createdBefore": {
                    "anyOf": [
                      { "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" },
                      { "type": "null" }
                    ]
                  },
                  "columns": { "type": "array", "items": { "type": "string", "minLength": 1 } }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/exports/jobs/preview": {
      "post": {
        "operationId": "previewJobsExport",
        "summary": "Preview the columns and first rows of the organisation's job export",
        "tags": ["Exports"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "jobStatus": { "type": "string", "enum": ["all", "live", "closed", "draft"] },
                  "tags": { "type": "array", "items": { "type": "string", "minLength": 1 } },
                  "jobId": {
                    "anyOf": [{ "type": "integer", "exclusiveMinimum": 0 }, { "type": "null" }]
                  },
                  "createdAfter": {
                    "anyOf": [
                      { "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" },
                      { "type": "null" }
                    ]
                  },
                  "createdBefore": {
                    "anyOf": [
                      { "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" },
                      { "type": "null" }
                    ]
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/exports/resumes": {
      "post": {
        "operationId": "startResumesExport",
        "summary": "Start zipping the resumes in a job's selected pipeline columns",
        "description": "The zip is built in the background. The response carries its `queueId`; read its status from `GET /v1/exports/resumes/{exportId}`.",
        "tags": ["Exports"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "jobId": { "type": "integer", "exclusiveMinimum": 0 },
                  "columns": { "type": "array", "items": { "type": "string", "minLength": 1 } }
                },
                "required": ["jobId", "columns"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/exports/resumes/{exportId}": {
      "get": {
        "operationId": "getResumesExport",
        "summary": "Read the status of a resume zip, with its download link once built",
        "tags": ["Exports"],
        "parameters": [
          {
            "in": "path",
            "name": "exportId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/files/resumes/{candidateId}/download": {
      "get": {
        "operationId": "getResumeDownload",
        "summary": "Get a signed download link for a candidate's resume",
        "tags": ["Files"],
        "parameters": [
          {
            "in": "path",
            "name": "candidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/files/resumes/{candidateId}/evidence": {
      "get": {
        "operationId": "getResumeEvidence",
        "summary": "Get where the screening evidence sits on a candidate's resume",
        "tags": ["Files"],
        "parameters": [
          {
            "in": "path",
            "name": "candidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/files/resumes/{candidateId}/page-images": {
      "get": {
        "operationId": "getResumePageImages",
        "summary": "Get signed images of a candidate's resume pages",
        "tags": ["Files"],
        "parameters": [
          {
            "in": "path",
            "name": "candidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/files/resumes/{candidateId}/text": {
      "get": {
        "operationId": "getResumeText",
        "summary": "Get the text layer of a candidate's resume",
        "tags": ["Files"],
        "parameters": [
          {
            "in": "path",
            "name": "candidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/files/signed-url": {
      "get": {
        "operationId": "getSignedFileUrl",
        "summary": "Sign a short-lived URL for an uploaded file",
        "tags": ["Files"],
        "parameters": [
          {
            "in": "query",
            "name": "key",
            "schema": { "type": "string", "minLength": 1 },
            "required": true
          },
          {
            "in": "query",
            "name": "bucket",
            "schema": { "type": "string", "minLength": 1 },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/inbox/read-status": {
      "put": {
        "operationId": "setInboxReadStatus",
        "summary": "Mark inbox messages read or unread",
        "tags": ["Inbox"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "messageIds": {
                    "minItems": 1,
                    "type": "array",
                    "items": { "type": "integer", "exclusiveMinimum": 0 }
                  },
                  "isRead": { "type": "boolean" }
                },
                "required": ["messageIds", "isRead"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/inbox/threads": {
      "get": {
        "operationId": "listInboxThreads",
        "summary": "List inbox conversations",
        "description": "An unknown `lane` falls back to every lane rather than returning an empty inbox.",
        "tags": ["Inbox"],
        "parameters": [
          {
            "in": "query",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            }
          },
          { "in": "query", "name": "search", "schema": { "type": "string" } },
          { "in": "query", "name": "lane", "schema": { "type": "string" } },
          {
            "in": "query",
            "name": "candidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            }
          },
          {
            "in": "query",
            "name": "sourcedCandidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            }
          },
          { "in": "query", "name": "threadId", "schema": { "type": "string" } },
          {
            "in": "query",
            "name": "page",
            "schema": {
              "anyOf": [{ "type": "integer" }, { "type": "string", "pattern": "^-?\\d+$" }]
            }
          },
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "anyOf": [{ "type": "integer" }, { "type": "string", "pattern": "^-?\\d+$" }]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/inbox/threads/{threadId}": {
      "get": {
        "operationId": "getInboxThread",
        "summary": "Get a conversation with its participant, candidate, job and recent messages",
        "tags": ["Inbox"],
        "parameters": [
          {
            "in": "path",
            "name": "threadId",
            "schema": { "type": "string", "minLength": 1 },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/inbox/threads/{threadId}/messages": {
      "get": {
        "operationId": "listInboxThreadMessages",
        "summary": "List a conversation's messages",
        "tags": ["Inbox"],
        "parameters": [
          {
            "in": "path",
            "name": "threadId",
            "schema": { "type": "string", "minLength": 1 },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/inbox/threads/{threadId}/reply": {
      "post": {
        "operationId": "replyToInboxThread",
        "summary": "Send the reply a recruiter confirmed",
        "description": "Sends only a reply Lisa staged for this conversation, identified by its action key.",
        "tags": ["Inbox"],
        "parameters": [
          {
            "in": "path",
            "name": "threadId",
            "schema": { "type": "string", "minLength": 1 },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "actionKey": { "type": "string", "minLength": 1 },
                  "subject": { "type": "string" },
                  "body": { "type": "string" }
                },
                "required": ["actionKey", "body"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/inbox/threads/page": {
      "get": {
        "operationId": "listInboxThreadsPage",
        "summary": "List inbox conversations, a page at a time",
        "description": "Newest message first, with the same filters as listing conversations but without the lane and job tallies. An unknown `lane` falls back to every lane. Pass `nextCursor` back as `cursor` for the next page.",
        "tags": ["Inbox"],
        "parameters": [
          {
            "in": "query",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            }
          },
          { "in": "query", "name": "search", "schema": { "type": "string" } },
          { "in": "query", "name": "lane", "schema": { "type": "string" } },
          {
            "in": "query",
            "name": "candidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            }
          },
          {
            "in": "query",
            "name": "sourcedCandidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            }
          },
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "anyOf": [{ "type": "integer" }, { "type": "string", "pattern": "^-?\\d+$" }]
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "schema": { "type": "string", "minLength": 1, "maxLength": 512 }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Page" } } }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/integration/applications": {
      "post": {
        "operationId": "integration.createApplication",
        "summary": "Send an applicant for screening",
        "description": "For platform keys whose ATS receives applicants: sends one applicant and their resume against your ATS job id, and Alfa screens them like any other applicant. Answers 202 with Alfa's candidate id. Sending the same `externalApplicationId` again answers 200 with the existing ids and creates nothing. An ATS job no Alfa job is linked to is 422 `ats_job_not_linked`; a closed or paused Alfa job is 409 `job_not_accepting_applications`. Alfa sends the applicant no emails. Applicants count towards the company's applicant limit.\n\nRequires an API key with the `applications:write` scope.",
        "tags": ["Applicant intake"],
        "security": [{ "apiKey": [] }],
        "parameters": [
          {
            "in": "header",
            "name": "Alfa-Company-Id",
            "schema": {
              "description": "The Company ID of the company to act for. Required with a platform key, and that company must have authorized your platform; a company key acts for its own company and can leave it out.",
              "examples": ["org_2abcDEF123"],
              "type": "string"
            },
            "description": "The Company ID of the company to act for. Required with a platform key, and that company must have authorized your platform; a company key acts for its own company and can leave it out."
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "examples": ["3f0c1d8e-6b6a-4f7e-9a51-0d2c5e7b9f10"],
              "description": "A unique value, such as a UUID, sent unchanged on every retry of one request. A retry after the request succeeded returns the same response, marked `Idempotent-Replayed: true`, without running the operation again. Reusing a key for a different request is a 422.",
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            },
            "description": "A unique value, such as a UUID, sent unchanged on every retry of one request. A retry after the request succeeded returns the same response, marked `Idempotent-Replayed: true`, without running the operation again. Reusing a key for a different request is a 422."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "externalJobId": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200,
                    "description": "Your ATS job id. An Alfa job must be linked to it.",
                    "examples": ["job_8841"]
                  },
                  "externalCandidateId": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200,
                    "description": "Your candidate id, returned on every webhook for this applicant.",
                    "examples": ["cand_123"]
                  },
                  "externalApplicationId": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200,
                    "description": "Your application id. Sending the same one again returns the existing application instead of creating another.",
                    "examples": ["appl_456"]
                  },
                  "firstName": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200,
                    "description": "First name.",
                    "examples": ["Ada"]
                  },
                  "lastName": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200,
                    "description": "Last name.",
                    "examples": ["Lovelace"]
                  },
                  "email": {
                    "type": "string",
                    "maxLength": 320,
                    "format": "email",
                    "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
                    "description": "Email address.",
                    "examples": ["ada@example.com"]
                  },
                  "phone": {
                    "description": "Phone number.",
                    "examples": ["+44 20 7946 0000"],
                    "anyOf": [{ "type": "string", "maxLength": 50 }, { "type": "null" }]
                  },
                  "linkedinUrl": {
                    "description": "LinkedIn profile URL.",
                    "examples": ["https://www.linkedin.com/in/example"],
                    "anyOf": [
                      { "type": "string", "maxLength": 500, "format": "uri" },
                      { "type": "null" }
                    ]
                  },
                  "location": {
                    "description": "Where the applicant is based.",
                    "examples": ["Manchester, UK"],
                    "anyOf": [{ "type": "string", "maxLength": 300 }, { "type": "null" }]
                  },
                  "appliedAt": {
                    "description": "When they applied in your ATS. Defaults to now.",
                    "examples": ["2026-10-07T08:15:00Z"],
                    "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|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      { "type": "null" }
                    ]
                  },
                  "screeningAnswers": {
                    "description": "Answers to the job's screening questions (see `screeningQuestions` on the job). Every mandatory question needs one, or the request is 422 `screening_questions_incomplete`.",
                    "examples": [
                      [{ "question": "Do you have the right to work in the UK?", "answer": true }]
                    ],
                    "anyOf": [
                      {
                        "maxItems": 50,
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "question": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 1000,
                              "description": "The question, exactly as the job lists it.",
                              "examples": ["Do you have the right to work in the UK?"]
                            },
                            "answer": {
                              "anyOf": [
                                { "type": "boolean" },
                                { "type": "number" },
                                { "type": "string", "maxLength": 2000 }
                              ],
                              "description": "The answer: true or false, a number, or text.",
                              "examples": [true]
                            }
                          },
                          "required": ["question", "answer"],
                          "additionalProperties": false
                        }
                      },
                      { "type": "null" }
                    ]
                  },
                  "resume": {
                    "type": "object",
                    "properties": {
                      "fileName": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 255,
                        "description": "The file name.",
                        "examples": ["ada-lovelace.pdf"]
                      },
                      "contentType": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 200,
                        "description": "`application/pdf`, `application/msword`, `application/vnd.openxmlformats-officedocument.wordprocessingml.document` or `text/plain`. Anything else is 422 `unsupported_resume_type`.",
                        "examples": ["application/pdf"]
                      },
                      "contentBase64": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 5600000,
                        "description": "The file, base64 encoded. At most 4 MB once decoded; its content must match `contentType`.",
                        "examples": ["JVBERi0xLjcKJ…"]
                      }
                    },
                    "required": ["fileName", "contentType", "contentBase64"],
                    "additionalProperties": false,
                    "description": "The resume file.",
                    "examples": [
                      {
                        "fileName": "ada-lovelace.pdf",
                        "contentType": "application/pdf",
                        "contentBase64": "JVBERi0xLjcKJ…"
                      }
                    ]
                  }
                },
                "required": [
                  "externalJobId",
                  "externalCandidateId",
                  "externalApplicationId",
                  "firstName",
                  "lastName",
                  "email",
                  "resume"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "candidateId": {
                      "type": "string",
                      "description": "Alfa's id for the applicant; webhooks and the candidate endpoints use it.",
                      "examples": ["app_254928"]
                    },
                    "jobId": {
                      "type": "integer",
                      "description": "The Alfa job the applicant was added to.",
                      "examples": [9301]
                    },
                    "status": {
                      "type": "string",
                      "enum": ["received", "existing"],
                      "description": "`received`: accepted for screening (202). `existing`: this externalApplicationId was already received, and nothing new was created (200).",
                      "examples": ["received"]
                    }
                  },
                  "required": ["candidateId", "jobId", "status"],
                  "additionalProperties": false
                }
              }
            }
          },
          "202": {
            "description": "Accepted for background processing.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "candidateId": {
                      "type": "string",
                      "description": "Alfa's id for the applicant; webhooks and the candidate endpoints use it.",
                      "examples": ["app_254928"]
                    },
                    "jobId": {
                      "type": "integer",
                      "description": "The Alfa job the applicant was added to.",
                      "examples": [9301]
                    },
                    "status": {
                      "type": "string",
                      "enum": ["received", "existing"],
                      "description": "`received`: accepted for screening (202). `existing`: this externalApplicationId was already received, and nothing new was created (200).",
                      "examples": ["received"]
                    }
                  },
                  "required": ["candidateId", "jobId", "status"],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "409": { "$ref": "#/components/responses/Problem409" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/integration/ats-jobs/{externalJobId}": {
      "put": {
        "operationId": "integration.upsertAtsJob",
        "summary": "Create or update an ATS job",
        "description": "Sends one of your ATS's jobs to Alfa, keyed by your own id. Recruiters link an Alfa job to it in the job form, and candidates on that Alfa job are reported back against this id. Sending the same id again updates it: a detail you leave out keeps its value, and `null` clears it. A `closed` job leaves the picker, but Alfa jobs already linked to it stay linked. A company that already uses another ATS integration is refused with 409 `ats_integration_conflict`.\n\nRequires an API key with the `ats_jobs:write` scope.",
        "tags": ["ATS jobs"],
        "security": [{ "apiKey": [] }],
        "parameters": [
          {
            "in": "path",
            "name": "externalJobId",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200,
              "description": "Your ATS's own id for the job.",
              "examples": ["job_8841"]
            },
            "required": true,
            "description": "Your ATS's own id for the job."
          },
          {
            "in": "header",
            "name": "Alfa-Company-Id",
            "schema": {
              "description": "The Company ID of the company to act for. Required with a platform key, and that company must have authorized your platform; a company key acts for its own company and can leave it out.",
              "examples": ["org_2abcDEF123"],
              "type": "string"
            },
            "description": "The Company ID of the company to act for. Required with a platform key, and that company must have authorized your platform; a company key acts for its own company and can leave it out."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "title": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 300,
                    "description": "The job title shown in the Alfa job form picker.",
                    "examples": ["Senior Backend Engineer"]
                  },
                  "status": {
                    "type": "string",
                    "enum": ["open", "closed"],
                    "description": "`open` jobs appear in the picker. `closed` removes the job from the picker; Alfa jobs already linked to it stay linked.",
                    "examples": ["open"]
                  },
                  "location": {
                    "description": "Where the job is based.",
                    "examples": ["London, UK"],
                    "anyOf": [{ "type": "string", "maxLength": 300 }, { "type": "null" }]
                  },
                  "department": {
                    "description": "The team or department.",
                    "examples": ["Engineering"],
                    "anyOf": [{ "type": "string", "maxLength": 200 }, { "type": "null" }]
                  },
                  "url": {
                    "description": "A link to the job in your ATS.",
                    "examples": ["https://ats.example.com/jobs/8841"],
                    "anyOf": [
                      { "type": "string", "maxLength": 2000, "format": "uri" },
                      { "type": "null" }
                    ]
                  }
                },
                "required": ["title", "status"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/AtsJob" } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/integration/ats-jobs/page": {
      "get": {
        "operationId": "integration.listAtsJobsPage",
        "summary": "List ATS jobs",
        "description": "The ATS jobs you have sent, ordered by id.\n\nRequires an API key with the `jobs:read` scope.",
        "tags": ["ATS jobs"],
        "security": [{ "apiKey": [] }],
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "string",
              "pattern": "^\\d{1,10}$",
              "description": "How many results to return, from 1 to 100. Defaults to 25.",
              "examples": ["25"]
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "description": "The `nextCursor` of the previous page. Leave it out for the first page.",
              "examples": ["eyJwIjpbIjEyIl0sInMiOiJ4In0.mT3…"],
              "type": "string",
              "minLength": 1,
              "maxLength": 2048
            },
            "description": "The `nextCursor` of the previous page. Leave it out for the first page."
          },
          {
            "in": "query",
            "name": "status",
            "schema": {
              "description": "Only jobs with this status.",
              "examples": ["open"],
              "type": "string",
              "enum": ["open", "closed"]
            },
            "description": "Only jobs with this status."
          },
          {
            "in": "header",
            "name": "Alfa-Company-Id",
            "schema": {
              "description": "The Company ID of the company to act for. Required with a platform key, and that company must have authorized your platform; a company key acts for its own company and can leave it out.",
              "examples": ["org_2abcDEF123"],
              "type": "string"
            },
            "description": "The Company ID of the company to act for. Required with a platform key, and that company must have authorized your platform; a company key acts for its own company and can leave it out."
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/AtsJob" },
                      "description": "The results on this page."
                    },
                    "nextCursor": {
                      "description": "Pass as `cursor` to read the next page; null on the last page.",
                      "examples": ["eyJwIjpbIjEyIl0sInMiOiJ4In0.mT3…"],
                      "type": ["string", "null"]
                    }
                  },
                  "required": ["data", "nextCursor"],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/integration/candidates/{candidateId}": {
      "get": {
        "operationId": "integration.getCandidate",
        "summary": "Get a candidate",
        "description": "A screened candidate on a linked job, as webhooks send it. An unscreened candidate, or one from another company, is 404.\n\nRequires an API key with the `candidates:read` scope.",
        "tags": ["Candidates"],
        "security": [{ "apiKey": [] }],
        "parameters": [
          {
            "in": "path",
            "name": "candidateId",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 40,
              "description": "Alfa's id for the candidate: `app_…` or `src_…`.",
              "examples": ["app_254928"]
            },
            "required": true,
            "description": "Alfa's id for the candidate: `app_…` or `src_…`."
          },
          {
            "in": "header",
            "name": "Alfa-Company-Id",
            "schema": {
              "description": "The Company ID of the company to act for. Required with a platform key, and that company must have authorized your platform; a company key acts for its own company and can leave it out.",
              "examples": ["org_2abcDEF123"],
              "type": "string"
            },
            "description": "The Company ID of the company to act for. Required with a platform key, and that company must have authorized your platform; a company key acts for its own company and can leave it out."
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/Candidate" } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/integration/candidates/{candidateId}/resume": {
      "get": {
        "operationId": "integration.getCandidateResume",
        "summary": "Get a link to a candidate's resume",
        "description": "A fresh signed link to the resume PDF, valid for 15 minutes. A candidate without a resume, such as a sourced one, is 404 `resume_not_available`.\n\nRequires an API key with the `candidates:read` scope.",
        "tags": ["Candidates"],
        "security": [{ "apiKey": [] }],
        "parameters": [
          {
            "in": "path",
            "name": "candidateId",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 40,
              "description": "Alfa's id for the candidate: `app_…` or `src_…`.",
              "examples": ["app_254928"]
            },
            "required": true,
            "description": "Alfa's id for the candidate: `app_…` or `src_…`."
          },
          {
            "in": "header",
            "name": "Alfa-Company-Id",
            "schema": {
              "description": "The Company ID of the company to act for. Required with a platform key, and that company must have authorized your platform; a company key acts for its own company and can leave it out.",
              "examples": ["org_2abcDEF123"],
              "type": "string"
            },
            "description": "The Company ID of the company to act for. Required with a platform key, and that company must have authorized your platform; a company key acts for its own company and can leave it out."
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "url": {
                      "type": "string",
                      "description": "A signed link to the resume PDF.",
                      "examples": ["https://files.welovealfa.com/resume.pdf?Signature=…"]
                    },
                    "expiresAt": {
                      "type": "string",
                      "description": "When the link stops working: 15 minutes after the request.",
                      "examples": ["2026-10-07T09:45:00.000Z"]
                    }
                  },
                  "required": ["url", "expiresAt"],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/integration/candidates/page": {
      "get": {
        "operationId": "integration.listCandidatesPage",
        "summary": "List candidates",
        "description": "The polling alternative to webhooks: candidates on linked jobs whose status changed at or after `updatedSince`, oldest change first. Each is the same object a webhook sends. Store the last `statusUpdatedAt` you saw and pass it next time.\n\nRequires an API key with the `candidates:read` scope.",
        "tags": ["Candidates"],
        "security": [{ "apiKey": [] }],
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "string",
              "pattern": "^\\d{1,10}$",
              "description": "How many results to return, from 1 to 100. Defaults to 25.",
              "examples": ["25"]
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "description": "The `nextCursor` of the previous page. Leave it out for the first page.",
              "examples": ["eyJwIjpbIjEyIl0sInMiOiJ4In0.mT3…"],
              "type": "string",
              "minLength": 1,
              "maxLength": 2048
            },
            "description": "The `nextCursor` of the previous page. Leave it out for the first page."
          },
          {
            "in": "query",
            "name": "updatedSince",
            "schema": {
              "description": "Only candidates whose status changed at or after this time.",
              "examples": ["2026-10-07T00:00:00Z"],
              "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|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "description": "Only candidates whose status changed at or after this time."
          },
          {
            "in": "query",
            "name": "jobId",
            "schema": {
              "type": "string",
              "pattern": "^\\d{1,10}$",
              "description": "Only candidates on this Alfa job.",
              "examples": ["9301"]
            }
          },
          {
            "in": "header",
            "name": "Alfa-Company-Id",
            "schema": {
              "description": "The Company ID of the company to act for. Required with a platform key, and that company must have authorized your platform; a company key acts for its own company and can leave it out.",
              "examples": ["org_2abcDEF123"],
              "type": "string"
            },
            "description": "The Company ID of the company to act for. Required with a platform key, and that company must have authorized your platform; a company key acts for its own company and can leave it out."
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/Candidate" },
                      "description": "The results on this page."
                    },
                    "nextCursor": {
                      "description": "Pass as `cursor` to read the next page; null on the last page.",
                      "examples": ["eyJwIjpbIjEyIl0sInMiOiJ4In0.mT3…"],
                      "type": ["string", "null"]
                    }
                  },
                  "required": ["data", "nextCursor"],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/integration/jobs/{jobId}": {
      "get": {
        "operationId": "integration.getJob",
        "summary": "Get a linked Alfa job",
        "description": "One Alfa job linked to an ATS job. A job that is not linked, or belongs to another company, is 404.\n\nRequires an API key with the `jobs:read` scope.",
        "tags": ["Jobs"],
        "security": [{ "apiKey": [] }],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "type": "string",
              "pattern": "^\\d{1,10}$",
              "description": "Alfa's id for the job.",
              "examples": ["9301"]
            },
            "required": true
          },
          {
            "in": "header",
            "name": "Alfa-Company-Id",
            "schema": {
              "description": "The Company ID of the company to act for. Required with a platform key, and that company must have authorized your platform; a company key acts for its own company and can leave it out.",
              "examples": ["org_2abcDEF123"],
              "type": "string"
            },
            "description": "The Company ID of the company to act for. Required with a platform key, and that company must have authorized your platform; a company key acts for its own company and can leave it out."
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Job" } } }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/integration/jobs/page": {
      "get": {
        "operationId": "integration.listJobsPage",
        "summary": "List linked Alfa jobs",
        "description": "The Alfa jobs a recruiter has linked to one of your ATS jobs, newest first.\n\nRequires an API key with the `jobs:read` scope.",
        "tags": ["Jobs"],
        "security": [{ "apiKey": [] }],
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "string",
              "pattern": "^\\d{1,10}$",
              "description": "How many results to return, from 1 to 100. Defaults to 25.",
              "examples": ["25"]
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "description": "The `nextCursor` of the previous page. Leave it out for the first page.",
              "examples": ["eyJwIjpbIjEyIl0sInMiOiJ4In0.mT3…"],
              "type": "string",
              "minLength": 1,
              "maxLength": 2048
            },
            "description": "The `nextCursor` of the previous page. Leave it out for the first page."
          },
          {
            "in": "query",
            "name": "externalJobId",
            "schema": {
              "description": "Only jobs linked to this ATS job.",
              "examples": ["job_8841"],
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            },
            "description": "Only jobs linked to this ATS job."
          },
          {
            "in": "header",
            "name": "Alfa-Company-Id",
            "schema": {
              "description": "The Company ID of the company to act for. Required with a platform key, and that company must have authorized your platform; a company key acts for its own company and can leave it out.",
              "examples": ["org_2abcDEF123"],
              "type": "string"
            },
            "description": "The Company ID of the company to act for. Required with a platform key, and that company must have authorized your platform; a company key acts for its own company and can leave it out."
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/Job" },
                      "description": "The results on this page."
                    },
                    "nextCursor": {
                      "description": "Pass as `cursor` to read the next page; null on the last page.",
                      "examples": ["eyJwIjpbIjEyIl0sInMiOiJ4In0.mT3…"],
                      "type": ["string", "null"]
                    }
                  },
                  "required": ["data", "nextCursor"],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/integration/webhook-deliveries/{deliveryId}/redeliver": {
      "post": {
        "operationId": "integration.redeliverWebhook",
        "summary": "Send an event again",
        "description": "Queues the delivery's event to be sent again, with the same event id, within a minute.\n\nRequires an API key with the `webhooks:manage` scope.",
        "tags": ["Webhooks"],
        "security": [{ "apiKey": [] }],
        "parameters": [
          {
            "in": "path",
            "name": "deliveryId",
            "schema": {
              "type": "string",
              "pattern": "^\\d{1,10}$",
              "description": "The delivery attempt id.",
              "examples": ["7715"]
            },
            "required": true
          },
          {
            "in": "header",
            "name": "Alfa-Company-Id",
            "schema": {
              "description": "The Company ID of the company to act for. Required with a platform key, and that company must have authorized your platform; a company key acts for its own company and can leave it out.",
              "examples": ["org_2abcDEF123"],
              "type": "string"
            },
            "description": "The Company ID of the company to act for. Required with a platform key, and that company must have authorized your platform; a company key acts for its own company and can leave it out."
          }
        ],
        "responses": {
          "202": {
            "description": "Accepted for background processing.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "eventId": {
                      "type": "string",
                      "description": "The event that will be sent again, with the same id.",
                      "examples": ["0b7c3c58-3c9a-4a8e-9a2e-6f1f8a0c9d11"]
                    },
                    "status": {
                      "type": "string",
                      "const": "queued",
                      "description": "The event is sent again within a minute.",
                      "examples": ["queued"]
                    }
                  },
                  "required": ["eventId", "status"],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/integration/webhook-deliveries/page": {
      "get": {
        "operationId": "integration.listWebhookDeliveriesPage",
        "summary": "List webhook deliveries",
        "description": "Every delivery attempt to your endpoint, newest first, with the status your endpoint answered and how long it took. Bodies are not stored.\n\nRequires an API key with the `webhooks:manage` scope.",
        "tags": ["Webhooks"],
        "security": [{ "apiKey": [] }],
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "string",
              "pattern": "^\\d{1,10}$",
              "description": "How many results to return, from 1 to 100. Defaults to 25.",
              "examples": ["25"]
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "description": "The `nextCursor` of the previous page. Leave it out for the first page.",
              "examples": ["eyJwIjpbIjEyIl0sInMiOiJ4In0.mT3…"],
              "type": "string",
              "minLength": 1,
              "maxLength": 2048
            },
            "description": "The `nextCursor` of the previous page. Leave it out for the first page."
          },
          {
            "in": "header",
            "name": "Alfa-Company-Id",
            "schema": {
              "description": "The Company ID of the company to act for. Required with a platform key, and that company must have authorized your platform; a company key acts for its own company and can leave it out.",
              "examples": ["org_2abcDEF123"],
              "type": "string"
            },
            "description": "The Company ID of the company to act for. Required with a platform key, and that company must have authorized your platform; a company key acts for its own company and can leave it out."
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "deliveryId": {
                            "type": "integer",
                            "description": "The delivery attempt id.",
                            "examples": [7715]
                          },
                          "eventId": {
                            "type": "string",
                            "description": "The event id; every attempt of one event shares it.",
                            "examples": ["0b7c3c58-3c9a-4a8e-9a2e-6f1f8a0c9d11"]
                          },
                          "eventType": {
                            "type": "string",
                            "description": "The event type.",
                            "examples": ["candidate.screened"]
                          },
                          "keyId": {
                            "type": "integer",
                            "description": "The API key whose endpoint was called.",
                            "examples": [41]
                          },
                          "companyId": {
                            "type": "string",
                            "description": "The company the event belongs to.",
                            "examples": ["org_2abcDEF123"]
                          },
                          "jobId": {
                            "description": "The Alfa job, for candidate events.",
                            "examples": [9301],
                            "type": ["integer", "null"]
                          },
                          "candidateId": {
                            "description": "The candidate, for candidate events.",
                            "examples": ["app_254928"],
                            "type": ["string", "null"]
                          },
                          "attempt": {
                            "type": "integer",
                            "description": "The attempt number, from 1.",
                            "examples": [1]
                          },
                          "statusCode": {
                            "description": "The status your endpoint answered with.",
                            "examples": [200],
                            "type": ["integer", "null"]
                          },
                          "durationMs": {
                            "type": "integer",
                            "description": "How long the request took.",
                            "examples": [182]
                          },
                          "error": {
                            "description": "Why the attempt failed, when it did.",
                            "examples": [null],
                            "type": ["string", "null"]
                          },
                          "succeeded": {
                            "type": "boolean",
                            "description": "Whether the attempt got a 2xx answer.",
                            "examples": [true]
                          },
                          "attemptedAt": {
                            "type": "string",
                            "description": "When the attempt was made.",
                            "examples": ["2026-10-07T09:30:00.000Z"]
                          }
                        },
                        "required": [
                          "deliveryId",
                          "eventId",
                          "eventType",
                          "keyId",
                          "companyId",
                          "jobId",
                          "candidateId",
                          "attempt",
                          "statusCode",
                          "durationMs",
                          "error",
                          "succeeded",
                          "attemptedAt"
                        ],
                        "additionalProperties": false
                      },
                      "description": "The results on this page."
                    },
                    "nextCursor": {
                      "description": "Pass as `cursor` to read the next page; null on the last page.",
                      "examples": ["eyJwIjpbIjEyIl0sInMiOiJ4In0.mT3…"],
                      "type": ["string", "null"]
                    }
                  },
                  "required": ["data", "nextCursor"],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/integration/webhook-endpoint": {
      "get": {
        "operationId": "integration.getWebhookEndpoint",
        "summary": "Get your webhook endpoint",
        "description": "The endpoint this key receives the company's events at. 404 until one is set.\n\nRequires an API key with the `webhooks:manage` scope.",
        "tags": ["Webhooks"],
        "security": [{ "apiKey": [] }],
        "parameters": [
          {
            "in": "header",
            "name": "Alfa-Company-Id",
            "schema": {
              "description": "The Company ID of the company to act for. Required with a platform key, and that company must have authorized your platform; a company key acts for its own company and can leave it out.",
              "examples": ["org_2abcDEF123"],
              "type": "string"
            },
            "description": "The Company ID of the company to act for. Required with a platform key, and that company must have authorized your platform; a company key acts for its own company and can leave it out."
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "keyId": {
                      "type": "integer",
                      "description": "The API key the endpoint belongs to.",
                      "examples": [41]
                    },
                    "companyId": {
                      "type": "string",
                      "description": "The company whose events it receives.",
                      "examples": ["org_2abcDEF123"]
                    },
                    "url": {
                      "type": "string",
                      "description": "Where events are sent.",
                      "examples": ["https://ats.example.com/alfa/webhooks"]
                    },
                    "status": {
                      "type": "string",
                      "enum": ["enabled", "disabled"],
                      "description": "`disabled` after three days of failed deliveries, or once removed. Setting the URL again enables it.",
                      "examples": ["enabled"]
                    },
                    "failingSince": {
                      "description": "When the current run of failed deliveries began; null while deliveries succeed.",
                      "examples": [null],
                      "type": ["string", "null"]
                    },
                    "disabledAt": {
                      "description": "When the endpoint was disabled.",
                      "examples": [null],
                      "type": ["string", "null"]
                    },
                    "createdAt": {
                      "type": "string",
                      "description": "When the endpoint was created.",
                      "examples": ["2026-10-07T09:30:00.000Z"]
                    },
                    "updatedAt": {
                      "type": "string",
                      "description": "When the endpoint last changed.",
                      "examples": ["2026-10-07T09:30:00.000Z"]
                    },
                    "secret": {
                      "description": "The signing secret, returned only when it is created or rotated. Store it; it is never shown again.",
                      "examples": ["whsec_Jd8…"],
                      "type": "string"
                    }
                  },
                  "required": [
                    "keyId",
                    "companyId",
                    "url",
                    "status",
                    "failingSince",
                    "disabledAt",
                    "createdAt",
                    "updatedAt"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      },
      "put": {
        "operationId": "integration.setWebhookEndpoint",
        "summary": "Set your webhook endpoint",
        "description": "Sets the HTTPS URL this key receives the company's events at, and enables it. The first time, the answer includes the signing `secret`, shown only once. A platform key sets one endpoint for each client company, named by `Alfa-Company-Id`. A URL that resolves to a private or internal address is 422 `invalid_webhook_url`.\n\nRequires an API key with the `webhooks:manage` scope.",
        "tags": ["Webhooks"],
        "security": [{ "apiKey": [] }],
        "parameters": [
          {
            "in": "header",
            "name": "Alfa-Company-Id",
            "schema": {
              "description": "The Company ID of the company to act for. Required with a platform key, and that company must have authorized your platform; a company key acts for its own company and can leave it out.",
              "examples": ["org_2abcDEF123"],
              "type": "string"
            },
            "description": "The Company ID of the company to act for. Required with a platform key, and that company must have authorized your platform; a company key acts for its own company and can leave it out."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "maxLength": 2000,
                    "format": "uri",
                    "description": "An HTTPS URL on the public internet.",
                    "examples": ["https://ats.example.com/alfa/webhooks"]
                  }
                },
                "required": ["url"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "keyId": {
                      "type": "integer",
                      "description": "The API key the endpoint belongs to.",
                      "examples": [41]
                    },
                    "companyId": {
                      "type": "string",
                      "description": "The company whose events it receives.",
                      "examples": ["org_2abcDEF123"]
                    },
                    "url": {
                      "type": "string",
                      "description": "Where events are sent.",
                      "examples": ["https://ats.example.com/alfa/webhooks"]
                    },
                    "status": {
                      "type": "string",
                      "enum": ["enabled", "disabled"],
                      "description": "`disabled` after three days of failed deliveries, or once removed. Setting the URL again enables it.",
                      "examples": ["enabled"]
                    },
                    "failingSince": {
                      "description": "When the current run of failed deliveries began; null while deliveries succeed.",
                      "examples": [null],
                      "type": ["string", "null"]
                    },
                    "disabledAt": {
                      "description": "When the endpoint was disabled.",
                      "examples": [null],
                      "type": ["string", "null"]
                    },
                    "createdAt": {
                      "type": "string",
                      "description": "When the endpoint was created.",
                      "examples": ["2026-10-07T09:30:00.000Z"]
                    },
                    "updatedAt": {
                      "type": "string",
                      "description": "When the endpoint last changed.",
                      "examples": ["2026-10-07T09:30:00.000Z"]
                    },
                    "secret": {
                      "description": "The signing secret, returned only when it is created or rotated. Store it; it is never shown again.",
                      "examples": ["whsec_Jd8…"],
                      "type": "string"
                    }
                  },
                  "required": [
                    "keyId",
                    "companyId",
                    "url",
                    "status",
                    "failingSince",
                    "disabledAt",
                    "createdAt",
                    "updatedAt"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      },
      "delete": {
        "operationId": "integration.removeWebhookEndpoint",
        "summary": "Remove your webhook endpoint",
        "description": "Stops sending events to this key's endpoint for the company and drops any not yet delivered. The delivery log is kept. Setting a URL again creates a new endpoint with a new signing secret.\n\nRequires an API key with the `webhooks:manage` scope.",
        "tags": ["Webhooks"],
        "security": [{ "apiKey": [] }],
        "parameters": [
          {
            "in": "header",
            "name": "Alfa-Company-Id",
            "schema": {
              "description": "The Company ID of the company to act for. Required with a platform key, and that company must have authorized your platform; a company key acts for its own company and can leave it out.",
              "examples": ["org_2abcDEF123"],
              "type": "string"
            },
            "description": "The Company ID of the company to act for. Required with a platform key, and that company must have authorized your platform; a company key acts for its own company and can leave it out."
          }
        ],
        "responses": {
          "204": { "description": "Success, with no response body." },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/integration/webhook-endpoint/rotate-secret": {
      "post": {
        "operationId": "integration.rotateWebhookSecret",
        "summary": "Rotate the signing secret",
        "description": "Replaces the signing secret and returns the new one once. Deliveries are signed with the new secret straight away.\n\nRequires an API key with the `webhooks:manage` scope.",
        "tags": ["Webhooks"],
        "security": [{ "apiKey": [] }],
        "parameters": [
          {
            "in": "header",
            "name": "Alfa-Company-Id",
            "schema": {
              "description": "The Company ID of the company to act for. Required with a platform key, and that company must have authorized your platform; a company key acts for its own company and can leave it out.",
              "examples": ["org_2abcDEF123"],
              "type": "string"
            },
            "description": "The Company ID of the company to act for. Required with a platform key, and that company must have authorized your platform; a company key acts for its own company and can leave it out."
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "keyId": {
                      "type": "integer",
                      "description": "The API key the endpoint belongs to.",
                      "examples": [41]
                    },
                    "companyId": {
                      "type": "string",
                      "description": "The company whose events it receives.",
                      "examples": ["org_2abcDEF123"]
                    },
                    "url": {
                      "type": "string",
                      "description": "Where events are sent.",
                      "examples": ["https://ats.example.com/alfa/webhooks"]
                    },
                    "status": {
                      "type": "string",
                      "enum": ["enabled", "disabled"],
                      "description": "`disabled` after three days of failed deliveries, or once removed. Setting the URL again enables it.",
                      "examples": ["enabled"]
                    },
                    "failingSince": {
                      "description": "When the current run of failed deliveries began; null while deliveries succeed.",
                      "examples": [null],
                      "type": ["string", "null"]
                    },
                    "disabledAt": {
                      "description": "When the endpoint was disabled.",
                      "examples": [null],
                      "type": ["string", "null"]
                    },
                    "createdAt": {
                      "type": "string",
                      "description": "When the endpoint was created.",
                      "examples": ["2026-10-07T09:30:00.000Z"]
                    },
                    "updatedAt": {
                      "type": "string",
                      "description": "When the endpoint last changed.",
                      "examples": ["2026-10-07T09:30:00.000Z"]
                    },
                    "secret": {
                      "description": "The signing secret, returned only when it is created or rotated. Store it; it is never shown again.",
                      "examples": ["whsec_Jd8…"],
                      "type": "string"
                    }
                  },
                  "required": [
                    "keyId",
                    "companyId",
                    "url",
                    "status",
                    "failingSince",
                    "disabledAt",
                    "createdAt",
                    "updatedAt"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/integration/webhook-endpoint/test": {
      "post": {
        "operationId": "integration.testWebhookEndpoint",
        "summary": "Send a test event",
        "description": "Sends a signed `webhook.test` event with a sample candidate to your endpoint now, and reports how it answered.\n\nRequires an API key with the `webhooks:manage` scope.",
        "tags": ["Webhooks"],
        "security": [{ "apiKey": [] }],
        "parameters": [
          {
            "in": "header",
            "name": "Alfa-Company-Id",
            "schema": {
              "description": "The Company ID of the company to act for. Required with a platform key, and that company must have authorized your platform; a company key acts for its own company and can leave it out.",
              "examples": ["org_2abcDEF123"],
              "type": "string"
            },
            "description": "The Company ID of the company to act for. Required with a platform key, and that company must have authorized your platform; a company key acts for its own company and can leave it out."
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "eventId": {
                      "type": "string",
                      "description": "The id of the `webhook.test` event sent.",
                      "examples": ["0b7c3c58-3c9a-4a8e-9a2e-6f1f8a0c9d11"]
                    },
                    "delivered": {
                      "type": "boolean",
                      "description": "Whether your endpoint answered with a 2xx status.",
                      "examples": [true]
                    },
                    "statusCode": {
                      "description": "The status your endpoint answered with; null when it could not be reached.",
                      "examples": [200],
                      "type": ["integer", "null"]
                    },
                    "durationMs": {
                      "type": "integer",
                      "description": "How long the request took.",
                      "examples": [182]
                    },
                    "error": {
                      "description": "Why the delivery failed, when it did.",
                      "examples": [null],
                      "type": ["string", "null"]
                    }
                  },
                  "required": ["eventId", "delivered", "statusCode", "durationMs", "error"],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/interview-availability": {
      "get": {
        "operationId": "getInterviewAvailability",
        "summary": "Get the caller's interview availability",
        "tags": ["Interviews"],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      },
      "put": {
        "operationId": "saveInterviewAvailability",
        "summary": "Replace the caller's interview availability",
        "tags": ["Interviews"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "description": "The weekly hours, slot length, buffers and overrides",
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/interviews": {
      "get": {
        "operationId": "listInterviews",
        "summary": "List the caller's interviews",
        "tags": ["Interviews"],
        "parameters": [
          {
            "in": "query",
            "name": "scope",
            "schema": {
              "type": "string",
              "enum": ["upcoming", "invited", "past", "cancelled", "range"]
            }
          },
          { "in": "query", "name": "from", "schema": { "type": "string" } },
          { "in": "query", "name": "to", "schema": { "type": "string" } }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/interviews/{bookingId}/cancel": {
      "post": {
        "operationId": "cancelInterview",
        "summary": "Cancel an interview and tell the candidate",
        "tags": ["Interviews"],
        "parameters": [
          {
            "in": "path",
            "name": "bookingId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": { "reason": { "type": "string" } },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/interviews/{bookingId}/meet-now": {
      "post": {
        "operationId": "meetNowInterview",
        "summary": "Start an interview now and email the candidate a join link",
        "tags": ["Interviews"],
        "parameters": [
          {
            "in": "path",
            "name": "bookingId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/interviews/{bookingId}/recording": {
      "get": {
        "operationId": "getInterviewRecording",
        "summary": "Get a short-lived link to an interview's recording",
        "tags": ["Interviews"],
        "parameters": [
          {
            "in": "path",
            "name": "bookingId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/job-setup/ats-jobs": {
      "get": {
        "operationId": "listAtsJobs",
        "summary": "The jobs in the organisation's connected ATS",
        "tags": ["Job setup"],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/job-setup/coordinates": {
      "get": {
        "operationId": "getLocationCoordinates",
        "summary": "The coordinates of a place in a country",
        "tags": ["Job setup"],
        "parameters": [
          {
            "in": "query",
            "name": "location",
            "schema": { "type": "string", "minLength": 1, "maxLength": 250 },
            "required": true
          },
          {
            "in": "query",
            "name": "country",
            "schema": { "type": "string", "minLength": 1, "maxLength": 80 },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/job-setup/generate-description": {
      "post": {
        "operationId": "generateJobDescription",
        "summary": "Write a job advert",
        "description": "Grounds the advert on the recruiter's current draft and the job's fields when they are sent.",
        "tags": ["Job setup"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "jobTitle": { "type": "string", "minLength": 1 },
                  "languageCode": { "type": "string" },
                  "description": { "type": "string" },
                  "jobData": {
                    "description": "The job fields the advert describes",
                    "type": "object"
                  }
                },
                "required": ["jobTitle"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/job-setup/hiring-likelihood": {
      "post": {
        "operationId": "estimateHiringLikelihood",
        "summary": "Estimate how likely a job is to be filled",
        "description": "With `jobId`, the score and seniority level are also saved on that job.",
        "tags": ["Job setup"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "jobData": {
                    "description": "The job fields the estimate reads",
                    "type": "object"
                  },
                  "jobId": { "type": "integer", "exclusiveMinimum": 0 }
                },
                "required": ["jobData"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/job-setup/hiring-likelihood/recommendations": {
      "post": {
        "operationId": "recommendHiringLikelihood",
        "summary": "Recommend changes that make a job more likely to be filled",
        "description": "With `jobId`, the recommendations are also saved on that job.",
        "tags": ["Job setup"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "jobData": {
                    "description": "The job fields the estimate reads",
                    "type": "object"
                  },
                  "jobId": { "type": "integer", "exclusiveMinimum": 0 }
                },
                "required": ["jobData"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/job-setup/job-facets/{kind}": {
      "get": {
        "operationId": "listJobFacetOptions",
        "summary": "The fixed LinkedIn industry, job function or seniority options",
        "tags": ["Job setup"],
        "parameters": [
          {
            "in": "path",
            "name": "kind",
            "schema": { "type": "string", "enum": ["industry", "function", "seniority"] },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/job-setup/job-titles": {
      "get": {
        "operationId": "searchJobTitles",
        "summary": "Standard LinkedIn job titles matching typed text",
        "tags": ["Job setup"],
        "parameters": [
          {
            "in": "query",
            "name": "query",
            "schema": { "type": "string", "maxLength": 250 },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/job-setup/locations": {
      "get": {
        "operationId": "searchLocations",
        "summary": "Places matching typed text",
        "tags": ["Job setup"],
        "parameters": [
          {
            "in": "query",
            "name": "query",
            "schema": { "type": "string", "maxLength": 250 },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/job-setup/locations/resolve": {
      "get": {
        "operationId": "resolveLocation",
        "summary": "The advertising place for a named location",
        "description": "Falls back to the nearest containing area, or the whole country, rather than failing.",
        "tags": ["Job setup"],
        "parameters": [
          {
            "in": "query",
            "name": "location",
            "schema": { "type": "string", "minLength": 1, "maxLength": 250 },
            "required": true
          },
          {
            "in": "query",
            "name": "country",
            "schema": { "type": "string", "minLength": 1, "maxLength": 80 },
            "required": true
          },
          {
            "in": "query",
            "name": "kind",
            "schema": { "type": "string", "enum": ["city", "region", "postcode"] }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/job-setup/map-config": {
      "get": {
        "operationId": "getMapConfig",
        "summary": "The browser key for the advertising map",
        "tags": ["Job setup"],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs": {
      "get": {
        "operationId": "listJobs",
        "summary": "List the jobs the caller can see",
        "tags": ["Jobs"],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      },
      "post": {
        "operationId": "createJob",
        "summary": "Create an empty job draft",
        "tags": ["Jobs"],
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "examples": ["3f0c1d8e-6b6a-4f7e-9a51-0d2c5e7b9f10"],
              "description": "A unique value, such as a UUID, sent unchanged on every retry of one request. A retry after the request succeeded returns the same response, marked `Idempotent-Replayed: true`, without running the operation again. Reusing a key for a different request is a 422.",
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            },
            "description": "A unique value, such as a UUID, sent unchanged on every retry of one request. A retry after the request succeeded returns the same response, marked `Idempotent-Replayed: true`, without running the operation again. Reusing a key for a different request is a 422."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": { "geoCountry": { "type": ["string", "null"] } },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "409": { "$ref": "#/components/responses/Problem409" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}": {
      "get": {
        "operationId": "getJob",
        "summary": "Get a job",
        "description": "The job carries its entity tag as `etag` (also the `ETag` header) and the tag of its screening rules as `screening_etag`. Send them as `If-Match` to save without overwriting a change made since.",
        "tags": ["Jobs"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          },
          {
            "in": "query",
            "name": "manageTeamVisibility",
            "schema": {
              "anyOf": [{ "type": "boolean" }, { "type": "string", "enum": ["true", "false"] }]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "headers": {
              "ETag": {
                "description": "The resource's entity tag, also in the body as `etag`.",
                "schema": { "type": "string" }
              }
            },
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      },
      "put": {
        "operationId": "updateJob",
        "summary": "Save a job",
        "description": "Writes the job profile. The job title, work arrangement and advert must be present unless only the team visibility is managed. With `If-Match`, the save fails with 412 when the job changed since that tag was read; the saved job carries its new `etag`.",
        "tags": ["Jobs"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          },
          {
            "in": "header",
            "name": "If-Match",
            "schema": {
              "description": "The `etag` you read. The write applies only if the resource still has it; otherwise it fails with 412 and changes nothing.",
              "type": "string"
            },
            "description": "The `etag` you read. The write applies only if the resource still has it; otherwise it fails with 412 and changes nothing."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "description": "The job profile fields to save", "type": "object" }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "headers": {
              "ETag": {
                "description": "The resource's entity tag, also in the body as `etag`.",
                "schema": { "type": "string" }
              }
            },
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "412": { "$ref": "#/components/responses/Problem412" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/activity": {
      "get": {
        "operationId": "listJobActivity",
        "summary": "List a job's audit history, newest first",
        "tags": ["Job board"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/activity/exists": {
      "get": {
        "operationId": "checkJobActivity",
        "summary": "Whether a job has any audit history",
        "tags": ["Job board"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/activity/page": {
      "get": {
        "operationId": "listJobActivityPage",
        "summary": "List a job's whole audit history, newest first, a page at a time",
        "description": "The same entries as the job history, without its limit of the latest 200. Pass `nextCursor` back as `cursor` for the next page.",
        "tags": ["Job board"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          },
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "anyOf": [{ "type": "integer" }, { "type": "string", "pattern": "^-?\\d+$" }]
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "schema": { "type": "string", "minLength": 1, "maxLength": 512 }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Page" } } }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/applications": {
      "get": {
        "operationId": "listJobApplications",
        "summary": "List a job's applications, a page at a time",
        "description": "Page zero also carries every live sourced profile on the board. `limit` defaults to 250, and a larger value is reduced to 250. `includeFilteredTotal` adds the exact filtered total to the pagination.",
        "tags": ["Applications"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          },
          {
            "in": "query",
            "name": "page",
            "schema": {
              "anyOf": [{ "type": "integer" }, { "type": "string", "pattern": "^-?\\d+$" }]
            }
          },
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "anyOf": [{ "type": "integer" }, { "type": "string", "pattern": "^-?\\d+$" }]
            }
          },
          {
            "in": "query",
            "name": "aiFilter",
            "schema": { "type": "string", "enum": ["suitable", "not_suitable", "incomplete"] }
          },
          {
            "in": "query",
            "name": "humanFilter",
            "schema": { "type": "string", "enum": ["reject", "shortlist", "pending"] }
          },
          {
            "in": "query",
            "name": "interviewed",
            "schema": {
              "anyOf": [{ "type": "boolean" }, { "type": "string", "enum": ["true", "false"] }]
            }
          },
          {
            "in": "query",
            "name": "favourite",
            "schema": {
              "anyOf": [{ "type": "boolean" }, { "type": "string", "enum": ["true", "false"] }]
            }
          },
          {
            "in": "query",
            "name": "sortBy",
            "schema": { "type": "string", "enum": ["date", "score"] }
          },
          { "in": "query", "name": "search", "schema": { "type": "string" } },
          {
            "in": "query",
            "name": "includeFilteredTotal",
            "schema": {
              "anyOf": [{ "type": "boolean" }, { "type": "string", "enum": ["true", "false"] }]
            }
          },
          {
            "in": "query",
            "name": "boardOrder",
            "schema": {
              "anyOf": [{ "type": "boolean" }, { "type": "string", "enum": ["true", "false"] }]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/applications/bulk-favourite": {
      "post": {
        "operationId": "bulkFavouriteApplications",
        "summary": "Shortlist applications",
        "tags": ["Applications"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "examples": ["3f0c1d8e-6b6a-4f7e-9a51-0d2c5e7b9f10"],
              "description": "A unique value, such as a UUID, sent unchanged on every retry of one request. A retry after the request succeeded returns the same response, marked `Idempotent-Replayed: true`, without running the operation again. Reusing a key for a different request is a 422.",
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            },
            "description": "A unique value, such as a UUID, sent unchanged on every retry of one request. A retry after the request succeeded returns the same response, marked `Idempotent-Replayed: true`, without running the operation again. Reusing a key for a different request is a 422."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "candidateIds": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "anyOf": [
                        { "type": "integer", "exclusiveMinimum": 0 },
                        { "type": "string", "minLength": 1 }
                      ]
                    }
                  }
                },
                "required": ["candidateIds"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "409": { "$ref": "#/components/responses/Problem409" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/applications/bulk-reject": {
      "post": {
        "operationId": "bulkRejectApplications",
        "summary": "Reject applications, optionally emailing each candidate",
        "description": "Rejects the listed applications, or every application screened as not suitable when `candidateIds` is left out. `sendEmail` defaults to true.",
        "tags": ["Applications"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "examples": ["3f0c1d8e-6b6a-4f7e-9a51-0d2c5e7b9f10"],
              "description": "A unique value, such as a UUID, sent unchanged on every retry of one request. A retry after the request succeeded returns the same response, marked `Idempotent-Replayed: true`, without running the operation again. Reusing a key for a different request is a 422.",
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            },
            "description": "A unique value, such as a UUID, sent unchanged on every retry of one request. A retry after the request succeeded returns the same response, marked `Idempotent-Replayed: true`, without running the operation again. Reusing a key for a different request is a 422."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "candidateIds": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "anyOf": [
                        { "type": "integer", "exclusiveMinimum": 0 },
                        { "type": "string", "minLength": 1 }
                      ]
                    }
                  },
                  "sendEmail": { "type": "boolean" },
                  "emailContent": { "type": "string" }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "409": { "$ref": "#/components/responses/Problem409" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/applications/bulk-rescreen": {
      "post": {
        "operationId": "bulkRescreenApplications",
        "summary": "Screen applications again",
        "tags": ["Applications"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "examples": ["3f0c1d8e-6b6a-4f7e-9a51-0d2c5e7b9f10"],
              "description": "A unique value, such as a UUID, sent unchanged on every retry of one request. A retry after the request succeeded returns the same response, marked `Idempotent-Replayed: true`, without running the operation again. Reusing a key for a different request is a 422.",
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            },
            "description": "A unique value, such as a UUID, sent unchanged on every retry of one request. A retry after the request succeeded returns the same response, marked `Idempotent-Replayed: true`, without running the operation again. Reusing a key for a different request is a 422."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "candidateIds": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "anyOf": [
                        { "type": "integer", "exclusiveMinimum": 0 },
                        { "type": "string", "minLength": 1 }
                      ]
                    }
                  }
                },
                "required": ["candidateIds"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "409": { "$ref": "#/components/responses/Problem409" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/applications/counts": {
      "get": {
        "operationId": "countJobApplications",
        "summary": "Count a job's applications by status and board column",
        "tags": ["Applications"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/applications/deleted": {
      "get": {
        "operationId": "listDeletedJobApplications",
        "summary": "List a job's deleted applications",
        "tags": ["Applications"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/applications/page": {
      "get": {
        "operationId": "listJobApplicationsPage",
        "summary": "List a job's applications, a page at a time",
        "description": "Newest first, or with `sortBy=score` in the board's order: suitable, then not suitable, then incomplete, each highest score first. The same filters as the board, without its sourced profiles. Pass `nextCursor` back as `cursor` for the next page.",
        "tags": ["Applications"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          },
          {
            "in": "query",
            "name": "aiFilter",
            "schema": { "type": "string", "enum": ["suitable", "not_suitable", "incomplete"] }
          },
          {
            "in": "query",
            "name": "humanFilter",
            "schema": { "type": "string", "enum": ["reject", "shortlist", "pending"] }
          },
          {
            "in": "query",
            "name": "interviewed",
            "schema": {
              "anyOf": [{ "type": "boolean" }, { "type": "string", "enum": ["true", "false"] }]
            }
          },
          {
            "in": "query",
            "name": "favourite",
            "schema": {
              "anyOf": [{ "type": "boolean" }, { "type": "string", "enum": ["true", "false"] }]
            }
          },
          {
            "in": "query",
            "name": "sortBy",
            "schema": { "type": "string", "enum": ["date", "score"] }
          },
          { "in": "query", "name": "search", "schema": { "type": "string" } },
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "anyOf": [{ "type": "integer" }, { "type": "string", "pattern": "^-?\\d+$" }]
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "schema": { "type": "string", "minLength": 1, "maxLength": 512 }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Page" } } }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/applications/rescreen-progress": {
      "post": {
        "operationId": "getRescreenProgress",
        "summary": "Count how many of the given applications are still being screened",
        "description": "A read sent as POST: the ids of a large selection do not fit in a query string.",
        "tags": ["Applications"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "candidateIds": {
                    "maxItems": 1000,
                    "type": "array",
                    "items": { "type": "integer" }
                  }
                },
                "required": ["candidateIds"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/applications/resume-mentions": {
      "get": {
        "operationId": "findApplicationResumeMentions",
        "summary": "Find a job's applications whose resume mentions any of the terms",
        "description": "Searches the resume text of every application the filters select. `matching` counts them all; up to 25, in the board order, come back with the text around each term.",
        "tags": ["Applications"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          },
          {
            "in": "query",
            "name": "terms",
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": { "type": "string", "minLength": 1, "maxLength": 100 }
                },
                { "type": "string", "minLength": 1, "maxLength": 100 }
              ]
            },
            "required": true
          },
          {
            "in": "query",
            "name": "aiFilter",
            "schema": { "type": "string", "enum": ["suitable", "not_suitable", "incomplete"] }
          },
          {
            "in": "query",
            "name": "humanFilter",
            "schema": { "type": "string", "enum": ["reject", "shortlist", "pending"] }
          },
          {
            "in": "query",
            "name": "interviewed",
            "schema": {
              "anyOf": [{ "type": "boolean" }, { "type": "string", "enum": ["true", "false"] }]
            }
          },
          {
            "in": "query",
            "name": "favourite",
            "schema": {
              "anyOf": [{ "type": "boolean" }, { "type": "string", "enum": ["true", "false"] }]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/board-columns": {
      "get": {
        "operationId": "listJobBoardColumns",
        "summary": "List a job's custom board columns with their candidate counts",
        "tags": ["Job board"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      },
      "post": {
        "operationId": "createJobBoardColumn",
        "summary": "Add a custom column to a job board",
        "tags": ["Job board"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": { "type": "string" },
                  "kind": { "type": "string", "enum": ["standard", "interview_booking"] },
                  "interviewMinutes": { "type": "integer", "exclusiveMinimum": 0 }
                },
                "required": ["name"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/board-layout": {
      "get": {
        "operationId": "getJobBoardLayout",
        "summary": "The caller's column order and collapsed columns for a job's board",
        "tags": ["Job board"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      },
      "patch": {
        "operationId": "updateJobBoardLayout",
        "summary": "Change the caller's board layout for a job",
        "description": "Only the lists sent are changed. `apply_to_all` also makes the layout the default for every job and clears the per-job layouts.",
        "tags": ["Job board"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "column_order": {
                    "anyOf": [
                      { "type": "array", "items": { "type": "string" } },
                      { "type": "null" }
                    ]
                  },
                  "minimized_columns": {
                    "anyOf": [
                      { "type": "array", "items": { "type": "string" } },
                      { "type": "null" }
                    ]
                  },
                  "apply_to_all": { "type": "boolean" }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/board-search": {
      "post": {
        "operationId": "searchJobBoard",
        "summary": "Find the candidates on a job's board that match a free-text search",
        "tags": ["Job board"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": { "query": { "type": "string" } },
                "required": ["query"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/boost": {
      "post": {
        "operationId": "boostJobReach",
        "summary": "Spend credits on more reach for a live job",
        "description": "Starts a new sourcing campaign across the chosen channels and countries. `requestId` makes a retried request idempotent.",
        "tags": ["Jobs"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "examples": ["3f0c1d8e-6b6a-4f7e-9a51-0d2c5e7b9f10"],
              "description": "A unique value, such as a UUID, sent unchanged on every retry of one request. A retry after the request succeeded returns the same response, marked `Idempotent-Replayed: true`, without running the operation again. Reusing a key for a different request is a 422.",
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            },
            "description": "A unique value, such as a UUID, sent unchanged on every retry of one request. A retry after the request succeeded returns the same response, marked `Idempotent-Replayed: true`, without running the operation again. Reusing a key for a different request is a 422."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "credits": { "type": "integer", "exclusiveMinimum": 0 },
                  "sourcingChannels": {
                    "description": "Credits per sourcing channel",
                    "type": "object"
                  },
                  "advertisingCountries": {
                    "type": "array",
                    "items": {
                      "description": "A country, region or place to advertise in",
                      "type": "object"
                    }
                  },
                  "requestId": { "type": "string" }
                },
                "required": ["credits"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "409": { "$ref": "#/components/responses/Problem409" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/candidate-sort": {
      "get": {
        "operationId": "getJobCandidateSort",
        "summary": "The caller's candidate sort and custom order on a job's board",
        "tags": ["Job board"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      },
      "patch": {
        "operationId": "updateJobCandidateSort",
        "summary": "Change the caller's candidate sort or custom order on a job's board",
        "tags": ["Job board"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "sortBy": { "type": "string", "enum": ["score", "date", "custom"] },
                  "candidateOrder": { "type": "array", "items": { "type": "string" } }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/classify-labels": {
      "post": {
        "operationId": "classifyJobLabels",
        "summary": "Fill a new draft's seniority and LinkedIn labels",
        "description": "Only labels that are not set yet are filled.",
        "tags": ["Jobs"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/close": {
      "post": {
        "operationId": "closeJob",
        "summary": "Close a job",
        "description": "Closes a live job, or deletes a draft when `requireDraft` is set.",
        "tags": ["Jobs"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "closureReason": { "type": "string" },
                  "closureFeedback": { "type": "string" },
                  "requireDraft": { "type": "boolean" }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/duplicate": {
      "post": {
        "operationId": "duplicateJob",
        "summary": "Copy a job into a new draft",
        "tags": ["Jobs"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "examples": ["3f0c1d8e-6b6a-4f7e-9a51-0d2c5e7b9f10"],
              "description": "A unique value, such as a UUID, sent unchanged on every retry of one request. A retry after the request succeeded returns the same response, marked `Idempotent-Replayed: true`, without running the operation again. Reusing a key for a different request is a 422.",
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            },
            "description": "A unique value, such as a UUID, sent unchanged on every retry of one request. A retry after the request succeeded returns the same response, marked `Idempotent-Replayed: true`, without running the operation again. Reusing a key for a different request is a 422."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": { "jobTitle": { "type": "string", "minLength": 1 } },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "409": { "$ref": "#/components/responses/Problem409" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/interview-booking-preview": {
      "get": {
        "operationId": "getInterviewBookingPreview",
        "summary": "Preview the booking page an interview stage's invitation opens",
        "tags": ["Interviews"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          },
          {
            "in": "query",
            "name": "customColumnId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/interview-booking-preview/slots": {
      "get": {
        "operationId": "listInterviewBookingPreviewSlots",
        "summary": "List the start times the preview's booking page offers in a window",
        "tags": ["Interviews"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          },
          {
            "in": "query",
            "name": "customColumnId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            }
          },
          { "in": "query", "name": "from", "schema": { "type": "string" }, "required": true },
          { "in": "query", "name": "to", "schema": { "type": "string" }, "required": true }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/meetings": {
      "get": {
        "operationId": "listJobMeetings",
        "summary": "List the recorded meetings linked to a job",
        "tags": ["Meetings"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/outreach-pause": {
      "get": {
        "operationId": "getJobOutreachPause",
        "summary": "Read whether a job's outreach is paused",
        "tags": ["Sourced candidates"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      },
      "put": {
        "operationId": "pauseJobOutreach",
        "summary": "Pause a job's outreach",
        "description": "Agentic emails for the job stop; emails already sending cannot be recalled. A pause the email provider could not confirm comes back with `success: false` and status `error`; retry it.",
        "tags": ["Sourced candidates"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/pin": {
      "put": {
        "operationId": "pinJob",
        "summary": "Pin a job to the sidebar",
        "tags": ["Jobs"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      },
      "delete": {
        "operationId": "unpinJob",
        "summary": "Unpin a job",
        "tags": ["Jobs"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/profile-search": {
      "post": {
        "operationId": "searchCandidateProfile",
        "summary": "Find the phrases of a candidate profile's text that match a free-text search",
        "description": "The text arrives as blocks from the profile on screen; the job scopes access.",
        "tags": ["Job board"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "query": { "type": "string" },
                  "blocks": { "type": "array", "items": { "type": "string" } }
                },
                "required": ["query", "blocks"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/publish": {
      "post": {
        "operationId": "publishJob",
        "summary": "Publish a job",
        "tags": ["Jobs"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "examples": ["3f0c1d8e-6b6a-4f7e-9a51-0d2c5e7b9f10"],
              "description": "A unique value, such as a UUID, sent unchanged on every retry of one request. A retry after the request succeeded returns the same response, marked `Idempotent-Replayed: true`, without running the operation again. Reusing a key for a different request is a 422.",
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            },
            "description": "A unique value, such as a UUID, sent unchanged on every retry of one request. A retry after the request succeeded returns the same response, marked `Idempotent-Replayed: true`, without running the operation again. Reusing a key for a different request is a 422."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "sourcingReview": {
                    "description": "The sourcing settings the recruiter reviewed before publishing",
                    "type": "object"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "409": { "$ref": "#/components/responses/Problem409" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/reopen": {
      "post": {
        "operationId": "reopenJob",
        "summary": "Reopen a closed job",
        "tags": ["Jobs"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/review-checks": {
      "post": {
        "operationId": "runJobReviewChecks",
        "summary": "Run the final review's checks on an unsaved job draft",
        "tags": ["Jobs"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "draft": { "description": "The unsaved job draft to check", "type": "object" }
                },
                "required": ["draft"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/review-checks/fix": {
      "post": {
        "operationId": "fixJobReviewCheck",
        "summary": "Write the draft change that clears one failed review check",
        "description": "Nothing is saved; the fixed fields are returned for the draft.",
        "tags": ["Jobs"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "draft": { "description": "The unsaved job draft to check", "type": "object" },
                  "check": {
                    "type": "string",
                    "enum": [
                      "screening_leak",
                      "consistency",
                      "bias_age",
                      "bias_sex",
                      "bias_race",
                      "bias_religion",
                      "bias_disability",
                      "bias_sexual_orientation",
                      "bias_family"
                    ]
                  },
                  "explanation": { "type": ["string", "null"] }
                },
                "required": ["draft", "check"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/screening": {
      "get": {
        "operationId": "getJobScreening",
        "summary": "Get a job's screening criteria",
        "description": "The skills, screening rules and screening lists, with the entity tag of the three together as `etag` (also the `ETag` header).",
        "tags": ["Jobs"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "headers": {
              "ETag": {
                "description": "The resource's entity tag, also in the body as `etag`.",
                "schema": { "type": "string" }
              }
            },
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      },
      "patch": {
        "operationId": "updateJobScreening",
        "summary": "Change a job's screening criteria, and optionally re-screen its applicants",
        "description": "Works at any job status. Send the `etag` of the criteria you loaded as `If-Match`: the save fails with 412 when they changed since, and the response carries the new `etag`. `expectedSkills` is the older guard on the skills alone and is deprecated. The ids of the applicants queued for re-screening are returned.",
        "tags": ["Jobs"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          },
          {
            "in": "header",
            "name": "If-Match",
            "schema": {
              "description": "The `etag` you read. The write applies only if the resource still has it; otherwise it fails with 412 and changes nothing.",
              "type": "string"
            },
            "description": "The `etag` you read. The write applies only if the resource still has it; otherwise it fails with 412 and changes nothing."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "skills": {
                    "type": "array",
                    "items": {
                      "anyOf": [
                        { "type": "string" },
                        { "description": "A skill", "type": "object" }
                      ]
                    }
                  },
                  "hard_filters": {
                    "anyOf": [
                      { "description": "The screening rules", "type": "object" },
                      { "type": "null" }
                    ]
                  },
                  "screening_lists": { "description": "The screening lists", "type": "object" },
                  "expectedSkills": {
                    "type": "array",
                    "items": {
                      "anyOf": [
                        { "type": "string" },
                        { "description": "A skill as the editor loaded it", "type": "object" }
                      ]
                    }
                  },
                  "rescreen": { "type": "boolean" }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "headers": {
              "ETag": {
                "description": "The resource's entity tag, also in the body as `etag`.",
                "schema": { "type": "string" }
              }
            },
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "412": { "$ref": "#/components/responses/Problem412" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/screening/suggestions": {
      "post": {
        "operationId": "suggestJobScreening",
        "summary": "Suggest screening-rule changes from the recruiters' decisions on a job",
        "description": "Nothing is saved.",
        "tags": ["Jobs"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/settings": {
      "patch": {
        "operationId": "updateJobSettings",
        "summary": "Change a job's team access, analytics, sourcing or tags",
        "tags": ["Jobs"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "team_visibility": { "type": "string", "enum": ["everyone", "admins", "me"] },
                  "analytics_enabled": { "type": "boolean" },
                  "enable_sourcing": { "type": "boolean" },
                  "tags": { "type": "array", "items": { "type": "string" } }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/sourced-candidates": {
      "post": {
        "operationId": "addSourcedCandidate",
        "summary": "Add a person to a job by email or LinkedIn profile",
        "tags": ["Sourced candidates"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "email": { "type": "string" },
                  "linkedinProfile": { "type": "string" }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/sourced-candidates/bulk-approve": {
      "post": {
        "operationId": "bulkApproveSourcedCandidates",
        "summary": "Approve outreach to a selection of a job's sourced profiles",
        "description": "Every id must be on the job. A paused campaign or earlier outreach comes back as `blocked` or a `prior_outreach` warning and starts nothing; resend with the acknowledgements to proceed.",
        "tags": ["Sourced candidates"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ids": {
                    "minItems": 1,
                    "type": "array",
                    "items": { "type": "integer", "exclusiveMinimum": 0 }
                  },
                  "acknowledgements": {
                    "type": "object",
                    "propertyNames": { "type": "string" },
                    "additionalProperties": { "type": "string" }
                  }
                },
                "required": ["ids"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/sourced-candidates/mentions": {
      "get": {
        "operationId": "findSourcedProfileMentions",
        "summary": "Find a job's sourced profiles whose stored profile mentions any of the terms",
        "tags": ["Sourced candidates"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          },
          {
            "in": "query",
            "name": "terms",
            "schema": {
              "anyOf": [{ "type": "array", "items": { "type": "string" } }, { "type": "string" }]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/{jobId}/write-advert": {
      "post": {
        "operationId": "writeJobAdvert",
        "summary": "Write a new draft's advert",
        "description": "One request writes the advert at a time; any other returns it in progress, and a written advert is returned as it is.",
        "tags": ["Jobs"],
        "parameters": [
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/count": {
      "get": {
        "operationId": "countJobs",
        "summary": "Count the jobs the caller can see",
        "tags": ["Jobs"],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/from-brief": {
      "post": {
        "operationId": "createJobFromBrief",
        "summary": "Create a complete job draft from a brief",
        "description": "Fills the defaults around the fields `preparedDraft` sets, validates them and saves the draft. The advert is written afterwards.",
        "tags": ["Jobs"],
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "examples": ["3f0c1d8e-6b6a-4f7e-9a51-0d2c5e7b9f10"],
              "description": "A unique value, such as a UUID, sent unchanged on every retry of one request. A retry after the request succeeded returns the same response, marked `Idempotent-Replayed: true`, without running the operation again. Reusing a key for a different request is a 422.",
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            },
            "description": "A unique value, such as a UUID, sent unchanged on every retry of one request. A retry after the request succeeded returns the same response, marked `Idempotent-Replayed: true`, without running the operation again. Reusing a key for a different request is a 422."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "prompt": { "type": "string", "minLength": 1 },
                  "useOriginalDescription": { "type": "boolean" },
                  "geoCountry": { "type": ["string", "null"] },
                  "preparedDraft": {
                    "description": "The job fields prepared from the brief",
                    "type": "object"
                  }
                },
                "required": ["prompt", "preparedDraft"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "409": { "$ref": "#/components/responses/Problem409" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/page": {
      "get": {
        "operationId": "listJobsPage",
        "summary": "List the jobs the caller can see, a page at a time",
        "description": "Newest first, with the same fields as listing every job. Pass `nextCursor` back as `cursor` for the next page.",
        "tags": ["Jobs"],
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "anyOf": [{ "type": "integer" }, { "type": "string", "pattern": "^-?\\d+$" }]
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "schema": { "type": "string", "minLength": 1, "maxLength": 512 }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Page" } } }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/jobs/pinned": {
      "get": {
        "operationId": "listPinnedJobs",
        "summary": "List the ids of the caller's pinned jobs",
        "tags": ["Jobs"],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/me": {
      "get": {
        "operationId": "getMe",
        "summary": "Get the signed-in user",
        "tags": ["Me"],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      },
      "patch": {
        "operationId": "updateMyProfile",
        "summary": "Change the signed-in user's name or profile picture",
        "description": "An `image` names an uploaded file (from a signature request) to use as the profile picture; `null` keeps the current one.",
        "tags": ["Me"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "firstName": { "type": "string" },
                  "lastName": { "type": "string" },
                  "image": {
                    "anyOf": [
                      {
                        "type": "object",
                        "properties": {
                          "key": { "type": "string", "minLength": 1 },
                          "type": { "type": "string" }
                        },
                        "required": ["key"],
                        "additionalProperties": false
                      },
                      { "type": "null" }
                    ]
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/me/admin": {
      "get": {
        "operationId": "getMyAdminStatus",
        "summary": "Whether the signed-in user is an Alfa admin, with their sign-in posture",
        "tags": ["Me"],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/me/candidate-panel-preferences": {
      "get": {
        "operationId": "getCandidatePanelPreferences",
        "summary": "Get the user's candidate panel tab order and last chosen tab",
        "tags": ["Me"],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/me/candidate-panel-preferences/last-tab": {
      "put": {
        "operationId": "setCandidatePanelLastTab",
        "summary": "Remember the candidate panel tab the user last chose",
        "tags": ["Me"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "lastTab": { "type": "string", "enum": ["cv", "profile", "interview", "inbox"] }
                },
                "required": ["lastTab"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/me/candidate-panel-preferences/order": {
      "put": {
        "operationId": "setCandidatePanelOrder",
        "summary": "Set the user's candidate panel tab order",
        "tags": ["Me"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "order": {
                    "type": "array",
                    "items": { "type": "string", "enum": ["cv", "profile", "interview", "inbox"] }
                  }
                },
                "required": ["order"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/meetings/{meetingId}": {
      "get": {
        "operationId": "getMeeting",
        "summary": "Get a recorded meeting with its summary and transcript",
        "tags": ["Meetings"],
        "parameters": [
          {
            "in": "path",
            "name": "meetingId",
            "schema": {
              "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": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/omnibar-search/candidates/recall": {
      "post": {
        "operationId": "recallOmnibarCandidates",
        "summary": "Find the candidates a Find query may mean",
        "description": "Stage one of a candidate search: a fast recall over the caller’s visible applicants.",
        "tags": ["Omnibar search"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": { "query": { "type": "string" } },
                "required": ["query"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/omnibar-search/candidates/verify": {
      "post": {
        "operationId": "verifyOmnibarCandidates",
        "summary": "Check recalled candidates against a Find query",
        "description": "Stage two: reads each candidate’s full resume against the query. Send at most 30 ids; ids the caller cannot see are dropped.",
        "tags": ["Omnibar search"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "query": { "type": "string" },
                  "candidateIds": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "anyOf": [
                        { "type": "integer", "exclusiveMinimum": 0 },
                        { "type": "string", "pattern": "^\\d+$" }
                      ]
                    }
                  }
                },
                "required": ["query", "candidateIds"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/omnibar-search/classify": {
      "post": {
        "operationId": "classifyOmnibarSearch",
        "summary": "Decide whether a Find query is a job or a candidate search",
        "description": "For a job search it also names which of the caller’s jobs the query means.",
        "tags": ["Omnibar search"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": { "query": { "type": "string" } },
                "required": ["query"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/organization": {
      "post": {
        "operationId": "createOrganization",
        "summary": "Create the caller's organisation and company",
        "description": "Onboarding: makes the signed-in user the owner of a new organisation. Refused with 409 when the user already belongs to one or the company name is taken.",
        "tags": ["Organization"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "company_name": { "type": "string", "minLength": 1 },
                  "website_url": { "type": "string" },
                  "hq_country": { "type": "string" },
                  "linkedin_url": { "type": "string" },
                  "first_name": { "type": "string" },
                  "last_name": { "type": "string" },
                  "logo_url": { "type": "string" },
                  "gclid": { "type": ["string", "null"] }
                },
                "required": ["company_name", "website_url"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/organization/company": {
      "get": {
        "operationId": "getOrganizationCompany",
        "summary": "Get the caller's company, with its quota and cancellation state",
        "description": "Answers an empty object when the caller has no organisation yet.",
        "tags": ["Organization"],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      },
      "patch": {
        "operationId": "updateCompanySettings",
        "summary": "Change the company's settings",
        "description": "Organisation admins and owners only. Only the fields present are written, so each settings tab sends just its own.",
        "tags": ["Organization"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "company_name": { "type": "string" },
                  "website_url": { "type": ["string", "null"] },
                  "linkedin_url": { "type": ["string", "null"] },
                  "industry": { "type": ["string", "null"] },
                  "logo_url": { "type": ["string", "null"] },
                  "billing_email": { "type": ["string", "null"] },
                  "hq_country": { "type": ["string", "null"] },
                  "show_salary_question": { "type": "boolean" },
                  "salary_impacts_ai_suitability": { "type": "boolean" },
                  "show_visa_question": { "type": "boolean" },
                  "linkedin_post_under_company": { "type": "boolean" },
                  "disable_sourcing": { "type": "boolean" },
                  "screening_lists_enabled": { "type": "boolean" },
                  "screening_lists": {
                    "description": "The university and employer screening lists",
                    "type": "object"
                  },
                  "stamp_cv_profile_link": { "type": "boolean" }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/organization/invitations": {
      "post": {
        "operationId": "inviteOrganizationMember",
        "summary": "Invite someone to join the organisation as a member",
        "description": "Answers with the refreshed members and pending invitations.",
        "tags": ["Organization members"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "email": { "type": "string", "minLength": 1 },
                  "firstName": { "type": "string", "minLength": 1 },
                  "lastName": { "type": "string" }
                },
                "required": ["email", "firstName"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/organization/invitations/{invitationId}": {
      "delete": {
        "operationId": "revokeOrganizationInvitation",
        "summary": "Revoke a pending invitation",
        "tags": ["Organization members"],
        "parameters": [
          {
            "in": "path",
            "name": "invitationId",
            "schema": { "type": "string", "minLength": 1 },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/organization/members": {
      "get": {
        "operationId": "listOrganizationMembers",
        "summary": "List the organisation's members and pending invitations",
        "tags": ["Organization members"],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/organization/members/{userId}": {
      "patch": {
        "operationId": "updateOrganizationMemberRole",
        "summary": "Change a member's role",
        "description": "A caller cannot change their own role, and only an owner can grant ownership or change an owner.",
        "tags": ["Organization members"],
        "parameters": [
          {
            "in": "path",
            "name": "userId",
            "schema": { "type": "string", "minLength": 1 },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "role": { "type": "string", "enum": ["org:owner", "org:admin", "org:member"] }
                },
                "required": ["role"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      },
      "delete": {
        "operationId": "removeOrganizationMember",
        "summary": "Remove a member from the organisation",
        "description": "Owners and the caller themselves cannot be removed.",
        "tags": ["Organization members"],
        "parameters": [
          {
            "in": "path",
            "name": "userId",
            "schema": { "type": "string", "minLength": 1 },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/organization/screening-lists": {
      "get": {
        "operationId": "getScreeningLists",
        "summary": "Get the company's university and employer screening lists",
        "description": "Kept off the company read, which every page loads, because the lists are large.",
        "tags": ["Organization"],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/organization/usage": {
      "get": {
        "operationId": "getOrganizationUsage",
        "summary": "Get the organisation's job posting and sourcing credit usage this billing cycle",
        "tags": ["Organization"],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/organization/usage/monthly": {
      "get": {
        "operationId": "getMonthlyUsage",
        "summary": "Get the organisation's usage for one calendar month",
        "tags": ["Organization"],
        "parameters": [
          {
            "in": "query",
            "name": "month",
            "schema": { "type": "string", "pattern": "^\\d{4}-\\d{2}$" }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/applications": {
      "post": {
        "operationId": "public.createApplication",
        "summary": "Start an application to a job",
        "description": "Creates the application and returns the candidate token every other application operation takes. Guarded by the `apply` captcha.",
        "tags": ["Applications"],
        "security": [],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "jobUUID": { "type": "string" },
                  "sessionId": { "type": "string" },
                  "etd": { "type": "string" },
                  "gclid": { "type": "string" },
                  "referrer": { "type": ["string", "null"] },
                  "geo": {
                    "anyOf": [
                      {
                        "type": "object",
                        "properties": {
                          "country": { "type": ["string", "null"] },
                          "city": { "type": ["string", "null"] },
                          "latitude": { "type": ["string", "null"] },
                          "longitude": { "type": ["string", "null"] }
                        },
                        "required": ["country", "city", "latitude", "longitude"]
                      },
                      { "type": "null" }
                    ]
                  },
                  "utmParameters": {
                    "type": "object",
                    "propertyNames": { "type": "string" },
                    "additionalProperties": { "type": "string" }
                  },
                  "searchParameters": {
                    "type": "object",
                    "propertyNames": { "type": "string" },
                    "additionalProperties": { "type": "string" }
                  }
                },
                "required": ["jobUUID"]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/applications/current/conversations": {
      "post": {
        "operationId": "public.startApplicationConversation",
        "summary": "Start the AI interview",
        "description": "Creates the video conversation. Refuses with `INTERVIEW_ALREADY_COMPLETED` or `INTERVIEW_ATTEMPTS_EXHAUSTED` once the interview cannot be retaken.",
        "tags": ["Application interview"],
        "security": [],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "deviceType": { "type": "string" },
                  "audioOnly": { "type": "boolean" },
                  "hairCheckDiagnostics": {
                    "anyOf": [
                      {
                        "type": "object",
                        "properties": { "currentState": {}, "history": {}, "summary": {} }
                      },
                      { "type": "null" }
                    ]
                  }
                },
                "required": ["deviceType"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/applications/current/conversations/{conversationId}/anomalies": {
      "post": {
        "operationId": "public.recordApplicationConversationAnomaly",
        "summary": "Record an interview anomaly such as a silent AI interviewer",
        "tags": ["Application interview"],
        "security": [],
        "parameters": [
          {
            "in": "path",
            "name": "conversationId",
            "schema": { "type": "string", "minLength": 1 },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "outcome": { "type": "string" },
                  "duration_ms": { "type": "number" },
                  "threshold_ms": { "type": "number" },
                  "interview_id": { "type": "integer" }
                },
                "required": ["outcome", "duration_ms", "threshold_ms"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/applications/current/conversations/{conversationId}/end": {
      "post": {
        "operationId": "public.endApplicationConversation",
        "summary": "End the interview",
        "tags": ["Application interview"],
        "security": [],
        "parameters": [
          {
            "in": "path",
            "name": "conversationId",
            "schema": { "type": "string", "minLength": 1 },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/applications/current/conversations/{conversationId}/join": {
      "post": {
        "operationId": "public.joinApplicationConversation",
        "summary": "Record that the candidate joined the interview",
        "tags": ["Application interview"],
        "security": [],
        "parameters": [
          {
            "in": "path",
            "name": "conversationId",
            "schema": { "type": "string", "minLength": 1 },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/applications/current/conversations/{conversationId}/parse": {
      "post": {
        "operationId": "public.parseApplicationConversation",
        "summary": "Check whether the interview has reached its end",
        "description": "Answers `response: 1` when the latest messages close the interview.",
        "tags": ["Application interview"],
        "security": [],
        "parameters": [
          {
            "in": "path",
            "name": "conversationId",
            "schema": { "type": "string", "minLength": 1 },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": { "messages": { "type": "array", "items": {} } },
                "required": ["messages"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/applications/current/cv": {
      "put": {
        "operationId": "public.attachApplicationCv",
        "summary": "Attach an uploaded CV to the application",
        "tags": ["Applications"],
        "security": [],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": { "cvS3File": { "type": "string", "minLength": 1 } },
                "required": ["cvS3File"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/applications/current/cv-upload-failures": {
      "post": {
        "operationId": "public.reportApplicationCvUploadFailure",
        "summary": "Report a failed CV upload",
        "tags": ["Applications"],
        "security": [],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "stage": { "type": "string" },
                  "errorMessage": { "type": "string" },
                  "fileName": { "type": "string" },
                  "fileType": { "type": "string" },
                  "fileExtension": { "type": "string" },
                  "fileSizeBytes": { "type": "number" },
                  "httpStatus": { "type": "number" },
                  "s3Status": { "type": "string" },
                  "attemptNumber": { "type": "number" },
                  "relayOutcome": { "type": "string" },
                  "jobUUID": { "type": "string" }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/applications/current/cv-upload-relay": {
      "post": {
        "operationId": "public.relayApplicationCvUpload",
        "summary": "Upload the CV through the API",
        "description": "For a browser that cannot reach S3: the API PUTs the body to the signed URL. A large file arrives in chunks.",
        "tags": ["Applications"],
        "security": [],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "signedRequest": { "type": "string" },
                  "contentType": { "type": "string" },
                  "dataBase64": { "type": "string" },
                  "chunk": {
                    "type": "object",
                    "properties": {
                      "chunkIndex": { "type": "integer" },
                      "fileSize": { "type": "integer" }
                    },
                    "required": ["chunkIndex", "fileSize"]
                  }
                },
                "required": ["signedRequest", "contentType", "dataBase64"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/applications/current/cv-upload-url": {
      "get": {
        "operationId": "public.getApplicationCvUploadUrl",
        "summary": "Sign an upload URL for the CV",
        "tags": ["Applications"],
        "security": [],
        "parameters": [
          {
            "in": "query",
            "name": "type",
            "schema": { "type": "string", "minLength": 1 },
            "required": true
          },
          {
            "in": "query",
            "name": "fileName",
            "schema": { "type": "string", "minLength": 1 },
            "required": true
          },
          {
            "in": "query",
            "name": "fileSize",
            "schema": {
              "anyOf": [{ "type": "integer" }, { "type": "string", "pattern": "^-?\\d+$" }]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/applications/current/email-verification/confirm": {
      "post": {
        "operationId": "public.confirmApplicationEmail",
        "summary": "Confirm a repeat application with its emailed code",
        "tags": ["Applications"],
        "security": [],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": { "code": { "type": "string" } },
                "required": ["code"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/applications/current/email-verification/resend": {
      "post": {
        "operationId": "public.resendApplicationEmailCode",
        "summary": "Send a fresh email verification code",
        "tags": ["Applications"],
        "security": [],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/applications/current/interview-eligibility": {
      "get": {
        "operationId": "public.getApplicationInterviewEligibility",
        "summary": "Check whether the application proceeds to the AI interview",
        "description": "Answers `code: CV_EXTRACTION_PENDING` while the CV is still being read; the client polls.",
        "tags": ["Applications"],
        "security": [],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/applications/current/issue-reports": {
      "post": {
        "operationId": "public.reportApplicationIssue",
        "summary": "Report a problem with the application or interview",
        "tags": ["Application interview"],
        "security": [],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "conversation_id": { "type": "string" },
                  "issue_type": { "type": "string" },
                  "description": { "type": "string" },
                  "device_type": { "type": "string" },
                  "stage": { "type": "string" },
                  "diagnostics": {},
                  "triage_attempted": { "type": "boolean" },
                  "hair_check_diagnostics": {}
                },
                "required": ["issue_type"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/applications/current/profile": {
      "get": {
        "operationId": "public.getApplicationProfile",
        "summary": "Get the application's saved profile",
        "tags": ["Applications"],
        "security": [],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      },
      "put": {
        "operationId": "public.completeApplicationProfile",
        "summary": "Save the application's profile and submit it",
        "description": "Saves the screening answers. A repeat application to the same job answers `requiresEmailVerification` and mails a code instead of submitting.",
        "tags": ["Applications"],
        "security": [],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "first_name": { "type": "string", "maxLength": 80 },
                  "last_name": { "type": "string", "maxLength": 80 },
                  "email": {
                    "anyOf": [
                      { "type": "string", "const": "" },
                      {
                        "type": "string",
                        "maxLength": 254,
                        "format": "email",
                        "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                      }
                    ]
                  },
                  "country": { "type": "string", "maxLength": 120 },
                  "visa_sponsorship": { "type": "string", "maxLength": 120 },
                  "notice_period": { "type": "string", "maxLength": 120 },
                  "perm_salary": { "type": "string", "maxLength": 120 },
                  "remote_hybrid": { "type": "string", "maxLength": 120 },
                  "custom_answers": {
                    "maxItems": 50,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "question": { "type": "string" },
                        "answer": { "type": ["string", "boolean", "null"] },
                        "expectedAnswer": { "type": "boolean" },
                        "type": { "type": "string" }
                      },
                      "required": ["question", "answer"]
                    }
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/applications/current/triage-events": {
      "post": {
        "operationId": "public.recordApplicationTriageEvent",
        "summary": "Record the outcome of the report-issue triage's self-help step",
        "tags": ["Application interview"],
        "security": [],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "issue_type": { "type": "string" },
                  "outcome": { "type": "string" },
                  "stage": { "type": "string" },
                  "device_type": { "type": "string" }
                },
                "required": ["issue_type", "outcome"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/ats-integrations": {
      "get": {
        "operationId": "public.listAtsIntegrations",
        "summary": "List the ATS integrations Alfa can connect to",
        "tags": ["ATS"],
        "security": [],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/dashboard-pdf-data": {
      "get": {
        "operationId": "public.getDashboardPdfData",
        "summary": "Get a job dashboard's data for its PDF render",
        "description": "The PDF renderer sends the token minted for this job as `X-Dashboard-PDF-Token`; any other token is refused with 401.",
        "tags": ["Dashboard PDF"],
        "security": [],
        "parameters": [
          {
            "in": "query",
            "name": "jobId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/interview-bookings/current": {
      "get": {
        "operationId": "public.getInterviewBooking",
        "summary": "Get the booking",
        "tags": ["Interview bookings"],
        "security": [],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/interview-bookings/current/book": {
      "post": {
        "operationId": "public.bookInterview",
        "summary": "Book or reschedule the interview",
        "tags": ["Interview bookings"],
        "security": [],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": { "start": { "type": "string" }, "timezone": { "type": "string" } },
                "required": ["start", "timezone"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/interview-bookings/current/cancel": {
      "post": {
        "operationId": "public.cancelInterviewBooking",
        "summary": "Cancel the interview",
        "tags": ["Interview bookings"],
        "security": [],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": { "reason": { "type": "string" } },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/interview-bookings/current/ics": {
      "get": {
        "operationId": "public.getInterviewBookingIcs",
        "summary": "Get the calendar file for the booked interview",
        "tags": ["Interview bookings"],
        "security": [],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/interview-bookings/current/meet-now": {
      "post": {
        "operationId": "public.meetNowInInterviewRoom",
        "summary": "Open the room early as the host",
        "tags": ["Interview bookings"],
        "security": [],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/interview-bookings/current/room": {
      "post": {
        "operationId": "public.getInterviewRoom",
        "summary": "Get the video room for the interview",
        "description": "With `join`, admits the caller to the room when it is open.",
        "tags": ["Interview bookings"],
        "security": [],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": { "join": { "type": "boolean" } },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/interview-bookings/current/slots": {
      "get": {
        "operationId": "public.listInterviewBookingSlots",
        "summary": "List the bookable start times in a window",
        "tags": ["Interview bookings"],
        "security": [],
        "parameters": [
          { "in": "query", "name": "from", "schema": { "type": "string" }, "required": true },
          { "in": "query", "name": "to", "schema": { "type": "string" }, "required": true }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/job-feeds/linkedin": {
      "get": {
        "operationId": "public.getLinkedinJobFeed",
        "summary": "List the jobs in the LinkedIn XML feed",
        "tags": ["Public jobs"],
        "security": [],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/job-ids": {
      "get": {
        "operationId": "public.listPublicJobIds",
        "summary": "List the ids of the live jobs, for the sitemap",
        "tags": ["Public jobs"],
        "security": [],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/jobs/{jobRef}": {
      "get": {
        "operationId": "public.getPublicJob",
        "summary": "Get a job's public page",
        "description": "`jobRef` is the job UUID. `ref` names the posting campaign a visitor arrived from, which can supply the advertised location.",
        "tags": ["Public jobs"],
        "security": [],
        "parameters": [
          {
            "in": "path",
            "name": "jobRef",
            "schema": { "type": "string", "minLength": 1 },
            "required": true
          },
          { "in": "query", "name": "ref", "schema": { "type": "string" } }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/signup-vouchers/{code}": {
      "get": {
        "operationId": "public.getSignupVoucher",
        "summary": "Resolve a signup voucher code",
        "tags": ["Signup"],
        "security": [],
        "parameters": [
          {
            "in": "path",
            "name": "code",
            "schema": { "type": "string", "minLength": 1 },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/status": {
      "get": {
        "operationId": "public.getStatus",
        "summary": "Check the API's health",
        "tags": ["Status"],
        "security": [],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/subscribers": {
      "post": {
        "operationId": "public.createSubscriber",
        "summary": "Sign up to the mailing list",
        "description": "Adds the address to the list without emailing it. An address already on the list succeeds.",
        "tags": ["Newsletter"],
        "security": [],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "email": { "type": "string", "minLength": 1 },
                  "source": { "type": "string" },
                  "referrer": { "type": "string" }
                },
                "required": ["email"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/telemetry-events": {
      "post": {
        "operationId": "public.createTelemetryEvent",
        "summary": "Record a telemetry event",
        "description": "Page views, request timings and client errors. Rate limited per source IP.",
        "tags": ["Telemetry"],
        "security": [],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "eventType": {
                    "type": "string",
                    "enum": ["pageView", "httpRequest", "clientError"]
                  },
                  "timestamp": { "type": "string", "maxLength": 64 },
                  "sessionId": { "type": "string", "maxLength": 128 },
                  "pageUrl": { "type": "string", "maxLength": 2048 },
                  "userAgent": { "type": "string", "maxLength": 1024 },
                  "token": { "type": "string", "maxLength": 8192 },
                  "eventData": {
                    "type": "object",
                    "propertyNames": { "type": "string" },
                    "additionalProperties": {}
                  }
                },
                "required": ["eventType"]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/unsubscribes": {
      "post": {
        "operationId": "public.createUnsubscribe",
        "summary": "Unsubscribe with the token from an emailed link",
        "tags": ["Newsletter"],
        "security": [],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": { "token": { "type": "string", "minLength": 1 } },
                "required": ["token"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/unsubscribes/{unsubscribeToken}": {
      "get": {
        "operationId": "public.getUnsubscribe",
        "summary": "Check an unsubscribe link",
        "description": "Answers `success: false` for an invalid or expired token.",
        "tags": ["Newsletter"],
        "security": [],
        "parameters": [
          {
            "in": "path",
            "name": "unsubscribeToken",
            "schema": { "type": "string", "minLength": 1 },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/public/unsubscribes/links": {
      "post": {
        "operationId": "public.requestUnsubscribeLink",
        "summary": "Email an unsubscribe link",
        "description": "Answers the same way whether or not the address is on the list, so subscribers cannot be enumerated.",
        "tags": ["Newsletter"],
        "security": [],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": { "email": { "type": "string" } },
                "required": ["email"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/search": {
      "post": {
        "operationId": "searchOrganization",
        "summary": "Search the organisation's candidates, jobs and teammates",
        "description": "Set `reranking` to false for type-ahead refinement, where reranking costs more latency than it earns. `filters.jobId` limits candidates to the applicants of that job.",
        "tags": ["Search"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "query": { "type": "string", "maxLength": 500 },
                  "entityTypes": {
                    "anyOf": [
                      { "type": "string", "const": "all" },
                      {
                        "type": "array",
                        "items": { "type": "string", "enum": ["candidates", "jobs", "users"] }
                      }
                    ]
                  },
                  "filters": {
                    "type": "object",
                    "properties": {
                      "status": { "type": "string" },
                      "jobId": { "type": "integer", "exclusiveMinimum": 0 }
                    },
                    "additionalProperties": false
                  },
                  "page": { "type": "integer", "minimum": 1 },
                  "limit": { "type": "integer", "minimum": 1, "maximum": 100 },
                  "reranking": { "type": "boolean" }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/shared-candidate-profiles/{profileId}": {
      "get": {
        "operationId": "getSharedCandidateProfile",
        "summary": "Open a shared candidate profile link",
        "description": "Any signed-in user may open a link they were sent; the owning organisation also sees its own evaluation.",
        "tags": ["Candidates"],
        "parameters": [
          {
            "in": "path",
            "name": "profileId",
            "schema": { "type": "string", "minLength": 1 },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/signature-requests": {
      "post": {
        "operationId": "createSignatureRequest",
        "summary": "Sign an upload of one file",
        "description": "Answers with the signed `signedRequest` URL to PUT the file to and the file's `key`, `bucket` and `url`. Uploads land under the caller's organisation.",
        "tags": ["Files"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "type": { "type": "string", "minLength": 1 },
                  "fileName": { "type": "string", "minLength": 1 },
                  "fileSize": { "type": "integer", "exclusiveMinimum": 0 },
                  "bucket": { "type": "string" }
                },
                "required": ["type", "fileName", "fileSize"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/sourced-candidates/{sourcedCandidateId}": {
      "get": {
        "operationId": "getSourcedCandidate",
        "summary": "Get a sourced profile",
        "tags": ["Sourced candidates"],
        "parameters": [
          {
            "in": "path",
            "name": "sourcedCandidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      },
      "patch": {
        "operationId": "updateSourcedCandidate",
        "summary": "Move a sourced profile to a pipeline stage",
        "description": "`contacted` starts outreach, as approving does; the other stages track the profile without emailing it. A profile in outreach cannot move to a manual stage.",
        "tags": ["Sourced candidates"],
        "parameters": [
          {
            "in": "path",
            "name": "sourcedCandidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "status": {
                    "type": "string",
                    "enum": ["sourced", "contacted", "suitable", "shortlist", "reject"]
                  }
                },
                "required": ["status"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/sourced-candidates/{sourcedCandidateId}/approve": {
      "post": {
        "operationId": "approveSourcedCandidate",
        "summary": "Approve outreach to a sourced profile",
        "description": "Moves the profile into Outreach and schedules its drafted sequence. A paused campaign or earlier outreach comes back as `blocked` or a `prior_outreach` warning; resend with the warning acknowledgements to proceed.",
        "tags": ["Sourced candidates"],
        "parameters": [
          {
            "in": "path",
            "name": "sourcedCandidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "acknowledgements": {
                    "description": "Acknowledgements of earlier-outreach warnings, keyed by candidate id",
                    "type": "object",
                    "propertyNames": { "type": "string" },
                    "additionalProperties": { "type": "string" }
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/sourced-candidates/{sourcedCandidateId}/contact-enrichment": {
      "post": {
        "operationId": "enrichSourcedCandidateContact",
        "summary": "Look up a sourced profile's contact details",
        "description": "Starts the paid lookup in the background without approving outreach. `started` is false when a lookup is already running.",
        "tags": ["Sourced candidates"],
        "parameters": [
          {
            "in": "path",
            "name": "sourcedCandidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "202": {
            "description": "Accepted for background processing.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/sourced-candidates/{sourcedCandidateId}/emails": {
      "get": {
        "operationId": "listSourcedCandidateEmails",
        "summary": "List the emails exchanged with a sourced profile",
        "tags": ["Sourced candidates"],
        "parameters": [
          {
            "in": "path",
            "name": "sourcedCandidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/sourced-candidates/{sourcedCandidateId}/move": {
      "post": {
        "operationId": "moveSourcedCandidate",
        "summary": "Move or copy a sourced profile to another job",
        "tags": ["Sourced candidates"],
        "parameters": [
          {
            "in": "path",
            "name": "sourcedCandidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "targetJobId": {
                    "anyOf": [
                      { "type": "integer", "exclusiveMinimum": 0 },
                      { "type": "string", "pattern": "^\\d+$" }
                    ]
                  },
                  "mode": { "type": "string", "enum": ["move", "duplicate"] }
                },
                "required": ["targetJobId", "mode"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/sourced-candidates/{sourcedCandidateId}/outreach-pause": {
      "get": {
        "operationId": "getSourcedOutreachPause",
        "summary": "Read whether a sourced profile's outreach is stopped",
        "tags": ["Sourced candidates"],
        "parameters": [
          {
            "in": "path",
            "name": "sourcedCandidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      },
      "put": {
        "operationId": "pauseSourcedOutreach",
        "summary": "Stop a sourced profile's outreach",
        "description": "Emails already sending cannot be recalled. A pause the email provider could not confirm comes back with `success: false` and status `error`; retry it.",
        "tags": ["Sourced candidates"],
        "parameters": [
          {
            "in": "path",
            "name": "sourcedCandidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/sourced-candidates/{sourcedCandidateId}/primary-email": {
      "put": {
        "operationId": "setSourcedCandidatePrimaryEmail",
        "summary": "Choose the email outreach is sent to",
        "description": "Locked once outreach has been sent; a locked change comes back with `success: false` and an `error`.",
        "tags": ["Sourced candidates"],
        "parameters": [
          {
            "in": "path",
            "name": "sourcedCandidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": { "email": { "type": "string", "minLength": 1 } },
                "required": ["email"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/sourced-candidates/{sourcedCandidateId}/reject": {
      "post": {
        "operationId": "rejectSourcedCandidate",
        "summary": "Reject a sourced profile",
        "description": "Moves the profile to Rejected without emailing it.",
        "tags": ["Sourced candidates"],
        "parameters": [
          {
            "in": "path",
            "name": "sourcedCandidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/sourced-candidates/{sourcedCandidateId}/restore": {
      "post": {
        "operationId": "restoreSourcedCandidate",
        "summary": "Return a rejected sourced profile to the sourced column",
        "tags": ["Sourced candidates"],
        "parameters": [
          {
            "in": "path",
            "name": "sourcedCandidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/sourced-candidates/{sourcedCandidateId}/sequence": {
      "patch": {
        "operationId": "updateSourcedSequence",
        "summary": "Edit a sourced profile's outreach sequence",
        "description": "Saves a draft before outreach starts, or a pending follow-up body after it starts. An invalid edit is 400 `INVALID_SEQUENCE`; an email that is no longer editable is 409 `SEQUENCE_NOT_EDITABLE`. Saving never starts or restarts outreach.",
        "tags": ["Sourced candidates"],
        "parameters": [
          {
            "in": "path",
            "name": "sourcedCandidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "sequence": {
                    "type": "object",
                    "properties": {
                      "subject1": { "type": ["string", "null"] },
                      "body1": { "type": ["string", "null"] },
                      "subject2": { "type": ["string", "null"] },
                      "body2": { "type": ["string", "null"] },
                      "subject3": { "type": ["string", "null"] },
                      "body3": { "type": ["string", "null"] }
                    }
                  }
                },
                "required": ["sequence"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/sourced-candidates/{sourcedCandidateId}/sequence/editability": {
      "get": {
        "operationId": "getSourcedSequenceEditability",
        "summary": "Which pending outreach emails can still be edited",
        "tags": ["Sourced candidates"],
        "parameters": [
          {
            "in": "path",
            "name": "sourcedCandidateId",
            "schema": {
              "anyOf": [
                { "type": "integer", "exclusiveMinimum": 0 },
                { "type": "string", "pattern": "^\\d+$" }
              ]
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/sourced-candidates/contact-lookup": {
      "get": {
        "operationId": "getContactLookup",
        "summary": "Read the contact lookup for a LinkedIn profile",
        "description": "Free: reports what is already known or in progress and never spends a credit.",
        "tags": ["Sourced candidates"],
        "parameters": [
          {
            "in": "query",
            "name": "linkedinProfile",
            "schema": { "type": "string", "minLength": 1 },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      },
      "post": {
        "operationId": "startContactLookup",
        "summary": "Start a paid contact lookup for a LinkedIn profile",
        "description": "Returns what is already known without spending when the profile was looked up before.",
        "tags": ["Sourced candidates"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": { "linkedinProfile": { "type": "string", "minLength": 1 } },
                "required": ["linkedinProfile"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/talent/search": {
      "post": {
        "operationId": "searchTalent",
        "summary": "Size the external talent pool for a role",
        "description": "Counts the matching people and previews a few of them. Spends search credits; turning the pool into applicants is a sourcing campaign.",
        "tags": ["Talent search"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "title": { "type": "string", "minLength": 1 },
                  "jobTitles": {
                    "minItems": 1,
                    "type": "array",
                    "items": { "type": "string", "minLength": 1 }
                  },
                  "location": { "type": "string" },
                  "country": { "type": "string" },
                  "city": { "type": "string" },
                  "seniorityLevel": { "type": "string" },
                  "companies": { "type": "array", "items": { "type": "string" } },
                  "currentTitleOnly": { "type": "boolean" },
                  "evidenceTerms": { "type": "array", "items": { "type": "string" } }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/tools/candidate-outreach-writer": {
      "post": {
        "operationId": "writeCandidateOutreach",
        "summary": "Write a candidate outreach message",
        "tags": ["Tools"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "jobTitle": { "type": "string", "minLength": 1 },
                  "location": { "type": "string" },
                  "salary": { "type": "string" },
                  "keyRequirements": { "type": "string" },
                  "style": {
                    "type": "string",
                    "enum": ["balanced", "formal", "casual", "enthusiastic"]
                  }
                },
                "required": ["jobTitle"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/tools/company-researcher": {
      "post": {
        "operationId": "researchCompany",
        "summary": "Profile a company from its website",
        "tags": ["Tools"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": { "url": { "type": "string", "minLength": 1 } },
                "required": ["url"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/tools/interview-invitation-composer": {
      "post": {
        "operationId": "composeInterviewInvitation",
        "summary": "Write an interview invitation email",
        "tags": ["Tools"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "candidateFirstName": { "type": "string", "minLength": 1 },
                  "jobTitle": { "type": "string", "minLength": 1 },
                  "companyName": { "type": "string", "minLength": 1 },
                  "interviewDateTime": { "type": "string", "minLength": 1 },
                  "estimatedDuration": { "type": "string" },
                  "interviewLocation": { "type": "string" },
                  "interviewerName": { "type": "string" },
                  "interviewerPosition": { "type": "string" },
                  "interviewFormat": { "type": "string" },
                  "style": {
                    "type": "string",
                    "enum": ["balanced", "formal", "casual", "enthusiastic"]
                  },
                  "otherInformation": { "type": "string" }
                },
                "required": ["candidateFirstName", "jobTitle", "companyName", "interviewDateTime"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/tools/interview-question-writer": {
      "post": {
        "operationId": "writeInterviewQuestions",
        "summary": "Write role-specific interview questions",
        "tags": ["Tools"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "jobTitle": { "type": "string", "minLength": 1 },
                  "jobDescription": { "type": "string" },
                  "experienceLevel": {
                    "type": "string",
                    "enum": ["entry", "mid", "senior", "executive"]
                  },
                  "questionCount": { "type": "integer", "minimum": 1, "maximum": 20 },
                  "focusAreas": { "type": "array", "items": { "type": "string" } },
                  "companySize": { "type": "string" },
                  "industry": { "type": "string" }
                },
                "required": ["jobTitle"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/tools/job-advert-writer": {
      "post": {
        "operationId": "writeJobAdvertCopy",
        "summary": "Write a job advert",
        "tags": ["Tools"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "companyName": { "type": "string", "minLength": 1 },
                  "companyDescription": { "type": "string" },
                  "jobTitle": { "type": "string", "minLength": 1 },
                  "essentialRequirements": { "type": "array", "items": { "type": "string" } },
                  "bonusRequirements": { "type": "array", "items": { "type": "string" } },
                  "location": { "type": "string" },
                  "workSetup": { "type": "string", "enum": ["remote", "hybrid", "onsite"] },
                  "salary": { "type": "string" },
                  "benefits": { "type": "array", "items": { "type": "string" } },
                  "style": {
                    "type": "string",
                    "enum": ["balanced", "formal", "casual", "enthusiastic", "punchy"]
                  },
                  "length": { "type": "string", "enum": ["balanced", "short", "long"] }
                },
                "required": ["companyName", "jobTitle"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    },
    "/v1/tools/salary-data": {
      "post": {
        "operationId": "researchSalaryData",
        "summary": "Benchmark salaries or contract day rates for a role and location",
        "tags": ["Tools"],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "jobTitle": { "type": "string", "minLength": 1, "maxLength": 200 },
                  "location": { "type": "string", "maxLength": 200 },
                  "employmentType": { "type": "string", "enum": ["permanent", "contract"] }
                },
                "required": ["jobTitle"],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": { "schema": { "description": "The operation result as JSON." } }
            }
          },
          "400": { "$ref": "#/components/responses/Problem400" },
          "401": { "$ref": "#/components/responses/Problem401" },
          "403": { "$ref": "#/components/responses/Problem403" },
          "404": { "$ref": "#/components/responses/Problem404" },
          "422": { "$ref": "#/components/responses/Problem422" },
          "429": { "$ref": "#/components/responses/Problem429" },
          "500": { "$ref": "#/components/responses/Problem500" }
        }
      }
    }
  },
  "webhooks": {
    "candidate-screened": {
      "post": {
        "operationId": "webhook.candidate.screened",
        "summary": "A candidate was screened",
        "description": "Sent the first time a candidate on a linked job has a status: an applicant once screening finishes, or a sourced candidate who fits the job.",
        "tags": ["Webhooks"],
        "security": [],
        "parameters": [
          {
            "in": "header",
            "name": "Alfa-Signature",
            "schema": {
              "type": "string",
              "description": "`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\">`, keyed with the endpoint's signing secret. Reject a request whose signature does not match or whose timestamp is more than 5 minutes from your clock.",
              "examples": ["t=1791365400,v1=5f2b9c…"]
            },
            "required": true,
            "description": "`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\">`, keyed with the endpoint's signing secret. Reject a request whose signature does not match or whose timestamp is more than 5 minutes from your clock."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "The event id. Deliveries can repeat; ignore an id you have already processed.",
                    "examples": ["0b7c3c58-3c9a-4a8e-9a2e-6f1f8a0c9d11"]
                  },
                  "type": {
                    "type": "string",
                    "const": "candidate.screened",
                    "description": "Sent the first time a candidate on a linked job has a status: an applicant once screening finishes, or a sourced candidate who fits the job.",
                    "examples": ["candidate.screened"]
                  },
                  "apiVersion": {
                    "type": "string",
                    "const": "v1",
                    "description": "The API version the payload follows.",
                    "examples": ["v1"]
                  },
                  "occurredAt": {
                    "type": "string",
                    "description": "When the event happened.",
                    "examples": ["2026-10-07T09:30:00.000Z"]
                  },
                  "organizationId": {
                    "type": "string",
                    "description": "The company the event belongs to (its Company ID).",
                    "examples": ["org_2abcDEF123"]
                  },
                  "jobId": {
                    "description": "Alfa's id for the job.",
                    "examples": [9301],
                    "type": ["integer", "null"]
                  },
                  "externalJobId": {
                    "description": "The ATS job the Alfa job is linked to.",
                    "examples": ["job_8841"],
                    "type": ["string", "null"]
                  },
                  "candidate": {
                    "anyOf": [
                      {
                        "type": "object",
                        "properties": {
                          "candidateId": {
                            "type": "string",
                            "description": "Alfa's id for the candidate: `app_…` for an applicant, `src_…` for a candidate Alfa sourced.",
                            "examples": ["app_254928"]
                          },
                          "externalCandidateId": {
                            "description": "Your candidate id, for applicants you sent through applicant intake.",
                            "examples": ["cand_123"],
                            "type": ["string", "null"]
                          },
                          "externalApplicationId": {
                            "description": "Your application id, for applicants you sent through applicant intake.",
                            "examples": ["appl_456"],
                            "type": ["string", "null"]
                          },
                          "firstName": {
                            "description": "First name.",
                            "examples": ["Ada"],
                            "type": ["string", "null"]
                          },
                          "lastName": {
                            "description": "Last name.",
                            "examples": ["Lovelace"],
                            "type": ["string", "null"]
                          },
                          "email": {
                            "description": "Email address.",
                            "examples": ["ada@example.com"],
                            "type": ["string", "null"]
                          },
                          "phone": {
                            "description": "Phone number, when known.",
                            "examples": ["+44 20 7946 0000"],
                            "type": ["string", "null"]
                          },
                          "linkedinUrl": {
                            "description": "LinkedIn profile URL, when known.",
                            "examples": ["https://www.linkedin.com/in/example"],
                            "type": ["string", "null"]
                          },
                          "source": {
                            "type": "string",
                            "enum": ["application", "sourced"],
                            "description": "`application` for an applicant, `sourced` for a candidate Alfa found and approached.",
                            "examples": ["application"]
                          },
                          "status": {
                            "type": "string",
                            "enum": [
                              "shortlisted",
                              "suitable",
                              "not_suitable",
                              "sourced_potential"
                            ],
                            "description": "`shortlisted`: a recruiter shortlisted them. `suitable` or `not_suitable`: the screening outcome. `sourced_potential`: a sourced candidate who fits the job.",
                            "examples": ["suitable"]
                          },
                          "statusUpdatedAt": {
                            "type": "string",
                            "description": "When the status last changed. Keep the newest one you receive.",
                            "examples": ["2026-10-07T09:30:00.000Z"]
                          },
                          "score": {
                            "description": "The candidate score from 0 to 100; for a sourced candidate, the sourcing score.",
                            "examples": [82],
                            "type": ["number", "null"]
                          },
                          "summary": {
                            "description": "Alfa's summary of the candidate against the job.",
                            "examples": [
                              "Eight years of backend engineering, most recently leading a payments team."
                            ],
                            "type": ["string", "null"]
                          },
                          "resumeUrl": {
                            "description": "A signed link to the resume PDF, valid for 24 hours. Null when there is none.",
                            "examples": ["https://files.welovealfa.com/resume.pdf?Signature=…"],
                            "type": ["string", "null"]
                          },
                          "profileUrl": {
                            "type": "string",
                            "description": "The candidate's page in Alfa, for signed-in recruiters.",
                            "examples": ["https://welovealfa.com/jobs/9301/254928"]
                          }
                        },
                        "required": [
                          "candidateId",
                          "externalCandidateId",
                          "externalApplicationId",
                          "firstName",
                          "lastName",
                          "email",
                          "phone",
                          "linkedinUrl",
                          "source",
                          "status",
                          "statusUpdatedAt",
                          "score",
                          "summary",
                          "resumeUrl",
                          "profileUrl"
                        ]
                      },
                      { "type": "null" }
                    ],
                    "description": "The candidate as of this event."
                  }
                },
                "required": [
                  "id",
                  "type",
                  "apiVersion",
                  "occurredAt",
                  "organizationId",
                  "jobId",
                  "externalJobId",
                  "candidate"
                ],
                "description": "Sent the first time a candidate on a linked job has a status: an applicant once screening finishes, or a sourced candidate who fits the job."
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Any 2xx status acknowledges the event. Anything else, a redirect or no answer within 10 seconds is retried with exponential backoff for 24 hours."
          }
        }
      }
    },
    "candidate-status-changed": {
      "post": {
        "operationId": "webhook.candidate.status_changed",
        "summary": "A candidate's status changed",
        "description": "Sent when a candidate's status changes after it was first reported, for example when a recruiter shortlists them.",
        "tags": ["Webhooks"],
        "security": [],
        "parameters": [
          {
            "in": "header",
            "name": "Alfa-Signature",
            "schema": {
              "type": "string",
              "description": "`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\">`, keyed with the endpoint's signing secret. Reject a request whose signature does not match or whose timestamp is more than 5 minutes from your clock.",
              "examples": ["t=1791365400,v1=5f2b9c…"]
            },
            "required": true,
            "description": "`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\">`, keyed with the endpoint's signing secret. Reject a request whose signature does not match or whose timestamp is more than 5 minutes from your clock."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "The event id. Deliveries can repeat; ignore an id you have already processed.",
                    "examples": ["0b7c3c58-3c9a-4a8e-9a2e-6f1f8a0c9d11"]
                  },
                  "type": {
                    "type": "string",
                    "const": "candidate.status_changed",
                    "description": "Sent when a candidate's status changes after it was first reported, for example when a recruiter shortlists them.",
                    "examples": ["candidate.status_changed"]
                  },
                  "apiVersion": {
                    "type": "string",
                    "const": "v1",
                    "description": "The API version the payload follows.",
                    "examples": ["v1"]
                  },
                  "occurredAt": {
                    "type": "string",
                    "description": "When the event happened.",
                    "examples": ["2026-10-07T09:30:00.000Z"]
                  },
                  "organizationId": {
                    "type": "string",
                    "description": "The company the event belongs to (its Company ID).",
                    "examples": ["org_2abcDEF123"]
                  },
                  "jobId": {
                    "description": "Alfa's id for the job.",
                    "examples": [9301],
                    "type": ["integer", "null"]
                  },
                  "externalJobId": {
                    "description": "The ATS job the Alfa job is linked to.",
                    "examples": ["job_8841"],
                    "type": ["string", "null"]
                  },
                  "candidate": {
                    "anyOf": [
                      {
                        "type": "object",
                        "properties": {
                          "candidateId": {
                            "type": "string",
                            "description": "Alfa's id for the candidate: `app_…` for an applicant, `src_…` for a candidate Alfa sourced.",
                            "examples": ["app_254928"]
                          },
                          "externalCandidateId": {
                            "description": "Your candidate id, for applicants you sent through applicant intake.",
                            "examples": ["cand_123"],
                            "type": ["string", "null"]
                          },
                          "externalApplicationId": {
                            "description": "Your application id, for applicants you sent through applicant intake.",
                            "examples": ["appl_456"],
                            "type": ["string", "null"]
                          },
                          "firstName": {
                            "description": "First name.",
                            "examples": ["Ada"],
                            "type": ["string", "null"]
                          },
                          "lastName": {
                            "description": "Last name.",
                            "examples": ["Lovelace"],
                            "type": ["string", "null"]
                          },
                          "email": {
                            "description": "Email address.",
                            "examples": ["ada@example.com"],
                            "type": ["string", "null"]
                          },
                          "phone": {
                            "description": "Phone number, when known.",
                            "examples": ["+44 20 7946 0000"],
                            "type": ["string", "null"]
                          },
                          "linkedinUrl": {
                            "description": "LinkedIn profile URL, when known.",
                            "examples": ["https://www.linkedin.com/in/example"],
                            "type": ["string", "null"]
                          },
                          "source": {
                            "type": "string",
                            "enum": ["application", "sourced"],
                            "description": "`application` for an applicant, `sourced` for a candidate Alfa found and approached.",
                            "examples": ["application"]
                          },
                          "status": {
                            "type": "string",
                            "enum": [
                              "shortlisted",
                              "suitable",
                              "not_suitable",
                              "sourced_potential"
                            ],
                            "description": "`shortlisted`: a recruiter shortlisted them. `suitable` or `not_suitable`: the screening outcome. `sourced_potential`: a sourced candidate who fits the job.",
                            "examples": ["suitable"]
                          },
                          "statusUpdatedAt": {
                            "type": "string",
                            "description": "When the status last changed. Keep the newest one you receive.",
                            "examples": ["2026-10-07T09:30:00.000Z"]
                          },
                          "score": {
                            "description": "The candidate score from 0 to 100; for a sourced candidate, the sourcing score.",
                            "examples": [82],
                            "type": ["number", "null"]
                          },
                          "summary": {
                            "description": "Alfa's summary of the candidate against the job.",
                            "examples": [
                              "Eight years of backend engineering, most recently leading a payments team."
                            ],
                            "type": ["string", "null"]
                          },
                          "resumeUrl": {
                            "description": "A signed link to the resume PDF, valid for 24 hours. Null when there is none.",
                            "examples": ["https://files.welovealfa.com/resume.pdf?Signature=…"],
                            "type": ["string", "null"]
                          },
                          "profileUrl": {
                            "type": "string",
                            "description": "The candidate's page in Alfa, for signed-in recruiters.",
                            "examples": ["https://welovealfa.com/jobs/9301/254928"]
                          }
                        },
                        "required": [
                          "candidateId",
                          "externalCandidateId",
                          "externalApplicationId",
                          "firstName",
                          "lastName",
                          "email",
                          "phone",
                          "linkedinUrl",
                          "source",
                          "status",
                          "statusUpdatedAt",
                          "score",
                          "summary",
                          "resumeUrl",
                          "profileUrl"
                        ]
                      },
                      { "type": "null" }
                    ],
                    "description": "The candidate as of this event."
                  }
                },
                "required": [
                  "id",
                  "type",
                  "apiVersion",
                  "occurredAt",
                  "organizationId",
                  "jobId",
                  "externalJobId",
                  "candidate"
                ],
                "description": "Sent when a candidate's status changes after it was first reported, for example when a recruiter shortlists them."
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Any 2xx status acknowledges the event. Anything else, a redirect or no answer within 10 seconds is retried with exponential backoff for 24 hours."
          }
        }
      }
    },
    "webhook-test": {
      "post": {
        "operationId": "webhook.test",
        "summary": "A test event",
        "description": "Sent when you ask for a test delivery. It carries a sample candidate.",
        "tags": ["Webhooks"],
        "security": [],
        "parameters": [
          {
            "in": "header",
            "name": "Alfa-Signature",
            "schema": {
              "type": "string",
              "description": "`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\">`, keyed with the endpoint's signing secret. Reject a request whose signature does not match or whose timestamp is more than 5 minutes from your clock.",
              "examples": ["t=1791365400,v1=5f2b9c…"]
            },
            "required": true,
            "description": "`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\">`, keyed with the endpoint's signing secret. Reject a request whose signature does not match or whose timestamp is more than 5 minutes from your clock."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "The event id. Deliveries can repeat; ignore an id you have already processed.",
                    "examples": ["0b7c3c58-3c9a-4a8e-9a2e-6f1f8a0c9d11"]
                  },
                  "type": {
                    "type": "string",
                    "const": "webhook.test",
                    "description": "Sent when you ask for a test delivery. It carries a sample candidate.",
                    "examples": ["webhook.test"]
                  },
                  "apiVersion": {
                    "type": "string",
                    "const": "v1",
                    "description": "The API version the payload follows.",
                    "examples": ["v1"]
                  },
                  "occurredAt": {
                    "type": "string",
                    "description": "When the event happened.",
                    "examples": ["2026-10-07T09:30:00.000Z"]
                  },
                  "organizationId": {
                    "type": "string",
                    "description": "The company the event belongs to (its Company ID).",
                    "examples": ["org_2abcDEF123"]
                  },
                  "jobId": {
                    "description": "Alfa's id for the job.",
                    "examples": [9301],
                    "type": ["integer", "null"]
                  },
                  "externalJobId": {
                    "description": "The ATS job the Alfa job is linked to.",
                    "examples": ["job_8841"],
                    "type": ["string", "null"]
                  },
                  "candidate": {
                    "anyOf": [
                      {
                        "type": "object",
                        "properties": {
                          "candidateId": {
                            "type": "string",
                            "description": "Alfa's id for the candidate: `app_…` for an applicant, `src_…` for a candidate Alfa sourced.",
                            "examples": ["app_254928"]
                          },
                          "externalCandidateId": {
                            "description": "Your candidate id, for applicants you sent through applicant intake.",
                            "examples": ["cand_123"],
                            "type": ["string", "null"]
                          },
                          "externalApplicationId": {
                            "description": "Your application id, for applicants you sent through applicant intake.",
                            "examples": ["appl_456"],
                            "type": ["string", "null"]
                          },
                          "firstName": {
                            "description": "First name.",
                            "examples": ["Ada"],
                            "type": ["string", "null"]
                          },
                          "lastName": {
                            "description": "Last name.",
                            "examples": ["Lovelace"],
                            "type": ["string", "null"]
                          },
                          "email": {
                            "description": "Email address.",
                            "examples": ["ada@example.com"],
                            "type": ["string", "null"]
                          },
                          "phone": {
                            "description": "Phone number, when known.",
                            "examples": ["+44 20 7946 0000"],
                            "type": ["string", "null"]
                          },
                          "linkedinUrl": {
                            "description": "LinkedIn profile URL, when known.",
                            "examples": ["https://www.linkedin.com/in/example"],
                            "type": ["string", "null"]
                          },
                          "source": {
                            "type": "string",
                            "enum": ["application", "sourced"],
                            "description": "`application` for an applicant, `sourced` for a candidate Alfa found and approached.",
                            "examples": ["application"]
                          },
                          "status": {
                            "type": "string",
                            "enum": [
                              "shortlisted",
                              "suitable",
                              "not_suitable",
                              "sourced_potential"
                            ],
                            "description": "`shortlisted`: a recruiter shortlisted them. `suitable` or `not_suitable`: the screening outcome. `sourced_potential`: a sourced candidate who fits the job.",
                            "examples": ["suitable"]
                          },
                          "statusUpdatedAt": {
                            "type": "string",
                            "description": "When the status last changed. Keep the newest one you receive.",
                            "examples": ["2026-10-07T09:30:00.000Z"]
                          },
                          "score": {
                            "description": "The candidate score from 0 to 100; for a sourced candidate, the sourcing score.",
                            "examples": [82],
                            "type": ["number", "null"]
                          },
                          "summary": {
                            "description": "Alfa's summary of the candidate against the job.",
                            "examples": [
                              "Eight years of backend engineering, most recently leading a payments team."
                            ],
                            "type": ["string", "null"]
                          },
                          "resumeUrl": {
                            "description": "A signed link to the resume PDF, valid for 24 hours. Null when there is none.",
                            "examples": ["https://files.welovealfa.com/resume.pdf?Signature=…"],
                            "type": ["string", "null"]
                          },
                          "profileUrl": {
                            "type": "string",
                            "description": "The candidate's page in Alfa, for signed-in recruiters.",
                            "examples": ["https://welovealfa.com/jobs/9301/254928"]
                          }
                        },
                        "required": [
                          "candidateId",
                          "externalCandidateId",
                          "externalApplicationId",
                          "firstName",
                          "lastName",
                          "email",
                          "phone",
                          "linkedinUrl",
                          "source",
                          "status",
                          "statusUpdatedAt",
                          "score",
                          "summary",
                          "resumeUrl",
                          "profileUrl"
                        ]
                      },
                      { "type": "null" }
                    ],
                    "description": "The candidate as of this event."
                  }
                },
                "required": [
                  "id",
                  "type",
                  "apiVersion",
                  "occurredAt",
                  "organizationId",
                  "jobId",
                  "externalJobId",
                  "candidate"
                ],
                "description": "Sent when you ask for a test delivery. It carries a sample candidate."
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Any 2xx status acknowledges the event. Anything else, a redirect or no answer within 10 seconds is retried with exponential backoff for 24 hours."
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Problem": {
        "type": "object",
        "properties": {
          "type": { "type": "string" },
          "title": { "type": "string" },
          "status": { "type": "integer" },
          "detail": { "type": "string" },
          "code": { "type": "string" },
          "correlationId": { "type": "string" },
          "errors": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "pointer": { "type": "string" },
                "detail": { "type": "string" },
                "code": { "type": "string" }
              },
              "required": ["pointer", "detail", "code"],
              "additionalProperties": false
            }
          }
        },
        "required": ["type", "title", "status", "code"],
        "additionalProperties": false
      },
      "Page": {
        "type": "object",
        "properties": {
          "data": { "type": "array", "items": {}, "description": "The results on this page." },
          "nextCursor": {
            "description": "Pass as `cursor` to read the next page; null on the last page.",
            "examples": ["eyJwIjpbIjEyIl0sInMiOiJ4In0.mT3…"],
            "type": ["string", "null"]
          }
        },
        "required": ["data", "nextCursor"],
        "additionalProperties": false
      },
      "AtsJob": {
        "type": "object",
        "properties": {
          "externalJobId": {
            "type": "string",
            "description": "Your ATS's id for the job.",
            "examples": ["job_8841"]
          },
          "title": {
            "type": "string",
            "description": "The job title.",
            "examples": ["Senior Backend Engineer"]
          },
          "status": {
            "type": "string",
            "enum": ["open", "closed"],
            "description": "Whether the job is offered in the picker.",
            "examples": ["open"]
          },
          "location": {
            "description": "Where the job is based.",
            "examples": ["London, UK"],
            "type": ["string", "null"]
          },
          "department": {
            "description": "The team or department.",
            "examples": ["Engineering"],
            "type": ["string", "null"]
          },
          "url": {
            "description": "A link to the job in your ATS.",
            "examples": ["https://ats.example.com/jobs/8841"],
            "type": ["string", "null"]
          },
          "createdAt": {
            "type": "string",
            "description": "When Alfa first received the job.",
            "examples": ["2026-10-07T09:30:00.000Z"]
          },
          "updatedAt": {
            "type": "string",
            "description": "When Alfa last received a change to the job.",
            "examples": ["2026-10-07T09:30:00.000Z"]
          }
        },
        "required": [
          "externalJobId",
          "title",
          "status",
          "location",
          "department",
          "url",
          "createdAt",
          "updatedAt"
        ],
        "additionalProperties": false
      },
      "Candidate": {
        "type": "object",
        "properties": {
          "candidateId": {
            "type": "string",
            "description": "Alfa's id for the candidate: `app_…` for an applicant, `src_…` for a candidate Alfa sourced.",
            "examples": ["app_254928"]
          },
          "externalCandidateId": {
            "description": "Your candidate id, for applicants you sent through applicant intake.",
            "examples": ["cand_123"],
            "type": ["string", "null"]
          },
          "externalApplicationId": {
            "description": "Your application id, for applicants you sent through applicant intake.",
            "examples": ["appl_456"],
            "type": ["string", "null"]
          },
          "firstName": {
            "description": "First name.",
            "examples": ["Ada"],
            "type": ["string", "null"]
          },
          "lastName": {
            "description": "Last name.",
            "examples": ["Lovelace"],
            "type": ["string", "null"]
          },
          "email": {
            "description": "Email address.",
            "examples": ["ada@example.com"],
            "type": ["string", "null"]
          },
          "phone": {
            "description": "Phone number, when known.",
            "examples": ["+44 20 7946 0000"],
            "type": ["string", "null"]
          },
          "linkedinUrl": {
            "description": "LinkedIn profile URL, when known.",
            "examples": ["https://www.linkedin.com/in/example"],
            "type": ["string", "null"]
          },
          "source": {
            "type": "string",
            "enum": ["application", "sourced"],
            "description": "`application` for an applicant, `sourced` for a candidate Alfa found and approached.",
            "examples": ["application"]
          },
          "status": {
            "type": "string",
            "enum": ["shortlisted", "suitable", "not_suitable", "sourced_potential"],
            "description": "`shortlisted`: a recruiter shortlisted them. `suitable` or `not_suitable`: the screening outcome. `sourced_potential`: a sourced candidate who fits the job.",
            "examples": ["suitable"]
          },
          "statusUpdatedAt": {
            "type": "string",
            "description": "When the status last changed. Keep the newest one you receive.",
            "examples": ["2026-10-07T09:30:00.000Z"]
          },
          "score": {
            "description": "The candidate score from 0 to 100; for a sourced candidate, the sourcing score.",
            "examples": [82],
            "type": ["number", "null"]
          },
          "summary": {
            "description": "Alfa's summary of the candidate against the job.",
            "examples": [
              "Eight years of backend engineering, most recently leading a payments team."
            ],
            "type": ["string", "null"]
          },
          "resumeUrl": {
            "description": "A signed link to the resume PDF, valid for 24 hours. Null when there is none.",
            "examples": ["https://files.welovealfa.com/resume.pdf?Signature=…"],
            "type": ["string", "null"]
          },
          "profileUrl": {
            "type": "string",
            "description": "The candidate's page in Alfa, for signed-in recruiters.",
            "examples": ["https://welovealfa.com/jobs/9301/254928"]
          },
          "jobId": {
            "type": "integer",
            "description": "Alfa's id for the job.",
            "examples": [9301]
          },
          "externalJobId": {
            "description": "The ATS job the Alfa job is linked to.",
            "examples": ["job_8841"],
            "type": ["string", "null"]
          }
        },
        "required": [
          "candidateId",
          "externalCandidateId",
          "externalApplicationId",
          "firstName",
          "lastName",
          "email",
          "phone",
          "linkedinUrl",
          "source",
          "status",
          "statusUpdatedAt",
          "score",
          "summary",
          "resumeUrl",
          "profileUrl",
          "jobId",
          "externalJobId"
        ],
        "additionalProperties": false
      },
      "Job": {
        "type": "object",
        "properties": {
          "jobId": {
            "type": "integer",
            "description": "Alfa's id for the job.",
            "examples": [9301]
          },
          "externalJobId": {
            "type": "string",
            "description": "The ATS job the Alfa job is linked to.",
            "examples": ["job_8841"]
          },
          "title": {
            "description": "The Alfa job title.",
            "examples": ["Senior Backend Engineer"],
            "type": ["string", "null"]
          },
          "status": {
            "type": "string",
            "description": "The Alfa job status: `draft`, `live`, `published`, `paused` or `closed`.",
            "examples": ["live"]
          },
          "applyUrl": {
            "type": "string",
            "description": "The public page where candidates apply.",
            "examples": ["https://welovealfa.com/job/3f0c1d8e-6b6a-4f7e-9a51-0d2c5e7b9f10"]
          },
          "screeningQuestions": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "question": {
                  "type": "string",
                  "description": "The question, as `screeningAnswers` must quote it.",
                  "examples": ["Do you have the right to work in the UK?"]
                },
                "type": {
                  "description": "The answer type: `boolean`, `number`, `text` or `choice`.",
                  "examples": ["boolean"],
                  "type": ["string", "null"]
                },
                "mandatory": {
                  "type": "boolean",
                  "description": "Whether the job marks the question as required.",
                  "examples": [true]
                }
              },
              "required": ["question", "type", "mandatory"],
              "additionalProperties": false
            },
            "description": "The job's screening questions. Send answers to them with applicant intake."
          }
        },
        "required": ["jobId", "externalJobId", "title", "status", "applyUrl", "screeningQuestions"],
        "additionalProperties": false
      }
    },
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "description": "The session token of a signed-in Alfa user."
      },
      "apiKey": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "API key",
        "description": "An Alfa API key from Settings › Developers: `alfa_live_…` on the production API, `alfa_test_…` on the development API."
      }
    },
    "responses": {
      "Problem400": {
        "description": "The request is malformed: invalid JSON, an unexpected body or an unknown query parameter.",
        "content": {
          "application/problem+json": { "schema": { "$ref": "#/components/schemas/Problem" } }
        }
      },
      "Problem401": {
        "description": "The bearer token is missing, expired or invalid.",
        "content": {
          "application/problem+json": { "schema": { "$ref": "#/components/schemas/Problem" } }
        }
      },
      "Problem403": {
        "description": "The caller may not perform this operation, or has no active organisation.",
        "content": {
          "application/problem+json": { "schema": { "$ref": "#/components/schemas/Problem" } }
        }
      },
      "Problem404": {
        "description": "The resource does not exist or is not visible to the caller.",
        "content": {
          "application/problem+json": { "schema": { "$ref": "#/components/schemas/Problem" } }
        }
      },
      "Problem422": {
        "description": "The request failed validation; `errors` lists each invalid field.",
        "content": {
          "application/problem+json": { "schema": { "$ref": "#/components/schemas/Problem" } }
        }
      },
      "Problem429": {
        "description": "Too many requests, or the AI service is busy. Retry after a short wait.",
        "content": {
          "application/problem+json": { "schema": { "$ref": "#/components/schemas/Problem" } }
        }
      },
      "Problem500": {
        "description": "An unexpected error. Quote the `correlationId` to support.",
        "content": {
          "application/problem+json": { "schema": { "$ref": "#/components/schemas/Problem" } }
        }
      },
      "Problem409": {
        "description": "The resource is not in a state that allows this, or a request with the same `Idempotency-Key` is still running.",
        "content": {
          "application/problem+json": { "schema": { "$ref": "#/components/schemas/Problem" } }
        }
      },
      "Problem412": {
        "description": "The resource changed since the entity tag sent as `If-Match` was read. Read it again, then repeat the change.",
        "content": {
          "application/problem+json": { "schema": { "$ref": "#/components/schemas/Problem" } }
        }
      }
    }
  }
}
