본문으로 건너뛰기

지원서

지원서, 답변, 매칭 점수, 스크리닝 상태, 이력서, 그리고 지원서 이동, 탈락 처리, 메모.

지원서는 채용 공고 하나와 사람 한 명을 연결합니다. ATS 연동에 필요한 정보는 대부분 지원서에 달려 있습니다. 단계, 양식 답변, Tahoe의 매칭 점수, 전화 사전 스크리닝 상태, 이력서가 그렇습니다. 아래 아홉 개 엔드포인트로 이 정보를 읽습니다. 지원서를 바꾸는 엔드포인트도 다섯 개 있습니다. 다른 단계로 옮기기, 탈락 처리, 탈락 취소, 메모 추가, 평가표 추가입니다. 아래에서 설명합니다. 공고에 후보자를 추가하려면 지원서 만들기를 참고하세요.

GET/applicationsapplications:read

워크스페이스 전체의 지원서를 최근 수정된 순서로 보여 줍니다.

파라미터타입설명
job_idhandle공고 하나에 대한 지원서만 반환합니다.
applicant_idhandle지원자 한 명의 지원서만 반환합니다.
statusstring쉼표로 구분합니다. new, in_review, advanced, rejected, withdrawn, hired.
stage_idhandle지금 특정 파이프라인 단계에 있는 지원서만 반환합니다.
applied_aftertimestamp이 시점 이후 제출된 지원서만 반환합니다.
updated_aftertimestamp이 시점 이후 변경된 지원서만 반환합니다. 증분 동기화에 쓰세요.
limitinteger기본값 25, 최대 100.
cursorstring이전 페이지에서 받은 값입니다. 같은 필터를 함께 보내세요.
요청
curl "https://tahoe.workonward.com/api/partner/v1/applications?job_id=job_7Kd2mXq4Rp8v&updated_after=2026-09-01T00:00:00Z" \
  -H "Authorization: Bearer $TAHOE_API_KEY"
응답
{
  "object": "list",
  "data": [
    {
      "object": "application",
      "id": "app_6Qm2xKd4Rp8v",
      "workspace_id": "wsp_4Kd8sPm2Qx7L",
      "job_id": "job_7Kd2mXq4Rp8v",
      "applicant_id": "apl_5Nx3jLm7Qd2s",
      "stage_id": "stg_3Rp8vKd2mXq4",
      "status": "in_review",
      "source": "public_board",
      "applied_at": "2026-09-02T14:21:09.115Z",
      "updated_at": "2026-09-07T09:44:31.002Z",
      "parse_status": "parsed",
      "has_resume": true,
      "voice_screening_opted_out": false,
      "links": {
        "self": "/api/partner/v1/applications/app_6Qm2xKd4Rp8v",
        "answers": "/api/partner/v1/applications/app_6Qm2xKd4Rp8v/answers",
        "score": "/api/partner/v1/applications/app_6Qm2xKd4Rp8v/score",
        "resume": "/api/partner/v1/applications/app_6Qm2xKd4Rp8v/resume",
        "screening": "/api/partner/v1/applications/app_6Qm2xKd4Rp8v/screening",
        "stage_transitions": "/api/partner/v1/applications/app_6Qm2xKd4Rp8v/stage-transitions"
      },
      "restricted": ["rejection_reason"],
      "restricted_reason": {
        "rejection_reason": "scope_required:applications:internal:read"
      }
    }
  ],
  "has_more": true,
  "next_cursor": "cur_eyJrIjoiMjAyNi0wOS0wN1QwOTo0NDozMVoi..."
}
  • applicant_id는 null일 수 있습니다. 지원자와의 연결이 항상 있다고 가정하지 말고 null을 처리하세요.
  • parse_status는 이력서 분석 진행 상태입니다. pending, parsing, parsed, failed 중 하나입니다.
  • voice_screening_opted_out은 후보자가 전화 사전 스크리닝을 거절했을 때 true입니다. 전화 스크리닝 때문에 후보자에게 연락하는 워크플로가 있다면 이 값을 반드시 지켜야 합니다.
  • rejection_reason을 읽으려면 applications:internal:read가 필요합니다. 없으면 이 필드가 restricted에 표시됩니다.

GET/jobs/{job_handle}/applicationsapplications:read

같은 형태의 행을 공고 하나에 대해 반환합니다. status, stage_id, applied_after, limit, cursor를 받습니다. 전체를 읽은 뒤 직접 걸러 내는 것보다 이 엔드포인트를 쓰는 편이 좋습니다.

GET/applications/{application_handle}applications:read

목록 행과 같은 형태의 지원서 하나입니다. 이력서가 있는 지원서라면 단건 조회에 resume_access도 들어 있으며, 아래에서 설명합니다.

응답(일부 생략)
{
  "object": "application",
  "id": "app_6Qm2xKd4Rp8v",
  "status": "in_review",
  "applied_at": "2026-09-02T14:21:09.115Z",
  "has_resume": 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
  },
  "restricted": ["rejection_reason"],
  "restricted_reason": {
    "rejection_reason": "scope_required:applications:internal:read"
  }
}

GET/applications/{application_handle}/answersapplications:answers:read

지원자가 지원서 양식에 입력한 내용을 필드 id를 키로 반환합니다. 라벨과 유형을 알려면 공고의 지원서 양식에서 ID를 찾아보세요.

응답
{
  "object": "application_answers",
  "application_id": "app_6Qm2xKd4Rp8v",
  "answers": {
    "why_this_role": "I have run night shifts for three years and want to lead a larger team.",
    "shift_preference": ["Evening", "Night"]
  }
}

GET/applications/{application_handle}/scoreapplications:read

이 공고에 대한 이 지원서의 Tahoe AI 매칭 점수입니다. 0~100 사이의 match_pct와 찾아낸 부족한 점인 gaps를 반환합니다. 아직 점수가 매겨지지 않은 지원서는 404를 반환합니다.

응답
{
  "object": "application_score",
  "application_id": "app_6Qm2xKd4Rp8v",
  "match_pct": 82,
  "gaps": ["No forklift certification stated"],
  "restricted": ["rationale", "model_version"],
  "restricted_reason": {
    "rationale": "scope_required:applications:internal:read",
    "model_version": "scope_required:applications:internal:read"
  }
}

점수의 근거를 적은 글은 특정인에 관한 내용이므로, rationale과 model_version을 읽으려면 applications:internal:read가 필요합니다. 리크루터에게 match_pct를 보여 준다면 Tahoe의 평가라고 표시하세요.

GET/applications/{application_handle}/screeningscreening:metadata:read

후보자가 전화 사전 스크리닝을 받았는지, 결과가 어땠는지 알려 줍니다. 통화 상태, 어디까지 완료했는지, 통화 시간, 동의 여부입니다. 이 사실만 반환합니다. 녹음, 녹취록, 답변은 어떤 스코프로도 반환하지 않습니다.

응답
{
  "object": "screening",
  "application_id": "app_6Qm2xKd4Rp8v",
  "has_screening": true,
  "call_status": "completed",
  "completion_state": "complete",
  "duration_sec": 412,
  "consent_state": "granted",
  "ambiguous_caller": false,
  "started_at": "2026-09-04T11:02:18.440Z",
  "ended_at": "2026-09-04T11:09:10.771Z",
  "restricted": ["responses", "transcript", "audio"],
  "restricted_reason": {
    "responses": "never_exposed:consent_scope",
    "transcript": "never_exposed:consent_scope",
    "audio": "never_exposed:consent_scope"
  }
}

사전 스크리닝이 없었다면 404가 아니라 has_screening: false가 담긴 일반 200 응답을 반환합니다. 그래서 동기화 과정에서 “아직 통화 없음”을 하나의 데이터로 다룰 수 있습니다.

응답: 아직 사전 스크리닝 없음
{
  "object": "screening",
  "application_id": "app_6Qm2xKd4Rp8v",
  "has_screening": false
}

GET/applications/{application_handle}/stage-transitionsapplications:internal:read

파이프라인 단계 사이의 이동과 그 시점을 오래된 순서로 보여 줍니다. 단계별 소요 시간이나 자체 퍼널을 다시 계산하기에 충분합니다. 단계 핸들은 공고의 파이프라인 단계에서 확인하세요.

응답
{
  "object": "list",
  "data": [
    {
      "object": "stage_transition",
      "from_stage_id": null,
      "to_stage_id": "stg_9Kd2mXq4Rp8v",
      "at": "2026-09-02T14:21:09.115Z"
    },
    {
      "object": "stage_transition",
      "from_stage_id": "stg_9Kd2mXq4Rp8v",
      "to_stage_id": "stg_3Rp8vKd2mXq4",
      "at": "2026-09-05T16:38:52.309Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

응답에는 이동시킨 사람과 자유 텍스트가 없습니다. 누가 후보자를 옮겼는지, 그때 남긴 메모는 포함되지 않습니다.

이력서와 무료 열람 기간

Tahoe는 지원 후 일정 기간 동안 지원자의 이력서를 무료로 제공하며, API는 대시보드와 똑같은 규칙을 따릅니다. API를 쓴다고 이력서를 더 싸게 얻을 수는 없습니다.

상태시기분석된 프로필파일 다운로드
open지원 후 처음 90일예예
view_only90일째부터 120일째까지예아니요
locked120일 이후아니요아니요
unlocked워크스페이스가 잠금을 해제한 뒤, 언제든예예

잠금 해제에는 50크레딧이 한 번 들며, 효과는 영구적입니다. 잠금 해제는 API가 아니라 Tahoe에서 합니다. 모든 resume_access 블록의 unlock_credits에 가격이 있으므로, 사용자에게 잠금 해제 비용을 알려 줄 수 있습니다.

resume_access 블록

필드의미
state위의 네 가지 상태 중 하나입니다.
free_until무료 기간이 끝나는 시점입니다(지원 후 90일).
view_until보기 전용 기간이 끝나는 시점입니다(지원 후 120일).
state_changes_at다음에 상태가 저절로 바뀌는 시점입니다. 더 이상 바뀌지 않는다면 null입니다.
unlock_credits잠금 해제 비용입니다. 50크레딧.
can_view, can_download지금 분석된 프로필과 파일을 읽을 수 있는지 여부입니다.

GET/applications/{application_handle}/resumeresume:read

이력서 파일 정보, resume_access 블록, Tahoe가 이력서에서 분석한 프로필을 반환합니다. 이력서가 없는 지원서는 404를 반환합니다.

요청
curl https://tahoe.workonward.com/api/partner/v1/applications/app_8Lp3wNc5Tz1k/resume \
  -H "Authorization: Bearer $TAHOE_API_KEY"
응답
{
  "object": "resume",
  "id": "res_2Kd8sPm4Qx7L",
  "application_id": "app_8Lp3wNc5Tz1k",
  "filename": "dana-whitfield-resume.pdf",
  "mime": "application/pdf",
  "bytes": 184320,
  "parse_status": "parsed",
  "resume_access": {
    "state": "view_only",
    "free_until": "2026-08-30T14:21:09.115Z",
    "view_until": "2026-09-29T14:21:09.115Z",
    "state_changes_at": "2026-09-29T14:21:09.115Z",
    "unlock_credits": 50,
    "can_view": true,
    "can_download": false
  },
  "links": {
    "download": "/api/partner/v1/applications/app_8Lp3wNc5Tz1k/resume/download"
  },
  "parsed": {
    "current_title": "Shift Supervisor",
    "current_company": "Northwind Logistics",
    "seniority": "senior",
    "total_years_experience": 7,
    "city": "Columbus",
    "country": "US",
    "remote_ok": false,
    "education_level": "bachelors",
    "skills": ["Team leadership", "Inventory control", "Workplace safety"],
    "languages": ["English", "Spanish"],
    "extraction_confidence": 0.94,
    "parsed_at": "2026-06-01T14:23:41.088Z",
    "structured": { "experience": [], "education": [] },
    "work_authorization": null,
    "visa_required": null
  },
  "restricted": ["parsed.raw_text"],
  "restricted_reason": {
    "parsed.raw_text": "scope_required:resume:raw_text:read"
  }
}
  • structured에는 Tahoe가 문서에서 읽은 경력과 학력이 자유 텍스트로 들어 있습니다. 날짜가 정규화되어 있다고 가정하지 마세요.
  • 이력서 전문인 parsed.raw_text를 읽으려면 resume:raw_text:read가 필요합니다. 일일 개인 데이터 한도에 포함됩니다.
  • 상태가 locked이면 이 엔드포인트는 프로필 대신 403 resume_locked를 반환합니다. 오류에는 state와 unlock_credits가 담깁니다.
응답: 403(일부 생략)
{
  "detail": {
    "code": "resume_locked",
    "type": "payment_required",
    "message": "This resume is not currently viewable by the workspace that owns it.",
    "state": "locked",
    "unlock_credits": 50
  }
}

GET/applications/{application_handle}/resume/downloadresume:download

이력서 파일을 받을 수 있는, 잠깐만 유효한 서명된 링크를 반환합니다. download 속도 제한 등급(분당 30건)에 속하며, 호출할 때마다 일일 개인 데이터 한도에서 1건이 차감되고 감사 로그에 기록됩니다. 상태가 open이나 unlocked가 아니면 403 resume_locked를 반환합니다.

요청
curl https://tahoe.workonward.com/api/partner/v1/applications/app_6Qm2xKd4Rp8v/resume/download \
  -H "Authorization: Bearer $TAHOE_API_KEY"
응답
{
  "object": "resume_download",
  "application_id": "app_6Qm2xKd4Rp8v",
  "url": "https://files.example.com/resumes/6f2c9a...?signature=...",
  "expires_in": 300,
  "filename": "jordan-rivera-resume.pdf",
  "mime": "application/pdf",
  "bytes": 184320
}

url은 expires_in초(300초) 안에 가져오고, 저장하지 마세요. 링크를 가진 사람은 누구나 만료 전까지 그 파일을 내려받을 수 있습니다. 지원서 핸들을 저장해 두었다가, 파일이 다시 필요할 때 새 링크를 요청하세요.

지원서 변경하기

이 다섯 가지 호출은 리크루터가 대시보드에서 하는 일을 그대로 합니다. 카드를 다른 단계로 끌어 옮기고, 후보자를 탈락시키고, 탈락을 취소하고, 메모를 쓰고, 평가표를 채웁니다. 모두 POST이며 무엇도 삭제하지 않습니다.

  • API 키만 쓸 수 있습니다. Tahoe 사용자가 만든 키는 쓸 수 있습니다. Sign in with Tahoe 토큰은 403 write_requires_api_key를 받습니다. 연결된 앱의 쓰기가 켜져 있으면 예외입니다.
  • 필요한 스코프가 호출마다 다릅니다. 이동, 탈락, 탈락 취소는 applications:write가 필요합니다. 메모는 notes:write, 평가표는 scorecards:write가 필요합니다. 모두 유료 플랜 스코프입니다.
  • 리크루터는 누가 했는지 볼 수 있습니다. 변경은 키를 만든 사람이 한 것으로 기록되고, 지원서의 활동에는 API에서 온 변경임을 표시하는 항목이 하나 더 남습니다. 쓰기는 누가 한 것으로 기록되는가를 참고하세요.
  • 후보자에게는 아무것도 가지 않습니다. 이 호출들은 이메일, 문자 메시지, 알림을 보내지 않습니다. 후보자에게 연락하려면 POST /messages를 쓰세요.
  • 키를 보내면 재시도해도 안전합니다. Idempotency-Key 헤더를 보내세요. 이 다섯 호출에서는 선택 사항입니다.

형식이 잘못되었거나 다른 워크스페이스에 속한 핸들은 404 not_found를 반환합니다. 이 호출들은 일반 속도 제한 등급을 씁니다.

POST/applications/{application_handle}/moveapplications:write

카드를 끌어 놓는 것처럼 지원서를 같은 공고의 다른 단계로 옮깁니다. 응답은 GET /applications/{application_handle}가 반환하는 것과 같은 지원서이며, 새 stage_id와 새 updated_at이 들어 있습니다.

필드타입설명
stage_id핸들, 필수이 지원서가 속한 공고의 단계입니다. 핸들은 공고의 파이프라인 단계에서 읽으세요.
expected_updated_at타임스탬프선택. 동시 수정을 참고하세요.
요청
curl -X POST https://tahoe.workonward.com/api/partner/v1/applications/app_6Qm2xKd4Rp8v/move \
  -H "Authorization: Bearer $TAHOE_API_KEY" \
  -H "Idempotency-Key: move-6Qm2-to-screen-0001" \
  -H "Content-Type: application/json" \
  -d '{
    "stage_id": "stg_3Rp8vKd2mXq4",
    "expected_updated_at": "2026-10-08T21:15:51.327Z"
  }'
응답: 200 (일부)
{
  "object": "application",
  "id": "app_6Qm2xKd4Rp8v",
  "job_id": "job_7Kd2mXq4Rp8v",
  "stage_id": "stg_3Rp8vKd2mXq4",
  "status": "in_review",
  "updated_at": "2026-10-08T21:15:53.378Z",
  "restricted": ["rejection_reason"]
}
  • 400 invalid_stage는 핸들의 형식이 잘못되었거나, 단계가 없거나, 다른 공고나 워크스페이스의 단계라는 뜻입니다. 세 경우 모두 같은 응답을 받습니다.
  • 지원서가 이미 있는 단계로 옮기면 200을 반환하고, 아무것도 쓰지 않으며 이벤트도 보내지 않습니다. 그래서 멱등성 키 없이 같은 이동을 반복해도 문제가 없습니다.
  • Hired나 Rejected 같은 마지막 단계로 옮겨도 대시보드와 마찬가지로 단계만 바뀝니다. status는 바뀌지 않습니다. 결과를 기록하려면 탈락 처리를 쓰세요.
  • 이동은 지원서의 활동에 두 번 기록됩니다. 한 항목은 대시보드가 쓰는 것과 같은 종류인 application_updated이며 이전 단계와 새 단계가 들어 있습니다. 다른 항목의 종류는 partner_api_stage_move입니다. 단계 이력에는 API로 한 이동이 나타나고, 대시보드에서 한 이동은 나타나지 않습니다.
  • application.stage_changed 이벤트를 보냅니다. 파이프라인 화면과 분석은 바로 갱신됩니다.

POST/applications/{application_handle}/rejectapplications:write

status를 rejected로 바꾸고 내부용 사유를 저장합니다. 사유는 팀을 위한 것이며 후보자에게 보이지 않습니다.

필드타입설명
reasonstring, 필수1~2,000자.
expected_updated_at타임스탬프선택. 동시 수정을 참고하세요.
요청
curl -X POST https://tahoe.workonward.com/api/partner/v1/applications/app_6Qm2xKd4Rp8v/reject \
  -H "Authorization: Bearer $TAHOE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "reason": "Not enough experience with distributed systems",
    "expected_updated_at": "2026-10-08T21:15:51.327Z"
  }'
응답: 200 (일부)
{
  "object": "application",
  "id": "app_6Qm2xKd4Rp8v",
  "status": "rejected",
  "rejection_reason": "Not enough experience with distributed systems",
  "updated_at": "2026-10-08T21:20:07.114Z"
}
  • 키에 applications:internal:read도 있어야 응답에 rejection_reason이 들어갑니다. 없으면 방금 보낸 값이라도 이 필드는 restricted에 이름만 표시됩니다.
  • 409 invalid_application_state는 지원서가 이미 rejected이거나 withdrawn 또는 hired라는 뜻입니다. 두 번째 탈락 처리는 첫 사유를 덮어쓸 수 없습니다. withdrawn은 후보자의 결정이고 hired는 채용 결정이므로 탈락시킬 수 없습니다.
  • 대시보드의 탈락 처리와 마찬가지로 단계는 바뀌지 않으며, 탈락 이메일도 보내지 않습니다.
  • 이전 상태는 활동 항목에 저장되어, 탈락 취소 때 복원됩니다. 종류가 partner_api_reject인 두 번째 항목은 API에서 온 변경임을 표시합니다.
  • application.status_changed 이벤트를 보냅니다. 이벤트에는 사유가 들어가지 않습니다.

POST/applications/{application_handle}/reopenapplications:write

탈락을 취소합니다. 본문은 선택 사항입니다. {}를 보내거나, 아무것도 보내지 않거나, expected_updated_at을 보내세요.

요청
curl -X POST https://tahoe.workonward.com/api/partner/v1/applications/app_6Qm2xKd4Rp8v/reopen \
  -H "Authorization: Bearer $TAHOE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "expected_updated_at": "2026-10-08T21:20:07.114Z" }'
  • 응답은 복원된 상태와 rejection_reason: null이 들어 있는 지원서입니다. 탈락 처리와 마찬가지로 rejection_reason이 restricted에 표시될 수도 있습니다.
  • API로 탈락시킨 경우 상태는 탈락 전으로 돌아갑니다. 대시보드에서 탈락시킨 경우에는 이전 상태가 기록되지 않으므로 지원서가 in_review로 돌아갑니다.
  • 사유는 지원서에서 지워지고 활동 이력에는 남습니다. 단계는 바뀌지 않습니다.
  • 409 invalid_application_state는 지원서가 탈락 상태가 아니라는 뜻입니다.
  • 복원된 상태로 application.status_changed 이벤트를 보냅니다.

POST/applications/{application_handle}/notesnotes:write

지원서에 메모를 추가합니다. 201을 반환합니다.

필드타입설명
bodystring, 필수메모 내용입니다. 1~10,000자이며 앞뒤 공백은 잘립니다.
요청
curl -X POST https://tahoe.workonward.com/api/partner/v1/applications/app_6Qm2xKd4Rp8v/notes \
  -H "Authorization: Bearer $TAHOE_API_KEY" \
  -H "Idempotency-Key: note-6Qm2-referrer-0001" \
  -H "Content-Type: application/json" \
  -d '{ "body": "Spoke to the referrer. Strong recommendation." }'
응답: 201
{
  "object": "note",
  "application_id": "app_6Qm2xKd4Rp8v",
  "body": "Spoke to the referrer. Strong recommendation.",
  "created_at": "2026-10-08T21:15:51.327Z",
  "created_via": "api"
}
  • 메모는 키를 만든 사람의 이름으로 나타납니다. 지원서를 볼 수 있는 워크스페이스 사람 모두가 봅니다. 활동 탭에는 partner_api_note_added 항목이 따로 나타나며, 여기에는 키 ID와 요청 ID가 들어 있고 메모 내용은 없습니다.
  • 응답에는 id와 작성자가 없고, 메모를 다시 읽는 엔드포인트도 없습니다. mentions 필드가 없으므로 아무에게도 알림이 가지 않습니다.
  • Idempotency-Key 없이 같은 요청을 두 번 보내면 메모가 두 개 만들어집니다. 이벤트는 보내지 않습니다.

POST/applications/{application_handle}/scorecardsscorecards:write

대시보드의 평가표와 같은 필드로 면접 평가표를 추가합니다. 201을 반환합니다. 세 필드 모두 선택이지만 하나는 보내야 합니다.

필드타입설명
overallstringstrong_yes, yes, no, strong_no 중 하나.
ratingsobject최대 30개 항목. 이름은 1~100자이고, 값은 숫자, 불리언, 또는 200자 이하 문자열입니다. 중첩된 객체와 목록은 받지 않습니다. 대시보드는 어떤 객체든 받지만 API는 일부러 더 엄격합니다.
commentstring최대 10,000자.
요청
curl -X POST https://tahoe.workonward.com/api/partner/v1/applications/app_6Qm2xKd4Rp8v/scorecards \
  -H "Authorization: Bearer $TAHOE_API_KEY" \
  -H "Idempotency-Key: scorecard-6Qm2-onsite-0001" \
  -H "Content-Type: application/json" \
  -d '{
    "overall": "yes",
    "ratings": { "communication": 4, "system design": "strong" },
    "comment": "Clear thinker, thin on scale."
  }'
응답: 201
{
  "object": "scorecard",
  "application_id": "app_6Qm2xKd4Rp8v",
  "ratings": { "communication": 4, "system design": "strong" },
  "overall": "yes",
  "comment": "Clear thinker, thin on scale.",
  "created_at": "2026-10-08T21:15:51.327Z",
  "created_via": "api"
}

평가표는 키를 만든 사람이 쓴 것으로 기록되고, 활동 탭에 partner_api_scorecard_added 항목이 함께 나타납니다. 지원서의 상태나 단계는 바뀌지 않으며 이벤트도 보내지 않습니다.

동시 수정

move, reject, reopen은 선택 항목인 expected_updated_at을 받습니다. 마지막으로 읽은 updated_at 값입니다. API가 돌려주는 정밀도인 밀리초 단위로 비교합니다. 그 사이 지원서가 바뀌었다면 호출은 409 stale_resource를 반환하고 아무것도 바꾸지 않습니다. 지원서를 다시 읽고 변경이 아직 유효한지 판단하세요.

409 Conflict
{
  "detail": {
    "code": "stale_resource",
    "type": "conflict",
    "message": "The application changed after the time you sent in expected_updated_at.",
    "param": null
  }
}

보내지 않으면 현재 상태를 기준으로 처리합니다. 어느 쪽이든 한 지원서에 대한 동시 호출은 차례로 실행됩니다. 잠금과 쓰기 사이에 행이 바뀌는 드문 경우에는 409 application_modified_concurrently를 받습니다. 다시 시도하세요.

이 호출들의 오류

상태코드조치
400invalid_request본문 검증에 실패했습니다. 빠졌거나, 알 수 없거나, 너무 긴 필드입니다. errors 목록에 필드가 하나씩 표시됩니다.
400invalid_stagemove에서만 발생합니다. 이 지원서가 속한 공고의 단계 핸들을 쓰세요.
400invalid_idempotency_keyIdempotency-Key 헤더가 허용된 문자 8~255자가 아닙니다.
403insufficient_scoperequired_scope에 적힌 스코프가 키에 없습니다.
403write_requires_api_keySign in with Tahoe 토큰이거나, Tahoe 사용자와 연결되지 않은 자격 증명입니다.
404not_found이 워크스페이스에 그런 지원서가 없습니다.
409invalid_application_state현재 상태에서는 탈락 처리나 탈락 취소를 할 수 없습니다. 지원서를 먼저 읽으세요.
409stale_resourceexpected_updated_at이 더 이상 맞지 않습니다. 지원서를 다시 읽으세요.
409application_modified_concurrently쓰는 도중 행이 바뀌었습니다. 다시 시도하세요.
409idempotency_key_reused같은 키를 다른 본문과 함께 썼습니다.
409idempotency_in_flight같은 키의 첫 요청이 아직 실행 중입니다. 잠시 후 다시 시도하세요.

모든 코드는 오류에서 설명합니다.

관련 이벤트

application.created, application.updated, application.status_changed, application.stage_changed, application.withdrawn, application.deleted, application.scored는 applications:read가 필요합니다. application.resume_parsed와 resume.access_changed는 resume:read가, application.screening_completed는 screening:metadata:read가 필요합니다. 읽는 방법은 변경 피드를 참고하세요.

API로 한 변경도 Tahoe에서 한 변경과 같은 이벤트를 만듭니다. 이벤트마다 origin이 들어 있으므로, 연동 프로그램이 자기가 쓴 변경의 에코를 알아보고 건너뛸 수 있습니다. 이벤트의 출처를 참고하세요.