인물
이메일이나 LinkedIn URL로 내 기록을 Tahoe 인물과 연결하세요.
같은 사람이 Tahoe에 지원자, 소싱한 프로필, 공유 인재풀 프로필로 동시에 있을 수 있습니다. 이 엔드포인트들은 이미 가지고 있는 식별자, 즉 이메일 주소나 LinkedIn URL을 받아 어떤 Tahoe 레코드가 그 사람의 것인지 알려 줍니다.
인물 조회가 동작하는 방식
person은 레코드가 아닙니다. 조회 결과입니다. 확인한 신원과, 그 신원에 일치하는 레코드를 가리키는 포인터로 이루어집니다. 응답에도 "authoritative": false 필드로 이 사실이 표시됩니다.
병합되는 것은 없습니다. 인물은 “이메일 주소”를 갖지 않고, 각자 이메일을 가진 레코드를 가리킬 뿐입니다. 데이터가 필요하면 레코드 자체를 읽으세요.
| 식별자 | 일치 대상 | 신뢰도 |
|---|---|---|
linkedin_url | 그 LinkedIn 프로필을 가진 지원자, 소싱한 프로필, 공유 인재풀 프로필 | exact |
email | 그 이메일 주소를 입력한 지원자 | probable |
LinkedIn URL은 한 사람을 가리키므로 이 값으로 일치하면 exact입니다. 이메일 일치는 probable일 뿐입니다. 여럿이 함께 쓰는 주소, 다시 쓰이는 주소, 역할 주소가 있기 때문입니다. 각 레코드 종류는 키가 읽을 수 있을 때만 확인합니다. 지원자는 applicants:read, 소싱한 프로필은 sourced_profiles:read, 인재풀 프로필은 pool:read가 필요합니다. 키가 읽을 수 없는 레코드는 빠지며 개수에도 포함되지 않습니다.
GET/people/resolvepeople:resolve
시작점입니다. 쿼리 파라미터로 email이나 linkedin_url 중 정확히 하나를 보내세요. 둘 다 없거나 둘 다 보내면 400 invalid_request입니다. 값은 URL 인코딩하세요.
curl -G https://tahoe.workonward.com/api/partner/v1/people/resolve \
-H "Authorization: Bearer $TAHOE_API_KEY" \
--data-urlencode "linkedin_url=https://www.linkedin.com/in/priya-raman-9x8y7z"{
"object": "person",
"id": "per_Lk7d2QmXr9Tz4Wc8",
"canonical_id": "per_Lk7d2QmXr9Tz4Wc8",
"aliases": ["per_Em3x8Rk2Wq5Nb7Jd"],
"identity": { "kind": "linkedin_url", "value": "linkedin.com/in/priya-raman-9x8y7z" },
"authoritative": false,
"display": {
"full_name": "Priya Raman",
"headline": "Field Operations Manager at Northwind Logistics",
"location": "Columbus, Ohio, United States",
"photo_url": null
},
"display_source": {
"object": "sourced_profile",
"id": "cnd_8Fj3kLm2Qd7s",
"workspace_id": "wsp_4Kd8sPm2Qx7L"
},
"profiles": [
{
"object": "sourced_profile",
"id": "cnd_8Fj3kLm2Qd7s",
"workspace_id": "wsp_4Kd8sPm2Qx7L",
"match": { "on": "linkedin_url", "confidence": "exact", "strength": "full" },
"provenance": { "origin": "sourced", "provider": "xray" }
},
{
"object": "applicant",
"id": "apl_2Xj7kQd4Rm8s",
"workspace_id": "wsp_4Kd8sPm2Qx7L",
"match": { "on": "linkedin_url", "confidence": "exact", "strength": "full" },
"provenance": { "origin": "applicant", "provider": null }
}
],
"counts": {
"profiles": 2,
"sourced_profiles": 1,
"applicants": 1,
"pool_profiles": 0,
"exact_matches": 2
},
"links": {
"self": "/api/partner/v1/people/per_Lk7d2QmXr9Tz4Wc8",
"profiles": "/api/partner/v1/people/per_Lk7d2QmXr9Tz4Wc8/profiles",
"contact_info": "/api/partner/v1/people/per_Lk7d2QmXr9Tz4Wc8/contact-info",
"resumes": "/api/partner/v1/people/per_Lk7d2QmXr9Tz4Wc8/resumes",
"applications": "/api/partner/v1/people/per_Lk7d2QmXr9Tz4Wc8/applications"
}
}| 필드 | 의미 |
|---|---|
id | 보낸 식별자에 대한 인물 핸들입니다. |
canonical_id | 이 사람에 대해 알려진 가장 강한 식별자의 핸들입니다(LinkedIn URL이 이메일보다 강합니다). id가 아니라 이 값을 저장하세요. |
aliases | 같은 사람으로 이어지는 다른 인물 핸들입니다. |
identity | 조회에 사용한 식별자를 Tahoe가 정규화한 값입니다. |
authoritative | 항상 false입니다. 레코드가 아니라 조회 결과라는 것을 상기시킵니다. |
display, display_source | UI에 보여 줄 이름, 헤드라인, 지역, 사진과, 그 값을 가져온 레코드입니다. |
profiles | 일치하는 레코드를 가리키는 포인터입니다. 유형, 핸들, 워크스페이스, 일치 방식, 출처를 담으며 값은 담지 않습니다. |
counts.exact_matches | 정확히 일치한 포인터의 수입니다. 0이면 모든 일치가 probable입니다. |
[email protected]이나 [email protected] 같은 공용 역할 주소는 400 not_an_identity로 거부됩니다. 이런 주소를 기준으로 인물을 잡으면 그 메일함을 쓰는 모든 사람이 하나로 합쳐지기 때문입니다. 유효한 개인 주소이지만 Tahoe에 없다면 404를 반환합니다.
POST/people/resolve:batchpeople:resolve
자체 테이블을 Tahoe와 맞춰 볼 수 있도록 한 번에 최대 100개의 식별자를 보냅니다. 각 키는 kind(email 또는 linkedin_url)와 value를 가진 객체입니다. expensive 속도 제한 등급(분당 60건)에 속합니다.
curl -X POST https://tahoe.workonward.com/api/partner/v1/people/resolve:batch \
-H "Authorization: Bearer $TAHOE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"keys": [
{ "kind": "linkedin_url", "value": "https://www.linkedin.com/in/priya-raman-9x8y7z" },
{ "kind": "email", "value": "[email protected]" },
{ "kind": "email", "value": "[email protected]" },
{ "kind": "email", "value": "[email protected]" }
]
}'{
"object": "list",
"data": [
{
"object": "resolution",
"input": { "kind": "linkedin_url", "value": "https://www.linkedin.com/in/priya-raman-9x8y7z" },
"matched": true,
"person": {
"object": "person",
"id": "per_Lk7d2QmXr9Tz4Wc8",
"canonical_id": "per_Lk7d2QmXr9Tz4Wc8",
"counts": { "profiles": 2, "exact_matches": 2 }
}
},
{
"object": "resolution",
"input": { "kind": "email", "value": "[email protected]" },
"matched": true,
"person": {
"object": "person",
"id": "per_Qw4n8Tz2Lk6Hs1Vb",
"canonical_id": "per_Rt5m9Xc3Jp7Gd2Nf",
"counts": { "profiles": 1, "exact_matches": 0 }
}
},
{
"object": "resolution",
"input": { "kind": "email", "value": "[email protected]" },
"matched": false,
"reason": "no_match"
},
{
"object": "resolution",
"input": { "kind": "email", "value": "[email protected]" },
"matched": false,
"reason": "not_an_identity"
}
],
"has_more": false,
"next_cursor": null
}POST를 쓰는 이유는 이메일 주소 100개가 URL에 담겨 접근 로그에 남지 않도록 하기 위해서일 뿐입니다. 아무것도 바꾸지 않으며 반복해도 안전합니다.
GET/people/{person_handle}people:resolve
저장해 둔 핸들로 인물을 다시 조회하고, GET /people/resolve와 같은 객체를 반환합니다. canonical_id가 id와 다르면 canonical 쪽도 읽으세요. 원래 핸들에서는 probable이던 일치가 canonical 쪽에서는 exact일 수 있습니다.
GET/people/{person_handle}/profilespeople:resolve
포인터만 목록으로 반환합니다. 인물은 알고 있고, 어떤 레코드를 읽어야 할지 알고 싶을 때 쓰세요.
GET/people/{person_handle}/contact-infocontact:read
이 인물과 정확히 일치한 모든 지원자와 소싱한 프로필의 연락처를 반환합니다. 값마다 그 값이 나온 레코드를 표시하고, 중복은 없앱니다. 전화번호를 읽으려면 contact:phone:read도 필요합니다. 소싱한 프로필에서는 워크스페이스가 이미 열람한 연락처만 반환합니다. 값마다 일일 개인 데이터 한도에서 차감됩니다.
probable 일치는 여기에 아무것도 더하지 않으며, 응답의 excluded_probable_matches에 그 수가 표시됩니다. 이메일은 항상 probable로만 일치하므로, 이메일로만 조회한 인물에게는 값이 오지 않습니다. 아래 예시는 위 배치에서 이메일로 조회한 인물입니다.
curl https://tahoe.workonward.com/api/partner/v1/people/per_Qw4n8Tz2Lk6Hs1Vb/contact-info \
-H "Authorization: Bearer $TAHOE_API_KEY"{
"object": "contact_info",
"subject": { "object": "person", "id": "per_Qw4n8Tz2Lk6Hs1Vb" },
"emails": [],
"phones": [],
"unsubscribed": false,
"excluded_probable_matches": 1,
"excluded_reason": "Only exact identity matches contribute contact values. Probable matches are listed under /profiles so you can judge them yourself."
}GET/people/{person_handle}/resumesresume:read
이 인물과 정확히 일치한 지원자의 모든 이력서를, 이력서마다 따로 있는 resume_access 블록과 함께 반환합니다.
GET/people/{person_handle}/applicationsapplications:read
이 인물과 정확히 일치한 지원자의 모든 지원서입니다. LinkedIn URL로 조회한 뒤 이 엔드포인트를 호출하면 “이 후보자가 전에 우리 회사에 지원한 적이 있나?”에 답할 수 있습니다.
관련 이벤트
person.identity_linked와 person.canonical_id_changed가 있으며, 둘 다 people:resolve에 속합니다. 변경 피드를 참고하세요.