GDPR API 참조

Singular API를 사용하여 GDPR 요청을 지원하는 방법을 알아보세요.

 

데이터 주체 요청이 더 넓은 동의 아키텍처에 어떻게 부합하는지, 그리고 삭제(erasure)가 추적 중단과 왜 다른지는 Consent Management with the Singular SDK: A Decision Framework를 참조하세요.

삭제는 추적 거부(opt-out)가 아닙니다.

이 API는 Singular가 특정 식별자에 대해 수집한 사용자 수준 데이터를 삭제합니다. 사용자 기기의 SDK가 향후 이벤트를 전송하는 것을 중단시키지는 않습니다. 삭제를 요청했고 추적도 중단되어야 하는 사용자의 경우, API 요청 제출 외에 앱에서 stopAllTracking()을 호출(또는 SDK 초기화를 제어)해야 합니다. 두 가지를 같은 사용자 플로우에서 함께 처리하세요.

GDPR 엔드포인트

엔드포인트 메서드 URL 설명
Discovery GET https://gdpr.singular.net/gdpr/discovery Singular가 GDPR API를 통해 처리할 수 있는 현재 지원되는 모든 요청 유형을 반환합니다.
Requests POST https://gdpr.singular.net/gdpr/requests 이 엔드포인트를 사용하여 요청된 데이터 주체의 디바이스 ID를 지정하면서 HTTP POST 요청을 통해 새 GDPR 요청을 전송할 수 있습니다.
Status GET https://gdpr.singular.net/gdpr/requests/request_id 요청 ID로 식별되는 이전에 전송된 요청의 현재 상태를 반환합니다.
Cancellation DELETE https://gdpr.singular.net/gdpr/requests/request_id 이 엔드포인트를 사용하여 이전 요청을 취소할 수 있습니다. 요청이 '보류 중' 상태인 경우에만 가능합니다.

검색 엔드포인트

GET https://gdpr.singular.net/api/gdpr/discovery

사용 방법

OpenGDPR Discovery 엔드포인트는 Singular가 GDPR API를 통해 처리할 수 있는 현재 지원되는 모든 요청 유형을 반환합니다.

샘플 쿼리

import requests
  response = requests.get("https://gdpr.singular.net/api/gdpr/discovery")
  print(response.text)

샘플 출력

{
    "api_version": "0.1.4",
    "supported_identities": [
      {"identity_format": "raw","identity_type": "android_advertising_id"},
      {"identity_format": "raw","identity_type": "android_id"},
      {"identity_format": "raw","identity_type": "ios_advertising_id"},
      {"identity_format": "raw","identity_type": "ios_vendor_id"},
      {"identity_format": "raw","identity_type": "user_id"}
    ],
    "supported_subject_request_types": [
        "erasure",
        "access"
    ]
  }

요청 엔드포인트

POST https://gdpr.singular.net/api/gdpr/requests

사용법

OpenGDPR 요청 엔드포인트는 요청된 데이터 주체의 디바이스 ID를 지정하면서 HTTP POST 요청을 통해 전송되는 새로운 GDPR 요청을 처리합니다.

완료 시간: 삭제 요청은 제출 후 최대 30일 이내에 완료됩니다. 응답에는 expected_completion_time이 반환되며, 이를 사용해 GDPR 제12조 대응 기한을 설정하세요.

지원되는 요청

OpenGDPR 요청 엔드포인트는 다양한 GDPR 권한에 해당하는 다음 유형의 요청을 지원합니다:

  • `erasure` - GDPR 제17조, 삭제 권리의일부로 데이터 삭제에 대한 사용자 요청 지원
  • `access` - GDPR 제15조, 접근 권리의일부로 데이터 접근에 대한 사용자 요청 지원

지원되는 ID

OpenGDPR 요청 엔드포인트는 다음 유형의 ID를 지원합니다:

  • `android_advertising_id` - GAID 또는 AIFA라고도 하는 Google 광고 ID를 제공하여 이루어지는 요청
  • `android_id` - ANDI라고도 하는 안드로이드 ID를 제공하여 만든 요청
  • `ios_advertising_id` - iOS 광고 ID인 IDFA를 제공하여 이루어진 요청
  • `ios_vendor_id` - 공급업체용 iOS ID인 IDFV를 제공하여 이루어진 요청.
  • `user_id` - 사용자 지정 사용자 ID를 제공하여 이루어진 요청

0으로 채워진 IDFA는 오류 없이 무시됩니다.

limit-ad-tracking가 활성화되었거나 ATT AuthorizationStatus가 denied인 기기에서는 IDFA가 0으로 채워집니다("00000000-0000-0000-0000-000000000000"). 0으로 채워진 IDFA를 키로 하는 요청은 무시되며 API는 오류를 반환하지 않습니다. 이러한 사용자에 대해서는 대신 `ios_vendor_id`(IDFV)를 제출하세요. 이 실패는 조용히 발생하므로 DSR 파이프라인은 ATT를 거부한 iOS 사용자에 대해 IDFV를 보관하고 제출해야 합니다.

샘플 쿼리

import requests
  
  url = "https://gdpr.singular.net/api/gdpr/requests"
  
  payload = {
    "subject_request_id": "1c8b23f4-12eb-4fe8-af1c-0f72807dfec2",
    "subject_request_type": "access",
    "submitted_time": "2018-05-25T10:00:00Z",
    "subject_identities": [
      {
        "identity_type": "android_advertising_id",
        "identity_value": "38400000-8cf0-11bd-b23e-10b96e40000d",
        "identity_format": "raw"
      }
    ],
    "property_id": "Android:com.myapp.xyz",
  }
  
  headers = {
    "content-type": "application/json",
    "Authorization": "[API_KEY]"
  }
  
  response = requests.post(url, json=payload, headers=headers)
  print(response.text)

쿼리 매개 변수

파라미터 형식 설명 예제
subject_request_id String UUIDv4 문자열  
subject_request_type String OpenGDPR 요청의 유형을 나타내는 문자열 값입니다. 현재 Singular 값만 지원됩니다: "삭제", "이동성", "액세스"  
subject_identities Array 요청을 이행할 각 디바이스 ID의 유형, 값 및 형식을 설명하는 ID 객체 목록입니다. 요청에는 최대 100개의 디바이스 ID가 포함될 수 있습니다.
[
  {
    "identity_type":
"android_advertising_id", "identity_value":
"38400-8cf0-11bd-b23e-1000d", "identity_format": "raw" } ]
submitted_time   데이터 주체의 최초 요청 시간을 나타내는 RFC 3339 날짜 문자열입니다. 2010-05-25T10:00:00Z
property_id String 관련 앱을 지정하는 [플랫폼]:[긴 이름] 쌍입니다. iOS:com.myapp.xyz

샘플 출력

{
    "controller_id":"example_controller_id",
    "received_time":"2018-05-25T10:00:01Z",
    "expected_completion_time": "2018-06-24T10:00:01Z",
    "encoded_request":"<BASE64 ENCODED REQUEST>",
    "subject_request_id":"1c8b23f4-12eb-4fe8-af1c-0f72807dfec2",
    "results_url": "https://url-to-results-in-json-format",
    "api_version": "0.1.4"
  }

삭제 범위

삭제는 Singular가 해당 식별자에 대해 보유한 사용자 수준 레코드(로그 및 어트리뷰션 세부 정보)를 제거합니다. 집계된 데이터(예: 코호트 롤업)는 집계된 후에는 기기 단위로 지정할 수 없으므로 삭제의 영향을 받지 않습니다. 이 구분을 귀사의 개인정보 처리방침 문서에 설명하세요.

상태 엔드포인트

GET https://gdpr.singular.net/api/gdpr/requests/<REQUEST_ID>

사용법

이전에 보낸 요청의 현재 상태를 반환하며, 요청 ID로 식별됩니다.

샘플 쿼리

import requests
  url = "https://gdpr.singular.net/api/gdpr/requests/"
  subject_request_id = "1c8b23f4-12eb-4fe8-af1c-0f72807dfec2"
  headers = {"Authorization": "<API KEY>"}
  response = requests.get(url+subject_request_id, headers=headers)
  print(response.text)

샘플 출력

{
      "controller_id": "example_controller_id",
      "request_status": "completed",
      "expected_completion_time": "2018-06-24T10:00:01Z",
      "subject_request_id": "1c8b23f4-12eb-4fe8-af1c-0f72807dfec2",
      "api_version": "0.1.4"
  }

취소 엔드포인트

DELETE https://gdpr.singular.net/gdpr/requests/<REQUEST_ID>

사용법

이 엔드포인트를 사용하여 이전 요청을 취소합니다. 요청이 '보류 중' 상태인 경우에만 가능합니다.

샘플 쿼리

import requests
  url = "https://gdpr.singular.net/api/gdpr/requests/"
  subject_request_id = "1c8b23f4-12eb-4fe8-af1c-0f72807dfec2"
  headers = {"Authorization": "<API KEY>"}
  response = requests.delete(url+subject_request_id, headers=headers)
  print(response.text)

샘플 출력

{
    "controller_id":"example_controller_id",
    "subject_request_id":"1c8b23f4-12eb-4fe8-af1c-0f72807dfec2",
    "received_time":"2018-05-25T10:00:01Z",
    "api_version":"0.1"
  }