콘텐츠로 건너뛰기

데이터 삭제 API

데이터 삭제 API는 Pushwoosh에서 대상의 개인 데이터를 삭제하는 셀프 서비스 방식입니다(GDPR 삭제권). 삭제는 되돌릴 수 없습니다. 직접 만든 시스템에서 Control Panel의 데이터 요청 페이지와 구독자 카드의 개인 데이터 삭제 작업을 그대로 재현하는 데 사용하세요.

기본 URL

Anchor link to
https://rpc-api.svc-nue.pushwoosh.com

모든 엔드포인트는 HTTPS를 통해 제공됩니다. 요청과 응답은 application/json을 사용하며, Upload만 예외로 multipart/form-data를 사용합니다.

모든 요청에는 서버 API 토큰이 포함된 Authorization 헤더가 있어야 합니다:

Authorization: Api YOUR_API_TOKEN

토큰은 application_codes에 지정된 모든 애플리케이션에 대한 수정 권한을 가지고 있어야 합니다. 이는 토큰이 해당 애플리케이션에서 기기 데이터를 기록하는 데 필요한 것과 동일한 권한입니다.

  • 필드 명명 규칙: 요청 본문은 lowerCamelCase를 사용합니다(예: applicationCodes, identifierType). 응답은 proto 필드 이름을 사용하여 snake_case(task_id, identifier_hash 등)로 마샬링됩니다. 아래의 예시와 객체 참조는 이 표기법을 사용합니다.
  • 식별자: 대상은 identifier_type(SUBJECT_IDENTIFIER_USER_ID, SUBJECT_IDENTIFIER_HWID, 또는 SUBJECT_IDENTIFIER_EMAIL)과 해당 한 가지 유형의 identifiers 목록으로 지정됩니다. 이메일 식별자는 대소문자를 구분하지 않고 일치합니다.
  • 드라이 런을 먼저 실행한 뒤 인용하세요: dry_run: true로 Create를 호출하면 삭제될 항목의 수만 계산하고 아무것도 기록하지 않습니다. 실제 호출에서 해당 드라이 런의 task_id를 confirmation_dry_run_task_id로 인용하는 것은 선택 사항이지만, 인용할 경우 그 드라이 런의 애플리케이션 및 식별자와 정확히 일치해야 하며 드라이 런이 완료된 후 15분 이내에 호출해야 합니다. 그렇지 않으면 호출이 거부됩니다.
  • 보고서는 식별자를 평문으로 담지 않습니다. GetTaskReport와 GetJournalReport 모두 각 식별자를 sha256 해시(identifier_hash)로 보고하며, 보고서 본문은 JSON 응답 안에 base64로 인코딩된 CSV입니다.

오류 응답

Anchor link to
HTTP 상태의미
400 Bad Request잘못된 인수입니다. 예를 들어 빈 identifier_type, identifiers, application_codes, 10,000개를 초과하는 식별자, 50개를 초과하는 애플리케이션, 50,000개를 초과하는 식별자 × 애플리케이션 수, 빈 식별자 문자열, 또는 (Upload에서만) 누락되었거나 읽을 수 없는 CSV 파일인 경우입니다. 인용된 confirmation_dry_run_task_id가 지정한 완료된 드라이 런과 일치하지 않거나, 너무 오래되었거나(15분 초과), 완료된 드라이 런이 전혀 아닌 경우에도 통신 상에서 FailedPrecondition으로 반환됩니다.
401 UnauthorizedAuthorization 헤더가 없거나 유효하지 않습니다.
403 Forbidden토큰이 요청된 애플리케이션 중 하나에 대한 수정/기기 데이터 권한이 없거나, 호출자가 요청된 작업/보고서를 읽을 수 없는 경우입니다.
404 Not Found작업을 찾을 수 없거나, 호출자의 계정에 속하지 않는 경우입니다.
413 Payload Too Large(Upload에서만) 업로드된 파일이 5MB를 초과하는 경우입니다.
429 Too Many Requests계정이 지난 24시간 동안 이미 20개의 데이터 삭제 작업(드라이 런 포함)을 시작한 경우입니다.

엔드포인트

Anchor link to
메서드경로설명
POST/api/data_erasure/tasks삭제(또는 드라이 런) 작업을 생성합니다.
POST/api/data_erasure/upload업로드된 식별자 CSV로 삭제 작업을 생성합니다.
GET/api/data_erasure/tasks계정의 삭제 작업을 나열합니다.
GET/api/data_erasure/tasks/{task_id}삭제 작업 하나를 가져옵니다.
GET/api/data_erasure/tasks/{task_id}/rows작업 하나의 식별자별 결과를 나열합니다.
GET/api/data_erasure/tasks/{task_id}/report작업 하나의 보고서를 CSV로 다운로드합니다.
GET/api/data_erasure/report기간의 모든 작업을 하나의 CSV로 다운로드합니다.

나열된 애플리케이션에서 나열된 대상의 개인 데이터 삭제를 시작합니다. dry_run: true를 사용하면 작업이 삭제될 항목의 수만 계산합니다.

POST /api/data_erasure/tasks

요청 본문

Anchor link to
매개변수유형필수설명
identifierTypestring예SUBJECT_IDENTIFIER_USER_ID, SUBJECT_IDENTIFIER_HWID, 또는 SUBJECT_IDENTIFIER_EMAIL.
identifiersarray of strings예해당 한 가지 유형의 대상 식별자로, 작업당 최대 10,000개까지 가능하며 빈 값은 허용되지 않습니다.
applicationCodesarray of strings예삭제 대상이 되는 애플리케이션 코드로, 최대 50개까지 가능합니다. 한 번의 호출로 계정의 모든 애플리케이션에서 삭제할 방법은 없으므로 각각을 명시적으로 지정하세요. 보고서가 식별자당 애플리케이션당 한 행을 담기 때문에 identifiers.length × applicationCodes.length는 50,000을 초과할 수 없습니다.
dryRunboolean아니요삭제될 항목의 수만 계산하고 아무것도 기록하지 않습니다. 기본값은 false입니다.
confirmationDryRunTaskIdinteger아니요이 정확한 삭제를 측정한 완료된 드라이 런의 task_id입니다. 규칙을 참조하세요.
요청 예시
Anchor link to
{
"identifierType": "SUBJECT_IDENTIFIER_EMAIL",
"identifiers": ["subject@example.com"],
"applicationCodes": ["XXXXX-XXXXX"],
"dryRun": true
}
필드유형설명
task_idinteger생성된 작업의 ID입니다. 이 페이지의 다른 모든 엔드포인트에서 사용하세요.

Create와 동일한 종류의 작업을 생성하지만, 식별자는 JSON 배열 대신 업로드된 CSV에서 가져옵니다. 대량 대상 목록에 이 방법을 사용하세요.

POST /api/data_erasure/upload

요청 (multipart/form-data)

Anchor link to
필드필수설명
file예CSV 파일로, 최대 5MB까지 가능하며 단일 열에 행당 하나의 식별자를 담습니다. 첫 번째 행은 식별자를 담는 대신 열 이름을 지정할 수 있습니다(user_id, userid, user id, hwid, email, identifier, 또는 subject, 대소문자 구분 없음). 이 경우 해당 행은 헤더로 간주되어 건너뛰며 개수에 포함되지 않습니다. 빈 행은 건너뛰며 별도로 집계됩니다. 중복된 식별자(이메일의 경우 대소문자 구분 없음)는 하나로 합쳐지며 별도로 집계됩니다.
identifier_type예user_id, hwid, 또는 email이며 소문자로 작성합니다. 이 페이지의 다른 곳에서 사용되는 JSON identifierType 열거형 값과는 대소문자 표기가 다릅니다. 파일 전체에 하나의 유형이 적용됩니다.
application_codes예쉼표로 구분된 애플리케이션 코드입니다.
dry_run아니요true/false.
confirmation_dry_run_task_id아니요Create와 동일합니다.
{
"task_id": 123,
"identifier_count": 480,
"duplicate_count": 3,
"skipped_rows": 1
}

계정의 삭제 작업을 최신순으로 나열합니다. 누가 무엇을 언제 삭제했는지에 대한 감사 저널입니다. includeDryRuns를 설정하지 않으면 드라이 런은 제외됩니다.

GET /api/data_erasure/tasks

쿼리 매개변수

Anchor link to
매개변수유형설명
limit / offsetinteger페이징.
includeDryRunsboolean드라이 런(측정 전용) 작업을 포함합니다.
from / tostring (RFC 3339)[from, to) 구간에서 시작된 작업만 유지합니다.
applicationCodestring이 애플리케이션을 대상으로 하는 작업만 유지합니다.
initiatorUserIdinteger이 Control Panel 사용자가 시작한 작업만 유지합니다. 0(기본값)은 모든 시작자를 유지합니다.
initiatorTokenIdinteger이 API 토큰이 시작한 작업만 유지합니다. 0(기본값)은 모든 시작자를 유지합니다.
initiatorEmailstring이메일로 대소문자 구분 없이 일치하는, 이 Control Panel 사용자가 시작한 작업만 유지합니다.
필드유형설명
tasks데이터 삭제 작업 객체 배열일치하는 작업입니다.

삭제 작업 하나를 상태 및 카운터와 함께 반환합니다. Create 또는 Upload로 시작한 작업을 추적하는 데 사용하세요.

GET /api/data_erasure/tasks/{task_id}

필드유형설명
task데이터 삭제 작업 객체요청된 작업입니다.

ListTaskRows

Anchor link to

작업 하나의 식별자별 결과를 반환합니다. 삭제됨, 찾을 수 없음, 건너뜀, 실패 여부를 나타냅니다. 식별자는 sha256 해시로 보고됩니다.

GET /api/data_erasure/tasks/{task_id}/rows

쿼리 매개변수

Anchor link to
매개변수유형설명
limit / offsetinteger페이징.
필드유형설명
rows데이터 삭제 작업 행 객체 배열현재 페이지의 결과입니다.

GetTaskReport

Anchor link to

작업 하나의 전체 보고서를 CSV 파일로 반환합니다. 식별자당 애플리케이션당 한 행에 그 결과가 담깁니다. ListTaskRows는 대신 동일한 행을 페이지 단위로 보여줍니다.

GET /api/data_erasure/tasks/{task_id}/report

필드유형설명
filenamestring제안된 파일 이름입니다(예: data-erasure-task-42.csv).
content_typestringtext/csv.
contentstring (base64)CSV 파일입니다. 열: task_id, created, identifier_type, identifier_hash, application_code, result, detail.

GetJournalReport

Anchor link to

기간의 모든 삭제 작업을 하나의 CSV 파일로 반환합니다. 각 행에는 식별자당 애플리케이션당 정보와 함께 해당 작업 및 시작한 사용자가 담깁니다. 이는 계정이 감사자에게 제출하는 자료입니다.

GET /api/data_erasure/report

쿼리 매개변수

Anchor link to
매개변수유형필수설명
fromstring (RFC 3339)예기간의 시작입니다.
tostring (RFC 3339)아니요기간의 끝입니다. 기본값은 현재 시간입니다.
includeDryRunsboolean아니요드라이 런 작업을 포함합니다.
필드유형설명
filenamestring제안된 파일 이름입니다(예: data-erasure-2026-01-01-2026-04-01.csv).
content_typestringtext/csv.
contentstring (base64)CSV 파일입니다. 열: task_id, task_created, initiator_user_id, initiator_email, initiator_token_id, dry_run, identifier_type, identifier_hash, application_code, result, detail, row_created.

데이터 삭제 작업 객체

Anchor link to
필드유형설명
task_idinteger작업 ID입니다.
identifier_typestringSUBJECT_IDENTIFIER_USER_ID, SUBJECT_IDENTIFIER_HWID, 또는 SUBJECT_IDENTIFIER_EMAIL.
application_codesarray of strings작업이 대상으로 하는 애플리케이션입니다.
dry_runboolean이 작업이 볼륨만 측정했는지 여부입니다.
statusstringERASURE_TASK_STATUS_PENDING, _IN_PROGRESS, _DONE, 또는 _FAILED.
total_countinteger이 작업이 대상으로 하는 식별자 × 애플리케이션 수입니다.
deleted_countinteger삭제된(또는 드라이 런의 경우 삭제될) 수입니다.
not_found_countinteger일치하는 항목이 없었던 수입니다.
failed_countinteger실패한 수입니다. 원인은 ListTaskRows 또는 보고서를 참조하세요.
fail_reasonstringstatus가 ERASURE_TASK_STATUS_FAILED일 때 설정됩니다.
initiator_user_idinteger작업을 시작한 Control Panel 사용자입니다. API 토큰이 시작한 경우 0입니다.
initiator_token_idinteger작업을 시작한 API 토큰입니다. Control Panel 사용자가 시작한 경우 0입니다.
initiator_emailstring작업을 시작한 Control Panel 사용자의 이메일 주소입니다. API 토큰의 경우 비어 있습니다.
createdstring (RFC 3339)작업이 생성된 시점입니다.
started_atstring (RFC 3339)삭제 작업이 시작된 시점입니다.
finished_atstring (RFC 3339)작업이 최종 상태에 도달한 시점입니다.

데이터 삭제 작업 행 객체

Anchor link to
필드유형설명
identifier_hashstring식별자의 sha256입니다. 보고서는 식별자 자체를 저장하거나 반환하지 않습니다.
application_codestring이 행의 결과가 적용되는 애플리케이션입니다.
resultstringERASURE_ROW_RESULT_DELETED, _NOT_FOUND, _SKIPPED, 또는 _FAILED.
detailstring기술적인 세부 정보로, 주로 실패 시 설정됩니다.
createdstring (RFC 3339)이 행이 기록된 시점입니다.

관련 항목

Anchor link to