了解如何使用 Singular API 支持 GDPR 请求。
GDPR 端点
端点 | 方法 | URL | 说明 |
Discovery | GET | https://gdpr.singular.net/gdpr/discovery | 返回 Singular 可通过 GDPR API 处理的所有当前支持的请求类型。 |
Requests | POST | https://gdpr.singular.net/gdpr/requests | 使用此端点发送新的 GDPR 请求,通过 HTTP POST 请求发送,同时指定请求数据主体的设备 ID。 |
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 Requests 端点处理新的 GDPR 请求,通过 HTTP POST 请求发送,同时指定请求数据主体的设备 ID。
支持的请求
OpenGDPR 请求端点支持以下类型的请求,与不同的 GDPR 权利相对应:
支持的 ID
OpenGDPR 请求端点支持以下类型的 ID:
- `android_advertising_id` - 通过提供谷歌广告 ID(又称 GAID 或 AIFA)提出的请求
- `android_id` - 通过提供 Android ID(又称 ANDI)提出的请求
- `ios_advertising_id` - 通过提供 IDFA(即 iOS 广告 ID)发出的请求。 请注意,"limit-ad-trackingorATT AuthorizationStatusdenied"(限制广告跟踪或拒绝ATT 授权状态)设备的请求如果包含归零的 IDFA("00000000-0000-0000-0000-00000000"),将被忽略,API 将不会返回错误信息。
- `ios_vendor_id` - 通过提供 IDFV(供应商的 iOS ID)提出的请求
- `user_id` - 通过提供自定义用户 ID 提出的请求
查询示例
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 类型、值和格式的身份对象列表,以满足请求。一个请求最多可包含 100 个设备 ID。 |
|
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"
}
状态端点
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"
}