Referencia de API de GDPR

Aprenda a utilizar la API Singular para dar soporte a las solicitudes GDPR.

 

Para saber cómo encajan las solicitudes de los titulares de los datos en una arquitectura de consentimiento más amplia, y por qué el borrado no es lo mismo que detener el seguimiento, consulta Consent Management with the Singular SDK: A Decision Framework.

El borrado no es una exclusión (opt-out).

Esta API elimina los datos a nivel de usuario que Singular ha recopilado para un identificador. No impide que el SDK del dispositivo del usuario siga enviando eventos futuros. Un usuario que ejerce el borrado y que además debe dejar de ser rastreado requiere que la app llame a stopAllTracking() (o controle la inicialización del SDK) además de enviar la solicitud a la API. Gestiona ambas acciones en el mismo flujo de usuario.

Puntos finales GDPR

Punto final Método URL Descripción
Discovery GET https://gdpr.singular.net/gdpr/discovery Devuelve todos los tipos de solicitud admitidos actualmente que Singular puede procesar a través de la API GDPR.
Requests POST https://gdpr.singular.net/gdpr/requests Utilice este punto final para enviar nuevas solicitudes GDPR, enviadas a través de una solicitud HTTP POST especificando los ID de dispositivo de los sujetos de datos solicitados.
Status GET https://gdpr.singular.net/gdpr/requests/request_id Devuelve el estado actual de una solicitud enviada previamente, identificada por su ID de solicitud.
Cancellation DELETE https://gdpr.singular.net/gdpr/requests/request_id Utilice este punto final para cancelar una solicitud anterior. Esto es posible siempre que la solicitud se encuentre en estado "pendiente".

Punto final de descubrimiento

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

Uso

El punto final OpenGDPR Discovery devuelve todos los tipos de solicitud admitidos actualmente que Singular puede procesar a través de la API GDPR.

Ejemplo de consulta

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

Ejemplo de salida

{
    "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"
    ]
  }

Punto final de solicitudes

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

Uso

El punto final OpenGDPR Requests gestiona nuevas solicitudes GDPR, enviadas a través de una solicitud HTTP POST mientras se especifican los ID de dispositivo para los sujetos de datos solicitados.

Tiempo de finalización: Las solicitudes de borrado se completan en un plazo máximo de 30 días desde su envío. La respuesta devuelve un expected_completion_time; úsalo para establecer tus compromisos de respuesta del Artículo 12 del GDPR.

Solicitudes admitidas

El endpoint OpenGDPR Requests admite los siguientes tipos de solicitudes, correspondientes a diferentes derechos GDPR:

  • `erasure` - solicitudes de eliminación de datos como parte del artículo 17 del GDPR, Derecho a la eliminación
  • `access` - solicitudes de acceso a los datos en virtud del artículo 15 del RGPD, Derecho de acceso.

ID compatibles

El punto final OpenGDPR Requests admite los siguientes tipos de ID:

  • `android_advertising_id` - solicitudes realizadas proporcionando el ID de publicidad de Google, también conocido como GAID o AIFA
  • `android_id` - solicitudes realizadas proporcionando el ID de Android, también conocido como ANDI
  • `ios_advertising_id` - solicitudes realizadas proporcionando el IDFA, que es el ID de publicidad de iOS
  • `ios_vendor_id` - solicitudes realizadas proporcionando IDFV, que es el ID de iOS para proveedores
  • `user_id` - solicitudes realizadas proporcionando el ID de usuario personalizado

Los IDFA en cero se ignoran de forma silenciosa.

En dispositivos con limit-ad-tracking activado o con un ATT AuthorizationStatus igual a denied, el IDFA queda en cero ("00000000-0000-0000-0000-000000000000"). Las solicitudes basadas en un IDFA en cero se ignoran y la API no devuelve ningún error. En su lugar, envía el `ios_vendor_id` (IDFV) para estos usuarios. Como el fallo es silencioso, tu pipeline de DSR debe llevar y enviar el IDFV para los usuarios de iOS que denegaron el ATT.

Ejemplo 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 de consulta

Parámetro Formato Descripción Ejemplo
subject_request_id String UUIDv4 cadena  
subject_request_type String Valor de cadena que representa el tipo de solicitud OpenGDPR. Singular admite actualmente los valores "borrado", "portabilidad", "acceso"  
subject_identities Array Una lista de objetos de identidad que describen el tipo, valor y formato de cada ID de dispositivo para el que se realiza la solicitud. Una solicitud puede contener hasta 100 identificadores de dispositivo.
[
  {
    "identity_type":
"android_advertising_id", "identity_value":
"38400-8cf0-11bd-b23e-1000d", "identity_format": "raw" } ]
submitted_time   RFC 3339 cadena de fecha que representa la hora de la solicitud original por parte del interesado 2010-05-25T10:00:00Z
property_id String El par [platform]:[longname] para especificar la aplicación pertinente. iOS:com.myapp.xyz

Ejemplo de salida

{
    "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"
  }

Alcance de la eliminación

El borrado elimina los registros a nivel de usuario (logs y detalle de atribución) que Singular conserva para el identificador. Los datos agregados (por ejemplo, los resúmenes de cohortes) no son direccionables por dispositivo una vez agregados y no se ven afectados por el borrado. Describe esta distinción en tu propia documentación de privacidad.

Estado del punto final

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

Uso

Devuelve el estado actual de una solicitud enviada previamente, identificada por su ID de solicitud.

Ejemplo 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)

Ejemplo de salida

{
      "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"
  }

Punto final de cancelación

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

Uso

Utilice este punto final para cancelar una solicitud anterior. Esto es posible siempre que la solicitud se encuentre en estado "pendiente".

Ejemplo 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.delete(url+subject_request_id, headers=headers)
  print(response.text)

Ejemplo de salida

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