/applicants/{applicant_id}

Endpoint for retrieving a processed application. This endpoint allows users to fetch the current details of a specific candidate's application for a specific job, including the applicant's status, notes, and other application data.

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…

For the full workflow around job applications (finding them, updating their status, messaging applicants and scheduling interviews), see the Applicant & Status Management guide.

Examples

The examples read your API key from an environment variable named APPLOI_API_KEY. Before running them, set APPLOI_API_KEY in your own environment to the Partner API key you received from Apploi. The examples do not set it for you, and the key should never be written into your code.

Where the id comes from

Despite its name, the applicant_id path parameter takes the id of a job application: one person's application to one job. Take it from the id field of an entry in a GET /applicants response:

{
  "data": [
    {
      "id": 265733753,
      "applicant_id": 71207841,
      "job_id": 1470975,
      "applicant_updated": "2026-09-18T14:03:22+00:00"
    }
  ],
  "offset": 0,
  "limit": 50
}

For this entry, request /applicants/265733753. Don't send the entry's applicant_id (71207841), which identifies the person rather than the job application. A person's id usually returns 404, but it can match a different job application and return that one, or a 403 if that job application is outside your key's scope.

Fetching one job application

# APPLOI_API_KEY must hold the Partner API key you received from Apploi.
# These examples do not set it for you: set it yourself, in your own
# environment, before running them. For example, in your shell:
#   export APPLOI_API_KEY="<the API key you received from Apploi>"

curl https://partners.apploi.com/applicants/265733753 \
  -H "X-Api-Key: $APPLOI_API_KEY"
import os

import requests

# APPLOI_API_KEY must hold the Partner API key you received from Apploi.
# These examples do not set it for you: set it yourself, in your own
# environment, before running them. For example, in your shell:
#   export APPLOI_API_KEY="<the API key you received from Apploi>"
API_KEY = os.environ["APPLOI_API_KEY"]

job_application_id = 265733753  # the "id" of an entry from GET /applicants

response = requests.get(
    f"https://partners.apploi.com/applicants/{job_application_id}",
    headers={"X-Api-Key": API_KEY},
    timeout=30,
)
response.raise_for_status()
job_application = response.json()["data"]

print(job_application["applicant_state"], job_application["job"]["name"])
print(job_application["applicant_profile"]["email"])
// APPLOI_API_KEY must hold the Partner API key you received from Apploi.
// These examples do not set it for you: set it yourself, in your own
// environment, before running them. For example, in your shell:
//   export APPLOI_API_KEY="<the API key you received from Apploi>"
if (!process.env.APPLOI_API_KEY) {
  throw new Error("Set APPLOI_API_KEY to the Partner API key you received from Apploi");
}
const API_KEY: string = process.env.APPLOI_API_KEY;

const jobApplicationId = 265733753; // the "id" of an entry from GET /applicants

const response = await fetch(`https://partners.apploi.com/applicants/${jobApplicationId}`, {
  headers: { "X-Api-Key": API_KEY },
});
if (!response.ok) {
  throw new Error(`Request failed with status ${response.status}`);
}
const jobApplication = (await response.json()).data;

console.log(jobApplication.applicant_state, jobApplication.job.name);
console.log(jobApplication.applicant_profile.email);
require "json"
require "net/http"
require "uri"

# APPLOI_API_KEY must hold the Partner API key you received from Apploi.
# These examples do not set it for you: set it yourself, in your own
# environment, before running them. For example, in your shell:
#   export APPLOI_API_KEY="<the API key you received from Apploi>"
API_KEY = ENV.fetch("APPLOI_API_KEY")

job_application_id = 265733753 # the "id" of an entry from GET /applicants

uri = URI("https://partners.apploi.com/applicants/#{job_application_id}")
request = Net::HTTP::Get.new(uri)
request["X-Api-Key"] = API_KEY

response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true, read_timeout: 30) do |http|
  http.request(request)
end
raise "Request failed with status #{response.code}" unless response.is_a?(Net::HTTPSuccess)
job_application = JSON.parse(response.body)["data"]

puts [job_application["applicant_state"], job_application["job"]["name"]].join(" ")
puts job_application["applicant_profile"]["email"]

The job application is wrapped in data. Trimmed to a few fields, the response looks like this:

{
  "data": {
    "id": 265733753,
    "applicant_id": 71207841,
    "job_id": 1470975,
    "applicant_state": "Interview Scheduled",
    "applicant_updated": "2026-09-18T14:03:22+00:00",
    "applicant_profile": {
      "id": 71207841,
      "first_name": "Jane",
      "last_name": "Doe",
      "email": "[email protected]"
    },
    "job": {
      "id": 1470975,
      "name": "Registered Nurse",
      "team_id": 123456
    }
  }
}

applicant_state is the job application's current status. applicant_profile describes the person who applied, and job the job they applied to. The full list of fields is in the response schema on this page.

resume_link is a signed download link that expires, or null when no resume is on file. Download the resume when you need it rather than storing the link.

Handling errors

StatusResponse bodyWhat happened
404{"developer_message": "Object Not Found", "extra": null}No job application has this id.
404{"developer_message": "The requested URL was not found on the server. ...", "extra": null}The id is not a whole number.
403{"developer_message": "You don't have the permission to access the requested resource. ...", "extra": null}The job application exists, but its job is outside your API key's scope.
403{"developer_message": "Forbidden", "extra": null}The job application has been deleted.
403{"message": "Forbidden"}The X-Api-Key header is missing or the key is invalid.

None of these succeed when retried unchanged. Check the id, and check that it came from the id field rather than applicant_id. Do retry a 5xx once or twice, after a few seconds' wait. The Errors guide covers status codes across the whole API.

These examples treat a 404 as "no such job application" and stop on anything else:

# APPLOI_API_KEY must hold the Partner API key you received from Apploi.
# These examples do not set it for you: set it yourself, in your own
# environment, before running them. For example, in your shell:
#   export APPLOI_API_KEY="<the API key you received from Apploi>"

# Prints the status code on the last line, after the response body
curl -sS https://partners.apploi.com/applicants/265733753 \
  -H "X-Api-Key: $APPLOI_API_KEY" \
  -w "\n%{http_code}\n"
import os

import requests

# APPLOI_API_KEY must hold the Partner API key you received from Apploi.
# These examples do not set it for you: set it yourself, in your own
# environment, before running them. For example, in your shell:
#   export APPLOI_API_KEY="<the API key you received from Apploi>"
API_KEY = os.environ["APPLOI_API_KEY"]

def get_job_application(job_application_id):
    response = requests.get(
        f"https://partners.apploi.com/applicants/{job_application_id}",
        headers={"X-Api-Key": API_KEY},
        timeout=30,
    )
    if response.status_code == 404:
        return None  # no job application with this id
    response.raise_for_status()  # a 403 means it's outside your key's scope or deleted
    return response.json()["data"]

job_application = get_job_application(265733753)
if job_application is None:
    print("No job application with that id")
// APPLOI_API_KEY must hold the Partner API key you received from Apploi.
// These examples do not set it for you: set it yourself, in your own
// environment, before running them. For example, in your shell:
//   export APPLOI_API_KEY="<the API key you received from Apploi>"
if (!process.env.APPLOI_API_KEY) {
  throw new Error("Set APPLOI_API_KEY to the Partner API key you received from Apploi");
}
const API_KEY: string = process.env.APPLOI_API_KEY;

async function getJobApplication(jobApplicationId: number): Promise<any | null> {
  const response = await fetch(`https://partners.apploi.com/applicants/${jobApplicationId}`, {
    headers: { "X-Api-Key": API_KEY },
  });
  if (response.status === 404) {
    return null; // no job application with this id
  }
  if (!response.ok) {
    // a 403 means it's outside your key's scope or deleted
    throw new Error(`Request failed with status ${response.status}: ${await response.text()}`);
  }
  return (await response.json()).data;
}

const jobApplication = await getJobApplication(265733753);
if (jobApplication === null) {
  console.log("No job application with that id");
}
require "json"
require "net/http"
require "uri"

# APPLOI_API_KEY must hold the Partner API key you received from Apploi.
# These examples do not set it for you: set it yourself, in your own
# environment, before running them. For example, in your shell:
#   export APPLOI_API_KEY="<the API key you received from Apploi>"
API_KEY = ENV.fetch("APPLOI_API_KEY")

def get_job_application(job_application_id)
  uri = URI("https://partners.apploi.com/applicants/#{job_application_id}")
  request = Net::HTTP::Get.new(uri)
  request["X-Api-Key"] = API_KEY

  response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true, read_timeout: 30) do |http|
    http.request(request)
  end
  return nil if response.is_a?(Net::HTTPNotFound) # no job application with this id
  # a 403 means it's outside your key's scope or deleted
  raise "Request failed with status #{response.code}: #{response.body}" unless response.is_a?(Net::HTTPSuccess)

  JSON.parse(response.body)["data"]
end

job_application = get_job_application(265733753)
puts "No job application with that id" if job_application.nil?

Keeping up with changes

To track status changes, don't call this endpoint for every job application on a schedule. Instead, ask GET /applicants with updated_after for the job applications that changed since your last run, and fetch the full detail here only for those.

Sensitive data

Send include_sensitive_data=true to ask for the person's Social Security Number. Apploi has to enable this for your team first.

  • Without the parameter, applicant_profile has no social_security_number key.
  • With it, social_security_number is the SSN when the feature is enabled and the SSN was collected in a signed document for this job application, and null otherwise.
  • date_of_birth comes back either way. With include_sensitive_data=true and the feature enabled, if a signed document for this job application has a birth date, that date replaces the profile's, as a plain date such as "1990-01-01". This happens whether or not an SSN was found, and the date can differ from the one on the profile.
Path Params
string
required

The application form ID corresponding to a job application in the Apploi platform. The application form ID is a unique identifier for the job application in the Apploi platform. The application form ID can be found in the 'id' field of the each of the items in the response body of a call to the /applicants endpoint in the Apploi Partner API.

Examples: 265733753, 265733754, etc.

Query Params
string

When set to true, the response includes additional sensitive candidate data (for example, Social Security Number and date of birth) if this has been enabled for the requesting team. Defaults to false when omitted.

Examples: true, false

Headers
string
required
Responses

403

Invalid Token

404

Not Found

Language
Credentials
Header
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json