API de Exclusão de Dados
A API de Exclusão de Dados é a forma de autoatendimento para apagar os dados pessoais de um titular do Pushwoosh (direito à exclusão do GDPR). A exclusão é irreversível: use-a para espelhar a página Solicitações de dados do Painel de Controle e a ação Apagar dados pessoais no cartão de um assinante a partir dos seus próprios sistemas.
URL Base
Anchor link tohttps://rpc-api.svc-nue.pushwoosh.comTodos os endpoints são servidos via HTTPS. As solicitações e respostas usam application/json, exceto Upload, que usa multipart/form-data.
Autenticação
Anchor link toToda solicitação deve incluir um cabeçalho Authorization com seu token de API do Servidor:
Authorization: Api YOUR_API_TOKENO token deve ter acesso de modificação a cada aplicativo nomeado em application_codes. É o mesmo acesso que um token precisa para gravar dados de dispositivo nesses aplicativos.
Convenções
Anchor link to- Nomenclatura de campos: corpos de solicitação aceitam
lowerCamelCase(por exemplo,applicationCodes,identifierType). As respostas são serializadas usando os nomes de campo do proto, emsnake_case(task_id,identifier_hash, e assim por diante). Os exemplos e as referências de objeto abaixo usam essa formatação. - Identificadores: um titular é endereçado por
identifier_type(SUBJECT_IDENTIFIER_USER_ID,SUBJECT_IDENTIFIER_HWIDouSUBJECT_IDENTIFIER_EMAIL) mais uma lista deidentifiersdesse único tipo. Um identificador de e-mail é comparado sem diferenciar maiúsculas de minúsculas. - Primeiro o dry run, depois cite-o: Create com
dry_run: trueapenas conta o que seria apagado e não grava nada. Citar otask_iddesse dry run comoconfirmation_dry_run_task_idna chamada real é opcional, mas se você citar um, ele deve corresponder exatamente às aplicações e identificadores desse dry run, e ser chamado dentro de 15 minutos após sua conclusão. Caso contrário, a chamada é recusada. - Os relatórios nunca carregam o identificador em texto claro. Tanto GetTaskReport quanto GetJournalReport reportam cada identificador como seu hash sha256 (
identifier_hash), e o corpo do relatório é um CSV codificado em base64 dentro da resposta JSON.
Respostas de erro
Anchor link to| Status HTTP | Significado |
|---|---|
400 Bad Request | Argumento inválido, como um identifier_type, identifiers ou application_codes vazio, mais de 10.000 identificadores, mais de 50 aplicativos, identificadores × aplicativos acima de 50.000, uma string de identificador vazia, ou (somente em Upload) um arquivo CSV ausente/ilegível. Também retornado como FailedPrecondition na transmissão quando um confirmation_dry_run_task_id citado não corresponde ao dry run concluído que ele nomeia, é antigo demais (mais de 15 minutos), ou não é um dry run concluído. |
401 Unauthorized | Cabeçalho Authorization ausente ou inválido. |
403 Forbidden | O token não tem direito de modificação/dados de dispositivo em um dos aplicativos solicitados, ou o chamador não pode ler a tarefa/relatório solicitado. |
404 Not Found | A tarefa não foi encontrada, ou não pertence à conta do chamador. |
413 Payload Too Large | (somente em Upload) o arquivo enviado tem mais de 5 MB. |
429 Too Many Requests | A conta já iniciou 20 tarefas de exclusão de dados (incluindo dry runs) nas últimas 24 horas. |
Endpoints
Anchor link to| Método | Caminho | Descrição |
|---|---|---|
POST | /api/data_erasure/tasks | Criar uma tarefa de exclusão (ou dry run) |
POST | /api/data_erasure/upload | Criar uma tarefa de exclusão a partir de um CSV de identificadores enviado |
GET | /api/data_erasure/tasks | Listar as tarefas de exclusão da conta |
GET | /api/data_erasure/tasks/{task_id} | Obter uma tarefa de exclusão |
GET | /api/data_erasure/tasks/{task_id}/rows | Listar os resultados por identificador de uma tarefa |
GET | /api/data_erasure/tasks/{task_id}/report | Baixar o relatório de uma tarefa como CSV |
GET | /api/data_erasure/report | Baixar todas as tarefas de um período como um único CSV |
Create
Anchor link toInicia a exclusão dos dados pessoais dos titulares listados nos aplicativos listados. Com dry_run: true, a tarefa apenas conta o que seria apagado.
POST /api/data_erasure/tasks
Corpo da solicitação
Anchor link to| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
identifierType | string | Sim | SUBJECT_IDENTIFIER_USER_ID, SUBJECT_IDENTIFIER_HWID ou SUBJECT_IDENTIFIER_EMAIL. |
identifiers | array de strings | Sim | Identificadores de titular desse único tipo, até 10.000 por tarefa, sem valores vazios. |
applicationCodes | array de strings | Sim | Códigos de aplicativo dos quais apagar, até 50. Não há como apagar de todos os aplicativos da conta em uma única chamada, então nomeie cada um explicitamente. identifiers.length × applicationCodes.length não deve exceder 50.000, porque o relatório contém uma linha por identificador por aplicativo. |
dryRun | boolean | Não | Conta o que seria apagado e não grava nada. O padrão é false. |
confirmationDryRunTaskId | integer | Não | task_id de um dry run concluído que mediu exatamente esta exclusão. Consulte Convenções. |
Exemplo de solicitação
Anchor link to{ "identifierType": "SUBJECT_IDENTIFIER_EMAIL", "identifiers": ["subject@example.com"], "applicationCodes": ["XXXXX-XXXXX"], "dryRun": true}Resposta
Anchor link to| Campo | Tipo | Descrição |
|---|---|---|
task_id | integer | ID da tarefa criada. Use-o com todos os outros endpoints desta página. |
Upload
Anchor link toCria o mesmo tipo de tarefa que Create, mas os identificadores vêm de um CSV enviado em vez de um array JSON. Use isso para uma lista de titulares em massa.
POST /api/data_erasure/upload
Solicitação (multipart/form-data)
Anchor link to| Campo | Obrigatório | Descrição |
|---|---|---|
file | Sim | Arquivo CSV, até 5 MB, um identificador por linha, na única coluna. A primeira linha pode nomear a coluna (user_id, userid, user id, hwid, email, identifier ou subject, sem diferenciar maiúsculas de minúsculas) em vez de conter um identificador. Essa linha é então ignorada como cabeçalho, não contada. Linhas em branco são ignoradas e contadas separadamente. Identificadores duplicados (sem diferenciar maiúsculas de minúsculas, para e-mail) são reduzidos a um só e contados separadamente. |
identifier_type | Sim | user_id, hwid ou email, em minúsculas, uma formatação diferente dos valores do enum JSON identifierType usados no restante desta página. Um único tipo se aplica ao arquivo inteiro. |
application_codes | Sim | Códigos de aplicativo separados por vírgula. |
dry_run | Não | true/false. |
confirmation_dry_run_task_id | Não | O mesmo que em Create. |
Resposta
Anchor link to{ "task_id": 123, "identifier_count": 480, "duplicate_count": 3, "skipped_rows": 1}ListTasks
Anchor link toLista as exclusões da conta, das mais recentes para as mais antigas: o diário de auditoria de quem apagou o quê e quando. Os dry runs são deixados de fora, a menos que includeDryRuns seja definido.
GET /api/data_erasure/tasks
Parâmetros de consulta
Anchor link to| Parâmetro | Tipo | Descrição |
|---|---|---|
limit / offset | integer | Paginação. |
includeDryRuns | boolean | Inclui tarefas dry-run (somente de medição). |
from / to | string (RFC 3339) | Mantém as tarefas iniciadas em [from, to). |
applicationCode | string | Mantém as tarefas que cobrem este aplicativo. |
initiatorUserId | integer | Mantém as tarefas iniciadas por este usuário do Painel de Controle. 0 (padrão) mantém todos os iniciadores. |
initiatorTokenId | integer | Mantém as tarefas iniciadas por este token de API. 0 (padrão) mantém todos os iniciadores. |
initiatorEmail | string | Mantém as tarefas iniciadas por este usuário do Painel de Controle, comparado por e-mail, sem diferenciar maiúsculas de minúsculas. |
Resposta
Anchor link to| Campo | Tipo | Descrição |
|---|---|---|
tasks | array de Objetos de tarefa de exclusão de dados | Tarefas correspondentes. |
GetTask
Anchor link toRetorna uma tarefa de exclusão com seu status e contadores. Use-a para acompanhar uma tarefa iniciada por Create ou Upload.
GET /api/data_erasure/tasks/{task_id}
Resposta
Anchor link to| Campo | Tipo | Descrição |
|---|---|---|
task | Objeto de tarefa de exclusão de dados | A tarefa solicitada. |
ListTaskRows
Anchor link toRetorna o resultado por identificador de uma tarefa: o que foi excluído, não encontrado, ignorado ou falhou. Os identificadores são reportados como seu hash sha256.
GET /api/data_erasure/tasks/{task_id}/rows
Parâmetros de consulta
Anchor link to| Parâmetro | Tipo | Descrição |
|---|---|---|
limit / offset | integer | Paginação. |
Resposta
Anchor link to| Campo | Tipo | Descrição |
|---|---|---|
rows | array de Objetos de linha da tarefa de exclusão de dados | Esta página de resultados. |
GetTaskReport
Anchor link toRetorna o relatório completo de uma tarefa como um arquivo CSV: uma linha por identificador por aplicativo, com seu resultado. ListTaskRows mostra as mesmas linhas página por página, em vez disso.
GET /api/data_erasure/tasks/{task_id}/report
Resposta
Anchor link to| Campo | Tipo | Descrição |
|---|---|---|
filename | string | Nome de arquivo sugerido, por exemplo data-erasure-task-42.csv. |
content_type | string | text/csv. |
content | string (base64) | O arquivo CSV. Colunas: task_id, created, identifier_type, identifier_hash, application_code, result, detail. |
GetJournalReport
Anchor link toRetorna todas as exclusões de um período como um único arquivo CSV: uma linha por identificador por aplicativo, com a tarefa e seu iniciador em cada linha. É isso que uma conta entrega a um auditor.
GET /api/data_erasure/report
Parâmetros de consulta
Anchor link to| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
from | string (RFC 3339) | Sim | Início do período. |
to | string (RFC 3339) | Não | Fim do período. O padrão é agora. |
includeDryRuns | boolean | Não | Inclui tarefas dry-run. |
Resposta
Anchor link to| Campo | Tipo | Descrição |
|---|---|---|
filename | string | Nome de arquivo sugerido, por exemplo data-erasure-2026-01-01-2026-04-01.csv. |
content_type | string | text/csv. |
content | string (base64) | O arquivo CSV. Colunas: task_id, task_created, initiator_user_id, initiator_email, initiator_token_id, dry_run, identifier_type, identifier_hash, application_code, result, detail, row_created. |
Objeto de tarefa de exclusão de dados
Anchor link to| Campo | Tipo | Descrição |
|---|---|---|
task_id | integer | ID da tarefa. |
identifier_type | string | SUBJECT_IDENTIFIER_USER_ID, SUBJECT_IDENTIFIER_HWID ou SUBJECT_IDENTIFIER_EMAIL. |
application_codes | array de strings | Aplicativos que a tarefa cobre. |
dry_run | boolean | Se esta tarefa apenas mediu um volume. |
status | string | ERASURE_TASK_STATUS_PENDING, _IN_PROGRESS, _DONE ou _FAILED. |
total_count | integer | Identificadores × aplicativos que esta tarefa cobre. |
deleted_count | integer | Quantos foram apagados (ou, em um dry run, seriam). |
not_found_count | integer | Quantos não corresponderam a nada. |
failed_count | integer | Quantos falharam. Consulte ListTaskRows ou o relatório para saber o motivo. |
fail_reason | string | Definido quando status é ERASURE_TASK_STATUS_FAILED. |
initiator_user_id | integer | Usuário do Painel de Controle que iniciou a tarefa. 0 quando foi um token de API. |
initiator_token_id | integer | Token de API que iniciou a tarefa. 0 quando foi um usuário do Painel de Controle. |
initiator_email | string | Endereço do usuário do Painel de Controle que iniciou a tarefa. Vazio para um token de API. |
created | string (RFC 3339) | Quando a tarefa foi criada. |
started_at | string (RFC 3339) | Quando o trabalho de exclusão começou. |
finished_at | string (RFC 3339) | Quando a tarefa atingiu um status final. |
Objeto de linha da tarefa de exclusão de dados
Anchor link to| Campo | Tipo | Descrição |
|---|---|---|
identifier_hash | string | sha256 do identificador. O relatório nunca armazena ou retorna o identificador em si. |
application_code | string | Aplicativo ao qual o resultado desta linha se aplica. |
result | string | ERASURE_ROW_RESULT_DELETED, _NOT_FOUND, _SKIPPED ou _FAILED. |
detail | string | Detalhe técnico, definido principalmente em caso de falha. |
created | string (RFC 3339) | Quando esta linha foi gravada. |