# API d'effacement des données

L'API d'effacement des données est le moyen en libre-service d'effacer les données personnelles d'une personne concernée de Pushwoosh (droit à l'effacement du RGPD). L'effacement ne peut pas être annulé : utilisez-la pour reproduire depuis vos propres systèmes la page [Demandes de données](/fr/product/account-management-and-security/data-requests/) du Panneau de Contrôle et l'action [Effacer les données personnelles](/fr/product/audience-data-and-segmentation/user-explorer/#erase-personal-data) sur la fiche d'un abonné.

## URL de base

```
https://rpc-api.svc-nue.pushwoosh.com
```

Tous les points de terminaison sont servis en HTTPS. Les requêtes et les réponses utilisent `application/json`, à l'exception de [Upload](#upload), qui utilise `multipart/form-data`.

## Authentification

Chaque requête doit inclure un en-tête `Authorization` avec votre [jeton d'API serveur](/fr/developer/api-reference/api-access-token/#server-api-token) :

```
Authorization: Api VOTRE_JETON_API
```

Le jeton doit disposer d'un accès en modification à chaque application nommée dans `application_codes`. C'est le même accès qu'un jeton doit avoir pour écrire des données d'appareil sur ces applications.

<span id="conventions" />

## Conventions

* **Nommage des champs :** les corps de requête acceptent le `lowerCamelCase` (par exemple, `applicationCodes`, `identifierType`). Les réponses sont sérialisées avec les noms de champs proto, en `snake_case` (`task_id`, `identifier_hash`, etc.). Les exemples et les références d'objets ci-dessous utilisent cette casse.
* **Identifiants :** une personne concernée est désignée par `identifier_type` (`SUBJECT_IDENTIFIER_USER_ID`, `SUBJECT_IDENTIFIER_HWID`, ou `SUBJECT_IDENTIFIER_EMAIL`) plus une liste d'`identifiers` de ce seul type. Un identifiant e-mail est comparé sans tenir compte de la casse.
* **Test à blanc d'abord, puis citez-le :** [Create](#create) avec `dry_run: true` se contente de compter ce qui serait effacé et n'écrit rien. Citer le `task_id` de ce test à blanc comme `confirmation_dry_run_task_id` sur l'appel réel est optionnel, mais si vous en citez un, il doit correspondre exactement aux applications et aux identifiants de ce test à blanc, et être appelé dans les 15 minutes suivant sa fin. Sinon, l'appel est refusé.
* **Les rapports ne contiennent jamais l'identifiant en clair.** [GetTaskReport](#gettaskreport) et [GetJournalReport](#getjournalreport) indiquent chaque identifiant sous forme de son hash sha256 (`identifier_hash`), et le corps du rapport est un CSV encodé en base64 dans la réponse JSON.

### Réponses d'erreur

| Statut HTTP | Signification |
| :---- | :---- |
| `400 Bad Request` | Argument invalide, comme un `identifier_type`, des `identifiers`, ou des `application_codes` vides, plus de 10 000 identifiants, plus de 50 applications, des identifiants × applications dépassant 50 000, une chaîne d'identifiant vide, ou (Upload uniquement) un fichier CSV manquant ou illisible. Également renvoyé comme `FailedPrecondition` sur le réseau lorsqu'un `confirmation_dry_run_task_id` cité ne correspond pas au test à blanc terminé qu'il désigne, est trop ancien (plus de 15 minutes), ou n'est pas du tout un test à blanc terminé. |
| `401 Unauthorized` | En-tête `Authorization` manquant ou invalide. |
| `403 Forbidden` | Le jeton n'a pas de droit de modification/données d'appareil sur l'une des applications demandées, ou l'appelant n'est pas autorisé à lire la tâche/le rapport demandé. |
| `404 Not Found` | La tâche n'a pas été trouvée, ou n'appartient pas au compte de l'appelant. |
| `413 Payload Too Large` | (Upload uniquement) le fichier importé dépasse 5 Mo. |
| `429 Too Many Requests` | Le compte a déjà démarré 20 tâches d'effacement de données (tests à blanc inclus) au cours des dernières 24 heures. |

## Points de terminaison

| Méthode | Chemin | Description |
| :---- | :---- | :---- |
| `POST` | `/api/data_erasure/tasks` | Créer une tâche d'effacement (ou de test à blanc) |
| `POST` | `/api/data_erasure/upload` | Créer une tâche d'effacement à partir d'un CSV d'identifiants importé |
| `GET` | `/api/data_erasure/tasks` | Lister les tâches d'effacement du compte |
| `GET` | `/api/data_erasure/tasks/{task_id}` | Obtenir une tâche d'effacement |
| `GET` | `/api/data_erasure/tasks/{task_id}/rows` | Lister les résultats par identifiant d'une tâche |
| `GET` | `/api/data_erasure/tasks/{task_id}/report` | Télécharger le rapport d'une tâche au format CSV |
| `GET` | `/api/data_erasure/report` | Télécharger toutes les tâches d'une période en un seul CSV |

## Create

Démarre l'effacement des données personnelles des personnes concernées listées, dans les applications listées. Avec `dry_run: true`, la tâche se contente de compter ce qui serait effacé.

`POST` `/api/data_erasure/tasks`

### Corps de la requête

| Paramètre | Type | Requis | Description |
| :---- | :---- | :---- | :---- |
| `identifierType` | string | Oui | `SUBJECT_IDENTIFIER_USER_ID`, `SUBJECT_IDENTIFIER_HWID`, ou `SUBJECT_IDENTIFIER_EMAIL`. |
| `identifiers` | tableau de chaînes | Oui | Identifiants de la personne concernée pour ce seul type, jusqu'à 10 000 par tâche, sans valeur vide. |
| `applicationCodes` | tableau de chaînes | Oui | [Codes d'application](/fr/developer/api-reference/api-identifiers/#application-code) desquels effacer, jusqu'à 50. Il n'existe aucun moyen d'effacer de toutes les applications du compte en un seul appel, nommez donc chacune explicitement. `identifiers.length × applicationCodes.length` ne doit pas dépasser 50 000, car le rapport contient une ligne par identifiant et par application. |
| `dryRun` | boolean | Non | Compte ce qui serait effacé et n'écrit rien. La valeur par défaut est `false`. |
| `confirmationDryRunTaskId` | integer | Non | `task_id` d'un test à blanc terminé qui a mesuré cet effacement exact. Voir [Conventions](#conventions). |

##### Exemple de requête

```json
{
  "identifierType": "SUBJECT_IDENTIFIER_EMAIL",
  "identifiers": ["subject@example.com"],
  "applicationCodes": ["XXXXX-XXXXX"],
  "dryRun": true
}
```

### Réponse

| Champ | Type | Description |
| :---- | :---- | :---- |
| `task_id` | integer | Id de la tâche créée. Utilisez-le avec tous les autres points de terminaison de cette page. |

<Aside type="danger">
L'effacement ne peut pas être annulé. Effacer une personne concernée supprime ses données dans toutes les applications nommées, mais n'annule pas les messages déjà planifiés ou en file d'attente pour cette personne, par exemple un envoi différé ou la prochaine étape d'un parcours en cours.
</Aside>

## Upload

Crée le même type de tâche que [Create](#create), mais les identifiants proviennent d'un CSV importé plutôt que d'un tableau JSON. Utilisez cette méthode pour une liste de personnes en masse.

`POST` `/api/data_erasure/upload`

### Requête (multipart/form-data)

| Champ | Requis | Description |
| :---- | :---- | :---- |
| `file` | Oui | Fichier CSV, jusqu'à 5 Mo, un identifiant par ligne, dans la colonne unique. La première ligne peut nommer la colonne (`user_id`, `userid`, `user id`, `hwid`, `email`, `identifier`, ou `subject`, sans tenir compte de la casse) au lieu de contenir un identifiant. Cette ligne est alors ignorée comme en-tête, et non comptée. Les lignes vides sont ignorées et comptées séparément. Les identifiants en double (sans tenir compte de la casse pour l'e-mail) sont fusionnés en un seul et comptés séparément. |
| `identifier_type` | Oui | `user_id`, `hwid`, ou `email`, en minuscules, une casse différente des valeurs de l'énumération JSON `identifierType` utilisées ailleurs sur cette page. Un seul type s'applique à tout le fichier. |
| `application_codes` | Oui | Codes d'application séparés par des virgules. |
| `dry_run` | Non | `true`/`false`. |
| `confirmation_dry_run_task_id` | Non | Identique à `Create`. |

### Réponse

```json
{
  "task_id": 123,
  "identifier_count": 480,
  "duplicate_count": 3,
  "skipped_rows": 1
}
```

## ListTasks

Liste les effacements du compte, du plus récent au plus ancien : le journal d'audit de qui a effacé quoi et quand. Les tests à blanc sont exclus sauf si `includeDryRuns` est défini.

`GET` `/api/data_erasure/tasks`

### Paramètres de requête

| Paramètre | Type | Description |
| :---- | :---- | :---- |
| `limit` / `offset` | integer | Pagination. |
| `includeDryRuns` | boolean | Inclut les tâches de test à blanc (mesure uniquement). |
| `from` / `to` | string (RFC 3339) | Conserve les tâches démarrées dans `[from, to)`. |
| `applicationCode` | string | Conserve les tâches qui couvrent cette application. |
| `initiatorUserId` | integer | Conserve les tâches démarrées par cet utilisateur du Panneau de Contrôle. `0` (valeur par défaut) conserve tous les initiateurs. |
| `initiatorTokenId` | integer | Conserve les tâches démarrées par ce jeton API. `0` (valeur par défaut) conserve tous les initiateurs. |
| `initiatorEmail` | string | Conserve les tâches démarrées par cet utilisateur du Panneau de Contrôle, mis en correspondance par e-mail, sans tenir compte de la casse. |

### Réponse

| Champ | Type | Description |
| :---- | :---- | :---- |
| `tasks` | tableau d'[objets de tâche d'effacement de données](#data-erasure-task-object) | Tâches correspondantes. |

## GetTask

Retourne une tâche d'effacement avec son statut et ses compteurs. Utilisez-la pour suivre une tâche démarrée par [Create](#create) ou [Upload](#upload).

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

### Réponse

| Champ | Type | Description |
| :---- | :---- | :---- |
| `task` | [Objet de tâche d'effacement de données](#data-erasure-task-object) | La tâche demandée. |

## ListTaskRows

Retourne le résultat par identifiant d'une tâche : ce qui a été supprimé, non trouvé, ignoré, ou en échec. Les identifiants sont indiqués sous forme de leur hash sha256.

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

### Paramètres de requête

| Paramètre | Type | Description |
| :---- | :---- | :---- |
| `limit` / `offset` | integer | Pagination. |

### Réponse

| Champ | Type | Description |
| :---- | :---- | :---- |
| `rows` | tableau d'[objets de ligne de tâche d'effacement de données](#data-erasure-task-row-object) | Cette page de résultats. |

## GetTaskReport

Retourne le rapport complet d'une tâche sous forme de fichier CSV : une ligne par identifiant et par application, avec son résultat. [ListTaskRows](#listtaskrows) affiche à la place les mêmes lignes page par page.

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

### Réponse

| Champ | Type | Description |
| :---- | :---- | :---- |
| `filename` | string | Nom de fichier suggéré, par exemple `data-erasure-task-42.csv`. |
| `content_type` | string | `text/csv`. |
| `content` | string (base64) | Le fichier CSV. Colonnes : `task_id`, `created`, `identifier_type`, `identifier_hash`, `application_code`, `result`, `detail`. |

## GetJournalReport

Retourne tous les effacements d'une période sous forme d'un seul fichier CSV : une ligne par identifiant et par application, avec la tâche et son initiateur sur chaque ligne. C'est ce qu'un compte remet à un auditeur.

`GET` `/api/data_erasure/report`

### Paramètres de requête

| Paramètre | Type | Requis | Description |
| :---- | :---- | :---- | :---- |
| `from` | string (RFC 3339) | Oui | Début de la période. |
| `to` | string (RFC 3339) | Non | Fin de la période. La valeur par défaut est l'heure actuelle. |
| `includeDryRuns` | boolean | Non | Inclut les tâches de test à blanc. |

<Aside type="caution">
Une période comportant plus de 2 000 tâches d'effacement est refusée plutôt que d'être tronquée. Réduisez la période et réessayez.
</Aside>

### Réponse

| Champ | Type | Description |
| :---- | :---- | :---- |
| `filename` | string | Nom de fichier suggéré, par exemple `data-erasure-2026-01-01-2026-04-01.csv`. |
| `content_type` | string | `text/csv`. |
| `content` | string (base64) | Le fichier CSV. Colonnes : `task_id`, `task_created`, `initiator_user_id`, `initiator_email`, `initiator_token_id`, `dry_run`, `identifier_type`, `identifier_hash`, `application_code`, `result`, `detail`, `row_created`. |

<span id="data-erasure-task-object" />

## Objet de tâche d'effacement de données

| Champ | Type | Description |
| :---- | :---- | :---- |
| `task_id` | integer | Id de la tâche. |
| `identifier_type` | string | `SUBJECT_IDENTIFIER_USER_ID`, `SUBJECT_IDENTIFIER_HWID`, ou `SUBJECT_IDENTIFIER_EMAIL`. |
| `application_codes` | tableau de chaînes | Applications couvertes par la tâche. |
| `dry_run` | boolean | Indique si cette tâche s'est contentée de mesurer un volume. |
| `status` | string | `ERASURE_TASK_STATUS_PENDING`, `_IN_PROGRESS`, `_DONE`, ou `_FAILED`. |
| `total_count` | integer | Identifiants × applications couverts par cette tâche. |
| `deleted_count` | integer | Le nombre effacé (ou, pour un test à blanc, qui l'aurait été). |
| `not_found_count` | integer | Le nombre qui n'a correspondu à rien. |
| `failed_count` | integer | Le nombre en échec. Voir [ListTaskRows](#listtaskrows) ou le rapport pour en connaître la raison. |
| `fail_reason` | string | Défini lorsque `status` vaut `ERASURE_TASK_STATUS_FAILED`. |
| `initiator_user_id` | integer | Utilisateur du Panneau de Contrôle ayant démarré la tâche. `0` lorsque c'est un jeton API. |
| `initiator_token_id` | integer | Jeton API ayant démarré la tâche. `0` lorsque c'est un utilisateur du Panneau de Contrôle. |
| `initiator_email` | string | Adresse de l'utilisateur du Panneau de Contrôle ayant démarré la tâche. Vide pour un jeton API. |
| `created` | string (RFC 3339) | Date de création de la tâche. |
| `started_at` | string (RFC 3339) | Date de début du travail d'effacement. |
| `finished_at` | string (RFC 3339) | Date à laquelle la tâche a atteint un statut final. |

<span id="data-erasure-task-row-object" />

## Objet de ligne de tâche d'effacement de données

| Champ | Type | Description |
| :---- | :---- | :---- |
| `identifier_hash` | string | sha256 de l'identifiant. Le rapport ne stocke ni ne renvoie jamais l'identifiant lui-même. |
| `application_code` | string | Application à laquelle s'applique le résultat de cette ligne. |
| `result` | string | `ERASURE_ROW_RESULT_DELETED`, `_NOT_FOUND`, `_SKIPPED`, ou `_FAILED`. |
| `detail` | string | Détail technique, généralement défini en cas d'échec. |
| `created` | string (RFC 3339) | Date d'écriture de cette ligne. |

## Sujets connexes

<CardGrid>
  <LinkCard title="Demandes de données (guide produit)" href="/product/account-management-and-security/data-requests/" />
  <LinkCard title="Effacer les données personnelles depuis User Explorer" href="/product/audience-data-and-segmentation/user-explorer/#erase-personal-data" />
</CardGrid>