본문으로 건너뛰기

삭제 통지

Tahoe가 인물 정보를 소거하거나 처리 중단할 때, 내가 함께 지워야 할 데이터.

삭제 통지 피드는 이 API에서 정보가 아니라 지시를 전달하는 유일한 부분입니다. 각 통지는 한 사람을 더 이상 처리하면 안 된다는 사실과 관련 레코드, 그리고 기한을 알려 줍니다. Tahoe에서 읽은 데이터를 조금이라도 저장한다면, 이 피드를 하루에 한 번 이상 읽고 통지에 따라 조치해야 합니다.

삭제 통지 목록 조회

GET/erasuresevents:read

내 키에 해당하는 모든 통지를 오래된 것부터 한 페이지씩 반환합니다.

파라미터타입설명
limitinteger기본값 25, 최대 100.
cursorstring이전 페이지의 next_cursor입니다. 변경 피드와 달리 이 목록은 커서로 페이지를 넘깁니다.
요청
curl "https://tahoe.workonward.com/api/partner/v1/erasures?limit=100" \
  -H "Authorization: Bearer $TAHOE_API_KEY"
응답
{
  "object": "list",
  "data": [
    {
      "object": "erasure",
      "id": "ers_5Nx3jLm7Qd2s",
      "action": "suppression_applied",
      "reason": "data_subject_erasure",
      "workspace_id": "wsp_4Kd8sPm2Qx7L",
      "resources": [
        {
          "object": "applicant",
          "id": "apl_8Fj3kLm2Qd7s",
          "workspace_id": "wsp_4Kd8sPm2Qx7L"
        },
        {
          "object": "application",
          "id": "app_6Qm2xKd4Rp8v",
          "workspace_id": "wsp_4Kd8sPm2Qx7L"
        }
      ],
      "action_required": "cease_processing_and_delete_your_copy",
      "deadline_at": "2026-09-14T14:02:11.408Z",
      "destruction_pending": true,
      "destruction_reason": "retention_floor",
      "at": "2026-09-07T14:02:11.408Z",
      "subject_identified": false
    }
  ],
  "has_more": false,
  "next_cursor": null
}

통지 객체

필드의미
id통지 핸들(ers_)입니다. 조치를 마친 뒤 기록해 두면 같은 통지에 두 번 조치하지 않습니다.
actionsuppression_applied 또는 erasure_completed입니다. 아래를 참고하세요.
reason통지가 발행된 이유입니다. 아래 사유 목록을 참고하세요.
workspace_id통지가 나온 워크스페이스입니다. 모두에게 적용되는 통지는 null입니다.
resources삭제할 레코드 목록으로, 각각 object, id, workspace_id를 담습니다.
action_requiredcease_processing_and_delete_your_copy 또는 confirm_deletion입니다.
deadline_at통지 후 7일입니다. 그때까지 사본을 모두 지워야 합니다.
destruction_pendingTahoe 자체가 법정 보존 규정에 따라 아직 레코드를 보관해야 하는 동안 true입니다.
destruction_reasondestruction_pending이 true일 때 적용되는 보존 규정입니다.
at통지가 발행된 시각입니다.
subject_identified항상 false입니다. 통지는 사람을 밝히지 않고 레코드만 알려 줍니다.

매일 읽기

커서는 1시간 뒤 만료되고, 마지막 페이지에는 커서가 아예 없습니다. 그래서 실행과 실행 사이에 보관할 재개 지점이 없습니다. 실행할 때마다 피드를 처음부터 읽고, 이미 조치한 id의 통지는 건너뛰세요.

두 가지 action

action의미해야 할 일
suppression_appliedTahoe가 이 사람에 대한 처리를 중단했습니다.지금 조치하세요. deadline_at까지 목록에 있는 모든 레코드의 사본을 삭제하고, 그 사람에 대한 처리를 멈추세요.
erasure_completedTahoe가 레코드를 파기했습니다.내 사본도 사라졌는지 확인하세요. 목록의 레코드가 아직 남아 있다면 지금 삭제하세요.

모든 삭제(소거)가 처리 중단 통지로 시작하지는 않습니다. Tahoe가 레코드를 바로 파기할 수 있으면 받는 통지는 erasure_completed 하나뿐입니다. 어느 쪽이든 먼저 도착한 통지를 삭제 지시로 받아들이세요.

통지가 두 가지인 이유

여러 지역에서 고용 기록에는 법정 보존 기간이 있어, Tahoe는 본인이 소거를 요청한 뒤에도 최대 4년까지 레코드를 보관해야 할 수 있습니다. 그래서 “처리 중단”과 “레코드 파기” 사이에 몇 년이 걸릴 수 있습니다.

기한은 처리 중단 시점부터 시작합니다. destruction_pending이 true이면 Tahoe가 무시할 수 없는 보존 규정 때문에 아직 레코드를 보관하고 있다는 뜻이며, destruction_reason이 어떤 규정인지 알려 줍니다. 그래도 내가 할 일은 달라지지 않습니다. 7일 안에 사본을 삭제하세요.

사유

reason발생 원인
data_subject_erasure본인이 소거를 요청했습니다.
suppression완전한 소거까지는 아니지만, 본인이 처리하지 말 것을 요청했습니다.
provider_takedown데이터 출처나 플랫폼이 삭제를 요구했습니다.
user_deleted워크스페이스의 누군가가 레코드를 삭제했습니다.
workspace_deleted워크스페이스 전체가 삭제되었습니다.
retention_expiry보존 기간이 끝났습니다.
legal_hold_release삭제를 막고 있던 법적 보존 조치가 해제되었습니다.

사유에 따라 할 일이 달라지지는 않습니다. 삭제하면 됩니다. 사유는 삭제한 이유를 기록해 두고, 나중에 누가 묻더라도 출처가 요구한 삭제와 본인의 요청을 구분할 수 있도록 제공됩니다. 새 사유가 추가될 수 있으니, 모르는 값도 똑같이 처리하세요.

워크스페이스가 없는 통지는 모두에게 적용됩니다

레코드에 조치하기

resources에는 삭제할 핸들이 담겨 있습니다. 데이터를 복사할 때 저장해 둔 바로 그 핸들이므로, 검색할 필요 없이 바로 찾을 수 있습니다. object와 id를 함께 맞춰 보세요.

삭제 통지 리더
BASE = "https://tahoe.workonward.com/api/partner/v1"


def consume_erasures(session, store):
    """Act on every erasure notice. Run at least once a day."""
    cursor = None

    # A cursor expires after an hour and the last page has none, so there is
    # no resume point to keep between runs. Read from the start every time and
    # skip the notices you have already acted on.
    while True:
        params = {"limit": 100}
        if cursor:
            params["cursor"] = cursor
        response = session.get(f"{BASE}/erasures", params=params, timeout=30)
        response.raise_for_status()
        body = response.json()

        for notice in body["data"]:
            if store.notice_handled(notice["id"]):
                continue
            # Delete on EITHER action. suppression_applied starts the 7-day
            # clock; erasure_completed can arrive on its own when Tahoe
            # destroys a record at once. Never wait for erasure_completed.
            for resource in notice["resources"]:
                store.purge(resource["object"], resource["id"])
                store.suppress_forever(resource["object"], resource["id"])
            # A notice with workspace_id null applies to every holder of the
            # data, so never filter this feed by workspace.
            store.record_notice(notice["id"], notice["reason"], notice["deadline_at"])

        cursor = body["next_cursor"]
        if not cursor:
            return

삭제한 핸들 목록을 영구히 보관하고 쓰기 전마다 확인하세요. 그래야 나중의 동기화가 삭제한 사람을 되살리지 않습니다. 이 목록이 절대 만료되면 안 되는 이유는 삭제와 소거 가이드에서 설명합니다.

변경 피드에도 같은 통지가 옵니다

각 통지는 변경 피드에도 data_subject.suppression_applied 또는 data_subject.erasure_completed로 나타납니다. 그래서 이미 피드를 읽는 리더는 별도 연동 없이 조치할 수 있습니다. 이 엔드포인트는 이벤트 워터마크와 별개로 통지만 따로 점검하고 다시 처리할 수 있도록 제공됩니다. 피드 리더가 멈춰 있었다면, 가장 중요한 통지부터 따라잡는 방법이 바로 이것입니다.

관련 문서