Applicants
The people who applied, and their contact details.
An applicant is a person who applied to one of the workspace’s jobs, or who came in from the customer’s own ATS. Of everyone in Tahoe, applicants have the clearest footing: they chose to apply, and the provenance block on every record says so.
GET/applicantsapplicants:read
Applicants in the workspace, most recently updated first.
| Parameter | Type | Notes |
|---|---|---|
email | string | Exact match on the email the applicant gave. |
has_applications | boolean | Only applicants who do (or do not) have an application. |
updated_after | timestamp | Only applicants changed since. Use it for incremental sync. |
limit | integer | Default 25, maximum 100. |
cursor | string | From the previous page. Send the same filters with it. |
curl "https://tahoe.workonward.com/api/partner/v1/applicants?updated_after=2026-09-01T00:00:00Z&limit=100" \
-H "Authorization: Bearer $TAHOE_API_KEY"{
"object": "list",
"data": [
{
"object": "applicant",
"id": "apl_5Nx3jLm7Qd2s",
"workspace_id": "wsp_4Kd8sPm2Qx7L",
"full_name": "Jordan Rivera",
"location": "Columbus, Ohio",
"linkedin_url": "https://www.linkedin.com/in/jordan-rivera-1a2b3c",
"github_url": null,
"portfolio_url": null,
"created_at": "2026-09-02T14:21:09.115Z",
"updated_at": "2026-09-07T09:44:31.002Z",
"provenance": {
"origin": "applicant",
"acquisition": "inbound_application",
"provider": null,
"owner_workspace_id": "wsp_4Kd8sPm2Qx7L",
"first_seen_at": "2026-09-02T14:21:09.115Z",
"last_seen_at": "2026-09-07T09:44:31.002Z",
"consent": {
"basis": "candidate_submitted",
"candidate_facing_notice": true,
"unsubscribed": false,
"suppressed": false
},
"licence": {
"redistributable": false,
"note": "Submitted by the candidate to a specific employer for a specific role."
}
},
"external_refs": [],
"links": {
"self": "/api/partner/v1/applicants/apl_5Nx3jLm7Qd2s",
"applications": "/api/partner/v1/applicants/apl_5Nx3jLm7Qd2s/applications",
"resumes": "/api/partner/v1/applicants/apl_5Nx3jLm7Qd2s/resumes",
"contact_info": "/api/partner/v1/applicants/apl_5Nx3jLm7Qd2s/contact-info"
}
}
],
"has_more": true,
"next_cursor": "cur_eyJrIjoiMjAyNi0wOS0wN1QwOTo0NDozMVoi..."
}The provenance block
Every record that describes a person carries this block: applicants, sourced profiles and shared-pool profiles. It tells you where the record came from and on what basis Tahoe holds it, and it is the field your compliance team will key on.
| Field | Meaning |
|---|---|
origin | Which group the person belongs to: applicant, ats_import (an applicant imported from the customer’s ATS), sourced or shared_pool. |
acquisition | How the record arrived, for example inbound_application or ats_sync. |
provider | For an ATS import, the ATS it came from. null for someone who applied in Tahoe. |
owner_workspace_id | The workspace the record belongs to. |
first_seen_at, last_seen_at | When Tahoe first and last saw this record. |
consent.basis | candidate_submitted, customer_provided, legitimate_interest_sourcing or public_profile. |
consent.candidate_facing_notice | Whether the person saw a notice when their data was collected. True only for applicants. |
consent.unsubscribed | They asked not to be contacted. Honor it whatever your scopes. |
consent.suppressed | Whether the person is under a suppression notice. The erasure feed is the full record of those. |
licence.redistributable | Always false. |
licence.note | A one-line statement of where the data came from. |
external_refs
When an applicant came in through an ATS connection, this holds their ID in that system. It is what an HR system needs to match Tahoe applicants to its own records without guessing from names.
"external_refs": [
{
"system": "greenhouse",
"type": "candidate",
"id": "48213097",
"connection_id": "ci_7Kd2mXq4Rp8v",
"link_origin": "import",
"last_synced_at": "2026-09-07T03:00:11.408Z"
}
]Match on system plus id. connection_id identifies the customer’s ATS connection and is not something you need to call. An applicant who applied in Tahoe has an empty array.
GET/applicants/{applicant_handle}applicants:read
One applicant, in the same shape as a list row.
GET/applicants/{applicant_handle}/applicationsapplications:read
Every application this person has made in the workspace, as the same objects the Applications endpoints return. Note the scope: it is applications:read, because what comes back is applications.
GET/applicants/{applicant_handle}/resumesresume:read
Every resume this person has sent, one per application. Each carries its own resume_access block, because each application started its own clock: the same person can have one resume you can download and another that is locked.
{
"object": "list",
"data": [
{
"object": "resume",
"id": "res_6Qm2xKd4Rp8v",
"application_id": "app_6Qm2xKd4Rp8v",
"job_id": "job_7Kd2mXq4Rp8v",
"filename": "jordan-rivera-resume.pdf",
"mime": "application/pdf",
"bytes": 184320,
"parse_status": "parsed",
"has_parsed_profile": true,
"resume_access": {
"state": "open",
"free_until": "2026-12-01T14:21:09.115Z",
"view_until": "2026-12-31T14:21:09.115Z",
"state_changes_at": "2026-12-01T14:21:09.115Z",
"unlock_credits": 50,
"can_view": true,
"can_download": true
},
"links": {
"detail": "/api/partner/v1/applications/app_6Qm2xKd4Rp8v/resume",
"download": "/api/partner/v1/applications/app_6Qm2xKd4Rp8v/resume/download"
}
}
],
"has_more": false,
"next_cursor": null
}GET/applicants/{applicant_handle}/contact-infocontact:read
The email address the applicant gave and, if your key also has contact:phone:read, their phone number. Without the phone scope, phones is named in restricted, so you can tell “not allowed” from “no phone number”.
curl https://tahoe.workonward.com/api/partner/v1/applicants/apl_5Nx3jLm7Qd2s/contact-info \
-H "Authorization: Bearer $TAHOE_API_KEY"{
"object": "contact_info",
"subject": { "object": "applicant", "id": "apl_5Nx3jLm7Qd2s" },
"emails": [
{
"value": "[email protected]",
"kind": "submitted",
"status": "found",
"verified_at": null,
"source": {
"object": "applicant",
"id": "apl_5Nx3jLm7Qd2s",
"workspace_id": "wsp_4Kd8sPm2Qx7L"
},
"licence": { "redistributable": false }
}
],
"phones": [],
"unsubscribed": false,
"restricted": ["phones"],
"restricted_reason": {
"phones": "scope_required:contact:phone:read"
}
}Each value also carries the provenance block of the record it came from. An applicant’s contact details were given by the applicant, so they are never behind a credit charge. They are still personal data: each value returned counts one against the daily personal-data budget and is recorded in the audit log.
Related events
applicant.created, applicant.updated, applicant.deleted and applicant.unsubscribed, all under applicants:read. Handle applicant.unsubscribed first: it is how you learn to stop emailing someone who asked you to. See the change feed.