Перейти к содержанию

API стирания данных

API стирания данных — это самостоятельный способ стереть персональные данные субъекта из Pushwoosh (право на стирание по GDPR). Стирание необратимо: используйте этот API, чтобы воспроизвести из ваших собственных систем действие страницы Запросы данных в Control Panel и действие Стереть персональные данные на карточке подписчика.

Базовый URL

Anchor link to
https://rpc-api.svc-nue.pushwoosh.com

Все эндпоинты обслуживаются по HTTPS. Запросы и ответы используют application/json, кроме Upload, который принимает multipart/form-data.

Аутентификация

Anchor link to

Каждый запрос должен содержать заголовок Authorization с вашим токеном Server API:

Authorization: Api YOUR_API_TOKEN

Токен должен иметь право на изменение (modify) для каждого приложения, указанного в application_codes. Это то же право, которое нужно токену для записи данных об устройствах в этих приложениях.

Соглашения

Anchor link to
  • Именование полей: тела запросов принимают lowerCamelCase (например, applicationCodes, identifierType). Ответы сериализуются с использованием имен полей proto в snake_case (task_id, identifier_hash и так далее). В примерах и справочниках по объектам ниже используется этот регистр.
  • Идентификаторы: субъект адресуется по identifier_type (SUBJECT_IDENTIFIER_USER_ID, SUBJECT_IDENTIFIER_HWID или SUBJECT_IDENTIFIER_EMAIL) и списку identifiers этого одного типа. Идентификатор email сопоставляется без учета регистра.
  • Сначала пробный запуск, потом ссылка на него: Create с dry_run: true только подсчитывает, что было бы стерто, и ничего не записывает. Указывать task_id этого пробного запуска в confirmation_dry_run_task_id при реальном вызове необязательно, но если вы его указываете, он должен в точности совпадать по приложениям и идентификаторам с этим пробным запуском и быть вызван в течение 15 минут после его завершения. Иначе вызов будет отклонен.
  • Отчеты никогда не содержат идентификатор в открытом виде. И GetTaskReport, и GetJournalReport указывают каждый идентификатор в виде его sha256-хэша (identifier_hash), а тело отчета — это CSV, закодированный в base64 внутри JSON-ответа.

Ответы об ошибках

Anchor link to
HTTP-статусЗначение
400 Bad RequestНедопустимый аргумент: пустой identifier_type, identifiers или application_codes, более 10 000 идентификаторов, более 50 приложений, идентификаторы × приложения свыше 50 000, пустая строка идентификатора, или (только для Upload) отсутствующий/нечитаемый CSV-файл. Также возвращается как FailedPrecondition при передаче, когда указанный confirmation_dry_run_task_id не совпадает с завершенным пробным запуском, который он называет, слишком устарел (более 15 минут) или вообще не является завершенным пробным запуском.
401 UnauthorizedОтсутствует или недействителен заголовок Authorization.
403 ForbiddenУ токена нет права на изменение/данные устройства (modify/device-data) для одного из запрошенных приложений, либо вызывающая сторона не может читать запрошенную задачу/отчет.
404 Not FoundЗадача не найдена или не принадлежит аккаунту вызывающей стороны.
413 Payload Too Large(только для Upload) загруженный файл превышает 5 МБ.
429 Too Many RequestsАккаунт уже запустил 20 задач стирания данных (включая пробные запуски) за последние 24 часа.

Эндпоинты

Anchor link to
МетодПутьОписание
POST/api/data_erasure/tasksСоздать задачу стирания (или пробного запуска)
POST/api/data_erasure/uploadСоздать задачу стирания из загруженного CSV с идентификаторами
GET/api/data_erasure/tasksПолучить список задач стирания аккаунта
GET/api/data_erasure/tasks/{task_id}Получить одну задачу стирания
GET/api/data_erasure/tasks/{task_id}/rowsПолучить список результатов задачи по каждому идентификатору
GET/api/data_erasure/tasks/{task_id}/reportСкачать отчет по задаче в формате CSV
GET/api/data_erasure/reportСкачать все задачи за период одним CSV-файлом

Начинает стирание персональных данных перечисленных субъектов в перечисленных приложениях. С dry_run: true задача только подсчитывает, что было бы стерто.

POST /api/data_erasure/tasks

Тело запроса

Anchor link to
ПараметрТипОбязательныйОписание
identifierTypestringДаSUBJECT_IDENTIFIER_USER_ID, SUBJECT_IDENTIFIER_HWID или SUBJECT_IDENTIFIER_EMAIL.
identifiersarray of stringsДаИдентификаторы субъекта этого одного типа, до 10 000 на задачу, без пустых значений.
applicationCodesarray of stringsДаКоды приложений, из которых нужно стереть данные, до 50. Стереть данные из всех приложений аккаунта одним вызовом нельзя, поэтому указывайте каждое явно. identifiers.length × applicationCodes.length не должно превышать 50 000, потому что отчет содержит одну строку на каждый идентификатор в каждом приложении.
dryRunbooleanНетПодсчитывает, что было бы стерто, и ничего не записывает. По умолчанию false.
confirmationDryRunTaskIdintegerНетtask_id завершенного пробного запуска, который измерил именно это стирание. См. Соглашения.
Пример запроса
Anchor link to
{
"identifierType": "SUBJECT_IDENTIFIER_EMAIL",
"identifiers": ["subject@example.com"],
"applicationCodes": ["XXXXX-XXXXX"],
"dryRun": true
}

Ответ

Anchor link to
ПолеТипОписание
task_idintegerId созданной задачи. Используйте его во всех остальных эндпоинтах на этой странице.

Создает такую же задачу, как Create, но идентификаторы берутся из загруженного CSV, а не из JSON-массива. Используйте это для массового списка субъектов.

POST /api/data_erasure/upload

Запрос (multipart/form-data)

Anchor link to
ПолеОбязательныйОписание
fileДаCSV-файл, до 5 МБ, один идентификатор на строку, в единственном столбце. Первая строка может называть столбец (user_id, userid, user id, hwid, email, identifier или subject, без учета регистра) вместо хранения идентификатора. Такая строка пропускается как заголовок и не учитывается. Пустые строки пропускаются и учитываются отдельно. Повторяющиеся идентификаторы (без учета регистра для email) объединяются в один и учитываются отдельно.
identifier_typeДаuser_id, hwid или email, в нижнем регистре — регистр отличается от значений enum identifierType в JSON, используемых в остальной части этой страницы. Один тип применяется ко всему файлу.
application_codesДаКоды приложений через запятую.
dry_runНетtrue/false.
confirmation_dry_run_task_idНетТо же, что в Create.

Ответ

Anchor link to
{
"task_id": 123,
"identifier_count": 480,
"duplicate_count": 3,
"skipped_rows": 1
}

Возвращает список стираний аккаунта, сначала самые новые: журнал аудита того, кто, что и когда стер. Пробные запуски исключаются, если не установлен includeDryRuns.

GET /api/data_erasure/tasks

Параметры запроса

Anchor link to
ПараметрТипОписание
limit / offsetintegerПостраничная навигация.
includeDryRunsbooleanВключить задачи пробных запусков (только для измерения).
from / tostring (RFC 3339)Оставить задачи, начатые в интервале [from, to).
applicationCodestringОставить задачи, которые охватывают это приложение.
initiatorUserIdintegerОставить задачи, начатые этим пользователем Control Panel. 0 (по умолчанию) оставляет всех инициаторов.
initiatorTokenIdintegerОставить задачи, начатые этим API-токеном. 0 (по умолчанию) оставляет всех инициаторов.
initiatorEmailstringОставить задачи, начатые пользователем Control Panel, определенным по email без учета регистра.

Ответ

Anchor link to
ПолеТипОписание
tasksarray of объектов задачи стирания данныхПодходящие задачи.

Возвращает одну задачу стирания с ее статусом и счетчиками. Используйте это, чтобы отслеживать задачу, начатую через Create или Upload.

GET /api/data_erasure/tasks/{task_id}

Ответ

Anchor link to
ПолеТипОписание
taskОбъект задачи стирания данныхЗапрошенная задача.

ListTaskRows

Anchor link to

Возвращает результат задачи по каждому идентификатору: что было удалено, не найдено, пропущено или завершилось ошибкой. Идентификаторы указываются в виде их sha256-хэша.

GET /api/data_erasure/tasks/{task_id}/rows

Параметры запроса

Anchor link to
ПараметрТипОписание
limit / offsetintegerПостраничная навигация.

Ответ

Anchor link to
ПолеТипОписание
rowsarray of объектов строки задачи стирания данныхЭта страница результатов.

GetTaskReport

Anchor link to

Возвращает весь отчет по задаче в виде CSV-файла: одна строка на идентификатор в каждом приложении с результатом. ListTaskRows вместо этого показывает те же строки постранично.

GET /api/data_erasure/tasks/{task_id}/report

Ответ

Anchor link to
ПолеТипОписание
filenamestringПредлагаемое имя файла, например data-erasure-task-42.csv.
content_typestringtext/csv.
contentstring (base64)CSV-файл. Столбцы: task_id, created, identifier_type, identifier_hash, application_code, result, detail.

GetJournalReport

Anchor link to

Возвращает все стирания за период в виде одного CSV-файла: строка на идентификатор в каждом приложении, с задачей и ее инициатором в каждой строке. Именно это аккаунт передает аудитору.

GET /api/data_erasure/report

Параметры запроса

Anchor link to
ПараметрТипОбязательныйОписание
fromstring (RFC 3339)ДаНачало периода.
tostring (RFC 3339)НетКонец периода. По умолчанию — текущий момент.
includeDryRunsbooleanНетВключить задачи пробных запусков.

Ответ

Anchor link to
ПолеТипОписание
filenamestringПредлагаемое имя файла, например data-erasure-2026-01-01-2026-04-01.csv.
content_typestringtext/csv.
contentstring (base64)CSV-файл. Столбцы: task_id, task_created, initiator_user_id, initiator_email, initiator_token_id, dry_run, identifier_type, identifier_hash, application_code, result, detail, row_created.

Объект задачи стирания данных

Anchor link to
ПолеТипОписание
task_idintegerId задачи.
identifier_typestringSUBJECT_IDENTIFIER_USER_ID, SUBJECT_IDENTIFIER_HWID или SUBJECT_IDENTIFIER_EMAIL.
application_codesarray of stringsПриложения, которые охватывает задача.
dry_runbooleanТолько ли эта задача измеряла объем.
statusstringERASURE_TASK_STATUS_PENDING, _IN_PROGRESS, _DONE или _FAILED.
total_countintegerИдентификаторы × приложения, которые охватывает эта задача.
deleted_countintegerСколько было стерто (или было бы стерто, для пробного запуска).
not_found_countintegerСколько не совпало ни с чем.
failed_countintegerСколько завершилось ошибкой. Причину см. в ListTaskRows или в отчете.
fail_reasonstringУстанавливается, когда status равен ERASURE_TASK_STATUS_FAILED.
initiator_user_idintegerПользователь Control Panel, начавший задачу. 0, если ее начал API-токен.
initiator_token_idintegerAPI-токен, начавший задачу. 0, если ее начал пользователь Control Panel.
initiator_emailstringАдрес пользователя Control Panel, начавшего задачу. Пусто для API-токена.
createdstring (RFC 3339)Когда задача была создана.
started_atstring (RFC 3339)Когда началась работа по стиранию.
finished_atstring (RFC 3339)Когда задача достигла финального статуса.

Объект строки задачи стирания данных

Anchor link to
ПолеТипОписание
identifier_hashstringsha256 идентификатора. Отчет никогда не хранит и не возвращает сам идентификатор.
application_codestringПриложение, к которому относится результат этой строки.
resultstringERASURE_ROW_RESULT_DELETED, _NOT_FOUND, _SKIPPED или _FAILED.
detailstringТехническая подробность, устанавливается в основном при ошибке.
createdstring (RFC 3339)Когда эта строка была записана.

Связанные материалы

Anchor link to