Saiba como usar a API da Singular para dar suporte a solicitações de GDPR.
Para saber como as solicitações dos titulares dos dados se encaixam em uma arquitetura de consentimento mais ampla, e por que o apagamento não é o mesmo que parar o rastreamento, consulte Consent Management with the Singular SDK: A Decision Framework.
O apagamento não é uma exclusão (opt-out).
Esta API exclui os dados em nível de usuário que a Singular coletou para um identificador. Ela não impede que o SDK no dispositivo do usuário continue enviando eventos futuros. Um usuário que exerce o apagamento e que também deve deixar de ser rastreado exige que o app chame stopAllTracking() (ou controle a inicialização do SDK), além de enviar a solicitação à API. Trate ambas as ações no mesmo fluxo de usuário.
Pontos de extremidade do GDPR
| Ponto de extremidade | Método | URL | Descrição |
| Discovery | GET | https://gdpr.singular.net/gdpr/discovery | Retorna todos os tipos de solicitação atualmente suportados que a Singular pode processar por meio da API do GDPR. |
| Requests | POST | https://gdpr.singular.net/gdpr/requests | Use esse endpoint para enviar novas solicitações de GDPR, enviadas por meio de uma solicitação HTTP POST, especificando as IDs de dispositivo para os titulares de dados solicitados. |
| Status | GET | https://gdpr.singular.net/gdpr/requests/request_id | Retorna o status atual de uma solicitação enviada anteriormente, identificada por sua ID de solicitação. |
| Cancellation | DELETE | https://gdpr.singular.net/gdpr/requests/request_id | Use esse ponto de extremidade para cancelar uma solicitação anterior. Isso é possível desde que a solicitação esteja no status "pendente". |
Ponto de extremidade de descoberta
| GET | https://gdpr.singular.net/api/gdpr/discovery |
Uso
O ponto de extremidade OpenGDPR Discovery retorna todos os tipos de solicitação atualmente suportados que a Singular pode processar por meio da API do GDPR.
Exemplo de consulta
import requests
response = requests.get("https://gdpr.singular.net/api/gdpr/discovery")
print(response.text)
Exemplo de saída
{
"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"
]
}
Ponto de extremidade Requests (Solicitações)
| POST | https://gdpr.singular.net/api/gdpr/requests |
Uso
O endpoint OpenGDPR Requests lida com novas solicitações GDPR, enviadas por meio de uma solicitação HTTP POST, especificando as IDs de dispositivo para os titulares dos dados solicitados.
Tempo de conclusão: As solicitações de apagamento são concluídas em até 30 dias após o envio. A resposta retorna um expected_completion_time; use-o para definir seus compromissos de resposta do Artigo 12 do GDPR.
Solicitações compatíveis
O ponto de extremidade OpenGDPR Requests suporta os seguintes tipos de solicitações, correspondentes a diferentes direitos do GDPR:
- `erasure` - suporte a solicitações de usuários para exclusão de dados como parte do Artigo 17 do GDPR, Direito de exclusão
- `access` - suporte a solicitações de usuários para acesso a dados como parte do Artigo 15 do GDPR, Direito de acesso
IDs compatíveis
O ponto de extremidade OpenGDPR Requests é compatível com os seguintes tipos de IDs:
- `android_advertising_id` - solicitações feitas por meio do fornecimento da ID de publicidade do Google, também conhecida como GAID ou AIFA
- `android_id` - solicitações feitas com o fornecimento do Android ID, também conhecido como ANDI
- `ios_advertising_id` - solicitações feitas fornecendo o IDFA, que é o ID de publicidade do iOS
- `ios_vendor_id` - solicitações feitas com o fornecimento do IDFV, que é o ID do iOS para fornecedores
- `user_id` - solicitações feitas com o fornecimento do ID de usuário personalizado
IDFAs zerados são ignorados silenciosamente.
Em dispositivos com limit-ad-tracking ativado ou com um ATT AuthorizationStatus igual a denied, o IDFA fica zerado ("00000000-0000-0000-0000-000000000000"). Solicitações baseadas em um IDFA zerado são ignoradas e a API não retorna erro. Em vez disso, envie o `ios_vendor_id` (IDFV) para esses usuários. Como a falha é silenciosa, seu pipeline de DSR deve carregar e enviar o IDFV para os usuários de iOS que negaram o ATT.
Exemplo de consulta
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)
Parâmetros da consulta
| Parâmetro | Formato | Descriçãodo parâmetro | Exemplo |
| subject_request_id | String | Cadeia de caracteres UUIDv4 | |
| subject_request_type | String | Valor de cadeia de caracteres que representa o tipo de solicitação OpenGDPR. Atualmente, a Singular suporta os valores: "erasure" (apagamento), "access" (acesso) | |
| subject_identities | Array | Uma lista de objetos de identidade que descreve o tipo, o valor e o formato de cada ID de dispositivo para o qual a solicitação deve ser atendida. Uma solicitação pode conter até 100 IDs de dispositivos. |
|
| submitted_time | Cadeia de datas RFC 3339 que representa a hora da solicitação original pelo titular dos dados | 2010-05-25T10:00:00Z | |
| property_id | String | O par [platform]:[longname] para especificar o aplicativo relevante. | iOS:com.myapp.xyz |
Exemplo de saída
{
"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"
}
Escopo da exclusão
O apagamento remove os registros em nível de usuário (logs e detalhes de atribuição) que a Singular mantém para o identificador. Os dados agregados (por exemplo, agregações de cohort) não são endereçáveis por dispositivo depois de agregados e não são afetados pelo apagamento. Descreva essa distinção na sua própria documentação de privacidade.
Ponto de extremidade de status
| GET | https://gdpr.singular.net/api/gdpr/requests/<REQUEST_ID> |
Uso
Retorna o status atual de uma solicitação enviada anteriormente, identificada por sua ID de solicitação.
Exemplo de consulta
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)
Exemplo de saída
{
"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"
}
Ponto de extremidade de cancelamento
| DELETE | https://gdpr.singular.net/gdpr/requests/<REQUEST_ID> |
Utilização
Use esse ponto de extremidade para cancelar uma solicitação anterior. Isso é possível desde que a solicitação esteja no status "pendente".
Consulta de amostra
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)
Exemplo de saída
{
"controller_id":"example_controller_id",
"subject_request_id":"1c8b23f4-12eb-4fe8-af1c-0f72807dfec2",
"received_time":"2018-05-25T10:00:01Z",
"api_version":"0.1"
}