# Exportation asynchrone des statistiques de messages

`exportMessagesStatistics` exporte l'historique et les statistiques des messages vers un fichier CSV sur le serveur. Utilisez-le pour les extractions volumineuses ou de comptes complets que [`messages:list`](/fr/developer/api-reference/statistics-api/message-statistics-api/#messageslist) ne peut pas gérer.

## Quand utiliser l'exportation au lieu de messages:list

Utilisez `messages:list` pour les recherches en direct et paginées sur une période délimitée. Utilisez `exportMessagesStatistics` lorsque le résultat dépasserait la limite de pagination profonde de `messages:list` (`page × per_page > 100000`), ou lorsque l'objectif est un seul fichier téléchargeable plutôt qu'un JSON paginé. L'exportation n'a pas de limite sur `date_range` ou le nombre de lignes, car elle diffuse le résultat vers un fichier sur le disque au lieu de le conserver dans une seule réponse.

## Comment fonctionne le flux d'exportation

1.  Appelez [`export`](#export) avec les mêmes filtres que `messages:list`. La réponse renvoie immédiatement un identifiant de tâche `uid`, avant que le fichier ne soit généré.
2.  Interrogez [`status`](#status) avec cet `uid` jusqu'à ce qu'il signale `STATUS_SUCCESS` (ou `STATUS_FAILED`).
3.  Appelez [`result`](#result) avec le même `uid` pour obtenir le nom du fichier généré.
4.  [Téléchargez](#download) le fichier par son nom.

Utilisez [`lastTasks`](#lasttasks) pour rechercher les tâches d'exportation récentes pour une application, et [`delete`](#delete) pour annuler une tâche ou supprimer son fichier plus tôt.

## Méthodes

Le cycle de vie de l'exportation comporte cinq méthodes, plus un point de terminaison de téléchargement simple :

| Méthode | Description |
|---|---|
| [`exportMessagesStatistics/export`](#export) | Met en file d'attente une exportation et renvoie un `uid` de tâche. |
| [`exportMessagesStatistics/status`](#status) | Vérifie la progression de la tâche. |
| [`exportMessagesStatistics/result`](#result) | Renvoie le nom du fichier généré une fois la tâche terminée. |
| [`exportMessagesStatistics/lastTasks`](#lasttasks) | Liste les tâches d'exportation récentes pour une application. |
| [`exportMessagesStatistics/delete`](#delete) | Annule une tâche ou supprime son fichier avant l'expiration de la période de rétention. |
| [Téléchargement](#download) | Télécharge le fichier CSV généré par son nom. |

### export

Met en file d'attente une exportation de l'historique des messages et renvoie immédiatement un identifiant de tâche.

`POST` `https://api.pushwoosh.com/api/v2/statistics/exportMessagesStatistics/export`

##### En-têtes

La requête nécessite un jeton d'API serveur :

| Nom | Requis | Description |
|---|---|---|
| `Authorization` | Oui | [Jeton d'API serveur](/fr/developer/api-reference/api-access-token/#server-api-token). Doit être fourni dans le format suivant : `Authorization: Api <Server Key>`. |

##### Paramètres du corps de la requête

Le corps de la requête accepte les champs suivants :

| Nom | Requis | Type | Description |
|---|---|---|---|
| `type` | Oui | Chaîne | Doit être <code>"TASK_TYPE_EXPORT<wbr/>_MESSAGES_V2"</code>. |
| <code>export_messages<wbr/>_v2</code> | Oui | Objet | Paramètres d'exportation, décrits ci-dessous. |
| <code>export_messages<wbr/>_v2.application<wbr/>_code</code> | Voir note | Chaîne | [Code d'application Pushwoosh](/fr/developer/api-reference/api-identifiers/#application-code). Requis si `app_group_code` n'est pas défini. |
| <code>export_messages<wbr/>_v2.app<wbr/>_group_code</code> | Voir note | Chaîne | Code de groupe d'applications, exporte à travers chaque application du groupe. Requis si `application_code` n'est pas défini. |
| <code>export_messages<wbr/>_v2.search</code> | Non | Chaîne | Recherche en texte libre sur le titre et le contenu du message. |
| <code>export_messages<wbr/>_v2.filters</code> | Non | Objet | Filtres de message, décrits ci-dessous. Omettez pour exporter tout l'historique du compte. |
| <code>export_messages<wbr/>_v2.properties</code> | Non | Tableau | Colonnes à inclure dans le CSV, décrites ci-dessous. |

`export_messages_v2.filters` accepte :

| Nom <div style="width:150px"></div> | Type | Description |
|---|---|---|
| `statuses` | Tableau | Statuts de message à inclure. <details><summary>Valeurs possibles</summary><ul><li><code>"MESSAGE_STATUS_CANCELED"</code></li><li><code>"MESSAGE_STATUS_CREATING"</code></li><li><code>"MESSAGE_STATUS_DONE"</code></li><li><code>"MESSAGE_STATUS_FAIL"</code></li><li><code>"MESSAGE_STATUS_PENDING"</code></li><li><code>"MESSAGE_STATUS_PROCESSING"</code></li><li><code>"MESSAGE_STATUS_WAITING"</code></li></ul></details> |
| `platforms` | Tableau | [Codes de plateforme](/fr/developer/api-reference/messages-api/api-prerequisites/#platforms) (numériques, par ex. `1` pour iOS), et non les chaînes de noms de plateforme utilisées par `messages:list`. |
| `sent_date` | Objet | Période de rapport filtrée sur la date d'envoi : `{"date_from": "YYYY-MM-DD", "date_to": "YYYY-MM-DD"}`. |
| `created_date` | Objet | Période de rapport filtrée sur la date de création du message, même format que `sent_date`. |
| `created_via` | Tableau | Source du message. <details><summary>Valeurs possibles</summary><ul><li><code>"AB_TEST"</code></li><li><code>"API"</code></li><li><code>"AUTO_PUSH"</code></li><li><code>"CP"</code></li><li><code>"CSV"</code></li><li><code>"CUSTOMER_JOURNEY"</code></li><li><code>"EMAIL_API"</code></li><li><code>"EMAIL_CP"</code></li><li><code>"GEO_ZONE"</code></li><li><code>"PUSH_ON_EVENT"</code></li><li><code>"RSS"</code></li><li><code>"SYSTEM"</code></li></ul></details> |
| `segments` | Tableau | [Codes de filtre](/fr/developer/api-reference/api-identifiers/#segment--filter-code) auxquels le message a été envoyé. |
| `campaigns` | Tableau | [Codes de campagne](/fr/developer/api-reference/api-identifiers/#campaign-code). Contrairement à `messages:list`, ce paramètre accepte une liste, et non un seul code. |
| `message_id` | Chaîne (uint64) | Un seul ID de message numérique, entre guillemets. Contrairement à `messages:list`, l'exportation prend un seul ID, pas un tableau. |
| `message_code` | Chaîne | Un seul [code de message](/fr/developer/api-reference/api-identifiers/#message-code). |

`export_messages_v2.properties` sélectionne les colonnes que le CSV contient.

<details>
<summary>Valeurs possibles</summary>

- `"EXPORT_MESSAGE_PROPERTY_ID"`
- `"EXPORT_MESSAGE_PROPERTY_TIMESTAMP"`
- `"EXPORT_MESSAGE_PROPERTY_CONTENT"`
- `"EXPORT_MESSAGE_PROPERTY_TITLE"`
- `"EXPORT_MESSAGE_PROPERTY_APPLICATIONS"`
- `"EXPORT_MESSAGE_PROPERTY_STATUS"`
- `"EXPORT_MESSAGE_PROPERTY_PLATFORMS"`
- `"EXPORT_MESSAGE_PROPERTY_SOURCE"`
- `"EXPORT_MESSAGE_PROPERTY_FILTER"`
- `"EXPORT_MESSAGE_PROPERTY_SUBSCRIPTION_SEGMENTS"`
- `"EXPORT_MESSAGE_PROPERTY_SENT"`
- `"EXPORT_MESSAGE_PROPERTY_OPENED"`
- `"EXPORT_MESSAGE_PROPERTY_ERRORS"`
- `"EXPORT_MESSAGE_PROPERTY_RECIPIENTS"`
- `"EXPORT_MESSAGE_PROPERTY_DELIVERED"`
- `"EXPORT_MESSAGE_PROPERTY_TOTAL_DELIVERED"`
- `"EXPORT_MESSAGE_PROPERTY_TOTAL_OPENED"`
- `"EXPORT_MESSAGE_PROPERTY_TOTAL_CLICKS"`
- `"EXPORT_MESSAGE_PROPERTY_CLICKS"`
- `"EXPORT_MESSAGE_PROPERTY_UNSUBSCRIBED"`

</details>

<Aside type="caution" title="properties n'est pas juste un filtre">
Une propriété non listée dans `properties` n'apparaît pas du tout dans le fichier, y compris les colonnes de base (ID, date d'envoi, contenu, statut). Laisser `properties` vide produit un CSV sans colonnes. Listez chaque colonne que l'exportation doit contenir, pas seulement les métriques que vous souhaitez ajouter en plus d'un ensemble par défaut.
</Aside>

##### Exemple de requête

```json
{
  "type": "TASK_TYPE_EXPORT_MESSAGES_V2",
  "export_messages_v2": {
    "application_code": "XXXXX-XXXXX",
    "filters": {
      "created_date": {
        "date_from": "2026-01-01",
        "date_to": "2026-06-30"
      },
      "statuses": ["MESSAGE_STATUS_DONE"],
      "platforms": [1, 3]
    },
    "properties": [
      "EXPORT_MESSAGE_PROPERTY_ID",
      "EXPORT_MESSAGE_PROPERTY_TIMESTAMP",
      "EXPORT_MESSAGE_PROPERTY_STATUS",
      "EXPORT_MESSAGE_PROPERTY_PLATFORMS",
      "EXPORT_MESSAGE_PROPERTY_SENT",
      "EXPORT_MESSAGE_PROPERTY_OPENED"
    ]
  }
}
```

<Tabs>
<TabItem label="200 : OK">
```json
{
  "uid": "177458"
}
```
</TabItem>
<TabItem label="401 : Jeton d'accès API incorrect">
```json
{
  "error": "account not found"
}
```
</TabItem>
</Tabs>

### status

Renvoie la progression d'une tâche d'exportation.

`POST` `https://api.pushwoosh.com/api/v2/statistics/exportMessagesStatistics/status`

##### Paramètres du corps de la requête

Passez l'identifiant de la tâche renvoyé par `export` :

| Nom | Requis | Type | Description |
|---|---|---|---|
| `uid` | Oui | Chaîne (int64) | Identifiant de la tâche provenant de la réponse `export`, par ex. `"177458"`. |

##### Exemple de requête

```json
{
  "uid": "177458"
}
```

<Tabs>
<TabItem label="200 : OK">
```json
{
  "status": "STATUS_SUCCESS",
  "progress": 1
}
```
</TabItem>
</Tabs>

`status` est l'un des suivants : `"STATUS_PENDING"`, `"STATUS_SUCCESS"`, ou `"STATUS_FAILED"`. `progress` est une fraction entre `0` et `1` ; interrogez `status` jusqu'à ce qu'il atteigne `"STATUS_SUCCESS"` avant d'appeler `result`.

### result

Renvoie le nom du fichier généré une fois la tâche terminée.

`POST` `https://api.pushwoosh.com/api/v2/statistics/exportMessagesStatistics/result`

##### Paramètres du corps de la requête

Passez le même identifiant de tâche renvoyé par `export` :

| Nom | Requis | Type | Description |
|---|---|---|---|
| `uid` | Oui | Chaîne (int64) | Identifiant de la tâche provenant de la réponse `export`, par ex. `"177458"`. |

##### Exemple de requête

```json
{
  "uid": "177458"
}
```

<Tabs>
<TabItem label="200 : OK">
```json
{
  "export_messages_v2_result": {
    "file": "Export_Messages_v2_12345_20260813120000-a1b2c3d4.csv"
  }
}
```
</TabItem>
</Tabs>

Appeler `result` avant que `status` ne signale `"STATUS_SUCCESS"` renvoie un résultat vide. Passez la valeur `file` telle quelle au [point de terminaison de téléchargement](#download).

### lastTasks

Liste les tâches d'exportation récentes pour une application, les plus récentes en premier.

`POST` `https://api.pushwoosh.com/api/v2/statistics/exportMessagesStatistics/lastTasks`

##### Paramètres du corps de la requête

Chaque paramètre est un filtre optionnel ; omettez-les tous pour lister toutes les tâches auxquelles le jeton a accès :

| Nom | Requis | Type | Description |
|---|---|---|---|
| `application` | Non | Chaîne | [Code d'application Pushwoosh](/fr/developer/api-reference/api-identifiers/#application-code). Omettez pour lister les tâches de toutes les applications auxquelles le jeton a accès. |
| `types` | Non | Tableau | Restreindre à des types de tâches spécifiques. Utilisez <code>["TASK_TYPE_EXPORT<wbr/>_MESSAGES_V2"]</code> pour ne voir que les exportations de messages. |
| `campaign` | Non | Chaîne | Filtrer par [code de campagne](/fr/developer/api-reference/api-identifiers/#campaign-code). |
| `message_id` | Non | Chaîne (uint64) | Filtrer par un seul ID de message numérique, entre guillemets. |
| `message_code` | Non | Chaîne | Filtrer par un seul [code de message](/fr/developer/api-reference/api-identifiers/#message-code). |
| `limit` | Non | Entier | Nombre maximum de tâches à renvoyer. |
| `timestamp_from` | Non | Chaîne | Ne renvoyer que les tâches créées après cet horodatage (RFC 3339). |

<Aside type="note">
Les tâches sont conservées pendant 30 jours, que leur fichier ait déjà été supprimé ou non après la période de rétention de 7 jours. `lastTasks` peut toujours afficher une tâche dont le `result` ne correspond plus à un fichier téléchargeable.
</Aside>

##### Exemple de requête

```json
{
  "application": "XXXXX-XXXXX",
  "types": ["TASK_TYPE_EXPORT_MESSAGES_V2"],
  "limit": 10
}
```

<Tabs>
<TabItem label="200 : OK">
```json
{
  "tasks": [
    {
      "id": "177458",
      "timestamp": "2026-08-13T12:00:00Z",
      "status": "STATUS_SUCCESS",
      "requested_by_user": "user@example.com",
      "export_messages_v2": {
        "application_code": "XXXXX-XXXXX"
      },
      "export_messages_v2_result": {
        "file": "Export_Messages_v2_12345_20260813120000-a1b2c3d4.csv"
      }
    }
  ]
}
```
</TabItem>
</Tabs>

### delete

Supprime une tâche et son fichier avant l'expiration de la période de rétention de 7 jours.

`POST` `https://api.pushwoosh.com/api/v2/statistics/exportMessagesStatistics/delete`

##### Paramètres du corps de la requête

Passez l'identifiant de la tâche renvoyé par `export` :

| Nom | Requis | Type | Description |
|---|---|---|---|
| `uid` | Oui | Chaîne (int64) | Identifiant de la tâche provenant de la réponse `export`, par ex. `"177458"`. |

##### Exemple de requête

```json
{
  "uid": "177458"
}
```

<Tabs>
<TabItem label="200 : OK">
```json
{}
```
</TabItem>
</Tabs>

### Téléchargement

Télécharge le fichier CSV généré par `result`, par son nom.

`GET` `https://api.pushwoosh.com/api/v2/statistics/exportMessagesStatistics/download/<file>`

##### En-têtes

Authentifiez-vous de la même manière que les autres méthodes, ou utilisez une session active du Control Panel :

| Nom | Requis | Description |
|---|---|---|
| `Authorization`| Oui | [Jeton d'API serveur](/fr/developer/api-reference/api-access-token/#server-api-token), dans le même format que les autres méthodes `exportMessagesStatistics` : `Authorization: Api <Server Key>` (le schéma `Api` est insensible à la casse). Une requête sans en-tête `Authorization` et sans session Control Panel connectée reçoit une erreur `401 Unauthorized`. |

Remplacez `<file>` par la valeur exacte `file` de la réponse `result`, par exemple :

```
https://api.pushwoosh.com/api/v2/statistics/exportMessagesStatistics/download/Export_Messages_v2_12345_20260813120000-a1b2c3d4.csv
```

Le fichier est un CSV contenant les colonnes sélectionnées dans `properties`. Il reste disponible pendant 7 jours après la fin de l'exportation, puis la tâche de nettoyage le supprime et l'URL cesse de fonctionner.