> ## Documentation Index
> Fetch the complete documentation index at: https://docs.paraform.com/llms.txt
> Use this file to discover all available pages before exploring further.

# One candidate from your CRM, in full

<Info>
  **Required scopes:** `candidates:read`, `submissions:read`<br />
  **Rate limit:** `default` tier, 120 requests per minute per key
</Info>

Everything your CRM holds on one of your candidates: profile links, work history and education, stated preferences (pay, location, workplace, role types, visa), your CRM note and tags, and every submission of them you made, with its outcome. Only your own CRM is read: a candidate held only by an agency teammate returns 404, even if your agency shares candidates in the app.

`candidateId` is the `candidateId` from `listRecruiterCandidates`. A candidate that isn't in your CRM, or that you've hidden or archived, returns 404.

`applications` lists your submissions of this candidate, newest first, with `status` `WITHDRAWN` for a withdrawn one.

The resume file isn't returned. `experiences` and `education` carry its structured content.

## Path parameters

<ParamField path="candidateId" type="string" required>
  The `candidateId` of a `listRecruiterCandidates` row.
  Constraints: min length 1.
</ParamField>

## Response

<ResponseField name="id" type="string" required />

<ResponseField name="candidateId" type="string" required />

<ResponseField name="name" type="string | null" required />

<ResponseField name="oneLiner" type="string | null" required />

<ResponseField name="location" type="string | null" required />

<ResponseField name="linkedinUrl" type="string | null" required />

<ResponseField name="personalUrl" type="string | null" required />

<ResponseField name="githubUrl" type="string | null" required />

<ResponseField name="yearsOfExperience" type="number | null" required />

<ResponseField name="addedAt" type="string" required />

<ResponseField name="relationshipStatus" type="string" required />

<ResponseField name="tags" type="string[]" required />

<ResponseField name="note" type="string | null" required>
  Your own free-text CRM note on this candidate.
</ResponseField>

<ResponseField name="resume" type="object" required>
  Whether the CRM row has a profile resume. The file itself isn't returned; `experiences` and `education` are its structured content.

  <Expandable title="resume properties">
    <ResponseField name="onFile" type="boolean" required />
  </Expandable>
</ResponseField>

<ResponseField name="preferences" type="object | null" required>
  What the candidate wants: the newest preferences you or the candidate typed, else the newest inferred ones. Null when nothing is saved.

  <Expandable title="preferences properties">
    <ResponseField name="source" type="string" required />

    <ResponseField name="updatedAt" type="string" required />

    <ResponseField name="locations" type="string[]" required />

    <ResponseField name="salaryMin" type="number | null" required />

    <ResponseField name="salaryMax" type="number | null" required />

    <ResponseField name="ote" type="number | null" required />

    <ResponseField name="workplace" type="string[]" required />

    <ResponseField name="roleTypes" type="string[]" required />

    <ResponseField name="fundingRounds" type="string[]" required />

    <ResponseField name="visa" type="string[]" required />

    <ResponseField name="visaAuthorization" type="string | null" required />

    <ResponseField name="excludedIndustries" type="string[]" required />

    <ResponseField name="companySizes" type="string[]" required />
  </Expandable>
</ResponseField>

<ResponseField name="experiences" type="object[]" required>
  <Expandable title="experiences properties">
    <ResponseField name="title" type="string" required />

    <ResponseField name="company" type="string" required />

    <ResponseField name="startDate" type="string | null" required />

    <ResponseField name="endDate" type="string | null" required />

    <ResponseField name="isCurrent" type="boolean" required />

    <ResponseField name="location" type="string | null" required />

    <ResponseField name="employmentType" type="string | null" required />

    <ResponseField name="description" type="string | null" required />
  </Expandable>
</ResponseField>

<ResponseField name="education" type="object[]" required>
  <Expandable title="education properties">
    <ResponseField name="school" type="string" required />

    <ResponseField name="degree" type="string | null" required />

    <ResponseField name="startDate" type="string | null" required />

    <ResponseField name="endDate" type="string | null" required />
  </Expandable>
</ResponseField>

<ResponseField name="applications" type="object[]" required>
  Your submissions of this candidate, newest first.

  <Expandable title="applications properties">
    <ResponseField name="roleId" type="string" required />

    <ResponseField name="roleName" type="string" required />

    <ResponseField name="companyName" type="string" required />

    <ResponseField name="urls" type="object" required>
      `browse` is the role page. `recruit` is always null here; getRecruiterRole carries the live recruit link.

      <Expandable title="urls properties">
        <ResponseField name="browse" type="string" required />

        <ResponseField name="recruit" type="string | null" required />
      </Expandable>
    </ResponseField>

    <ResponseField name="status" type="string" required>
      `WITHDRAWN` when the submission was withdrawn.
    </ResponseField>

    <ResponseField name="currentStage" type="string | null" required />

    <ResponseField name="furthestStage" type="string | null" required />

    <ResponseField name="submittedAt" type="string" required />
  </Expandable>
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X GET "https://external-api.paraform.com/api/external/v1/recruiter/candidates/$CANDIDATE_ID" \
    -H "Authorization: Bearer $PARAFORM_API_KEY"
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "id": "string",
    "candidateId": "string",
    "name": "string",
    "oneLiner": "string",
    "location": "string",
    "linkedinUrl": "string",
    "personalUrl": "string",
    "githubUrl": "string",
    "yearsOfExperience": 0,
    "addedAt": "string",
    "relationshipStatus": "string",
    "tags": [
      "string"
    ],
    "note": "string",
    "resume": {
      "onFile": true
    },
    "preferences": {
      "source": "string",
      "updatedAt": "string",
      "locations": [
        "string"
      ],
      "salaryMin": 0,
      "salaryMax": 0,
      "ote": 0,
      "workplace": [
        "string"
      ],
      "roleTypes": [
        "string"
      ],
      "fundingRounds": [
        "string"
      ],
      "visa": [
        "string"
      ],
      "visaAuthorization": "string",
      "excludedIndustries": [
        "string"
      ],
      "companySizes": [
        "string"
      ]
    },
    "experiences": [
      {
        "title": "string",
        "company": "string",
        "startDate": "string",
        "endDate": "string",
        "isCurrent": true,
        "location": "string",
        "employmentType": "string",
        "description": "string"
      }
    ],
    "education": [
      {
        "school": "string",
        "degree": "string",
        "startDate": "string",
        "endDate": "string"
      }
    ],
    "applications": [
      {
        "roleId": "string",
        "roleName": "string",
        "companyName": "string",
        "urls": {
          "browse": "string",
          "recruit": "string"
        },
        "status": "string",
        "currentStage": "string",
        "furthestStage": "string",
        "submittedAt": "string"
      }
    ]
  }
  ```
</ResponseExample>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.