> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kameleoon.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Créer un test multivariate

> Créez un test multivariate (MVT) et définissez une allocation de trafic personnalisée à l'aide de l'Automation API.

## Objectif

Créez un test multivariate (MVT) comportant plusieurs sections et variations, puis définissez une allocation de trafic personnalisée (non égale) entre ces variations.

<Warning>
  Lorsque vous créez un test multivariate avec `POST /experiments`, Kameleoon applique toujours une allocation de trafic égale à chaque variation et réinitialise toute valeur `locked` envoyée à `false`, quelles que soient les valeurs que vous envoyez dans `mvtAllocationSettings`. Pour définir une allocation de trafic personnalisée, suivez le processus en trois étapes de ce tutoriel : créez l'expérience, récupérez les Id générés, puis mettez à jour l'allocation avec une requête `PATCH`.
</Warning>

Pour un aperçu des concepts MVT (sections, variations et combinaisons) et pour savoir comment configurer l'allocation de trafic dans l'application Kameleoon, consultez [Configurer des tests multivariate](/fr/user-manual/experimentation/web-experimentation/advanced-experiment-types/setting-up-multivariate-tests).

## Prérequis

* `access token`

L'Automation API nécessite un access token.
Récupérez le jeton de manière programmatique en suivant les instructions de la section [obtention d'un access token](/fr/developer-docs/apis/automation-api-rest/get-started/get-started#1-obtain-an-access-token).

* `siteId`

Récupérez le `siteId` directement dans votre code à partir du `siteCode` en appelant [l'endpoint de récupération d'un site par code](/api-reference/site/get-a-site-by-code), ou trouvez-le dans l'application en suivant les étapes de [Créer une nouvelle expérience](/fr/developer-docs/apis/automation-api-rest/tutorials/experiments/create-a-new-experiment#requirements).

## Concepts clés

### La variation de référence

Kameleoon ajoute automatiquement une variation de référence à chaque section que vous envoyez. Cette référence apparaît dans la réponse sous la forme `variationId: "0"`, au sein des entrées d'allocation de la section correspondante.

Si vous envoyez votre propre variation nommée `Original`, Kameleoon la crée comme une variation supplémentaire distincte. Elle n'identifie ni ne remplace la référence générée. N'envoyez une variation `Original` explicite que si vous souhaitez tester deux variations de référence distinctes dans la même section.

### Les Id envoyés par le client sont temporaires

Les valeurs `sectionId` et `id` de variation que vous envoyez dans `mvtVariations` ne servent qu'à relier les entrées au sein de cette seule requête : elles connectent chaque entrée d'allocation de `mvtAllocationSettings` à la section et à la variation correspondantes, avant que Kameleoon ne génère des Id permanents. Utilisez les entiers de votre choix.

Kameleoon ignore les valeurs envoyées et les remplace par ses propres `sectionId` et `variationId` générés. Utilisez les valeurs générées (renvoyées dans la réponse et par une requête `GET` ultérieure) pour toutes les requêtes suivantes. La réponse ne renvoie pas les noms de variation que vous avez envoyés, uniquement les Id générés. Si vous devez confirmer quel Id généré correspond à quel nom envoyé, vérifiez l'expérience dans l'application Kameleoon.

### Id de section et Id de combinaison

Kameleoon génère deux ensembles distincts d'Id pour un test multivariate :

* Les **Id de section et de variation** identifient une variation au sein d'une section. Utilisez-les dans `mvtAllocationSettings.sectionsAllocations`.
* Les **Id de combinaison** identifient une combinaison complète de variations, une par section, affichée aux visiteurs exposés. Kameleoon génère toutes les combinaisons possibles selon le produit cartésien des variations de toutes les sections (y compris la référence de chaque section) et renvoie les Id de combinaison dans le tableau `variations` de premier niveau, ainsi que comme clés dans la map `deviations`. Utilisez-les dans `mvtAllocationSettings.combinationsAllocations`.

`sectionsAllocations` et `combinationsAllocations` utilisent tous deux la même structure d'entrée d'allocation (`allocationPart`, `checked`, `locked`, `sectionId`, `variationId`) : choisissez une seule méthode :

* Renseignez `sectionsAllocations` pour allouer le trafic par variation au sein de chaque section. Kameleoon déduit la part de chaque combinaison à partir des valeurs de section.
* Renseignez `combinationsAllocations` pour allouer le trafic directement à des combinaisons spécifiques.

Les Id de combinaison n'existant pas avant leur génération par Kameleoon, vous ne pouvez pas renseigner `combinationsAllocations` dans la requête de création. Récupérez les Id de combinaison générés avec une requête `GET`, puis définissez `combinationsAllocations` dans une requête `PATCH` ultérieure, en suivant le même schéma que celui utilisé pour `sectionsAllocations` dans ce tutoriel.

## Étapes

### 1. Créer l'expérience

**Endpoint :**

```
POST https://api.kameleoon.com/experiments
```

| Nom                       | Type    | Description                                                                                                                                                               |
| ------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `baseURL`                 | Chaîne  | URL de la page à charger dans l'éditeur graphique.                                                                                                                        |
| `name`                    | Chaîne  | Nom de l'expérience.                                                                                                                                                      |
| `siteId`                  | Entier  | Le `siteId` du projet.                                                                                                                                                    |
| `type`                    | Chaîne  | Définissez `MVT` pour un test multivariate.                                                                                                                               |
| `mvtVariations`           | Tableau | Les sections et variations à créer. Chaque entrée nécessite un `sectionId` temporaire, un `sectionName` et un tableau `variations` d'objets `{id, name}`.                 |
| `mvtAllocationSettings`   | Objet   | Paramètres d'allocation de trafic. Kameleoon accepte cet objet lors de la création, mais applique toujours une allocation égale, quelles que soient les valeurs envoyées. |
| `trafficAllocationMethod` | Chaîne  | Définissez `MANUAL` pour contrôler vous-même l'allocation de trafic plutôt que d'utiliser une méthode automatisée.                                                        |

**Exemple :**

```bash theme={null}
curl -L -X POST 'https://api.kameleoon.com/experiments' \
-H 'Content-Type: application/json' \
-H 'Accept: */*' \
-H 'Authorization: Bearer <ACCESS_TOKEN>' \
--data-raw '{
  "baseURL": "https://test-site.fr/",
  "name": "MVT_1",
  "siteId": 29353,
  "type": "MVT",
  "trafficAllocationMethod": "MANUAL",
  "mvtVariations": [
    {
      "sectionId": 1,
      "sectionName": "Button color",
      "variations": [
        {"id": 1, "name": "Red"},
        {"id": 2, "name": "Blue"}
      ]
    },
    {
      "sectionId": 2,
      "sectionName": "Button wording",
      "variations": [
        {"id": 1, "name": "Buy now"},
        {"id": 2, "name": "Shop now"}
      ]
    }
  ],
  "mvtAllocationSettings": {
    "exposedPart": 0.8,
    "sectionsAllocations": [
      {"allocationPart": 0.6, "checked": true, "locked": true, "sectionId": 1, "variationId": "0"},
      {"allocationPart": 0.25, "checked": true, "locked": true, "sectionId": 1, "variationId": "1"},
      {"allocationPart": 0.15, "checked": true, "locked": true, "sectionId": 1, "variationId": "2"},
      {"allocationPart": 0.5, "checked": true, "locked": true, "sectionId": 2, "variationId": "0"},
      {"allocationPart": 0.3, "checked": true, "locked": true, "sectionId": 2, "variationId": "1"},
      {"allocationPart": 0.2, "checked": true, "locked": true, "sectionId": 2, "variationId": "2"}
    ],
    "combinationsAllocations": []
  }
}'
```

**Réponse (abrégée) :**

```json theme={null}
{
  "id": 404811,
  "siteId": 29353,
  "name": "MVT_1",
  "type": "MVT",
  "status": "draft",
  "trafficAllocationMethod": "MANUAL",
  "variations": [1351297, 1351298, 1351299, 1351300, 1351301, 1351302, 1351303, 1351304, 1351305],
  "mvtAllocationSettings": {
    "exposedPart": 0.8,
    "sectionsAllocations": [
      {"variationId": "1351294", "sectionId": 4451, "allocationPart": 0.33333334, "locked": false, "checked": true},
      {"variationId": "1351293", "sectionId": 4451, "allocationPart": 0.33333334, "locked": false, "checked": true},
      {"variationId": "0", "sectionId": 4451, "allocationPart": 0.33333334, "locked": false, "checked": true},
      {"variationId": "1351296", "sectionId": 4452, "allocationPart": 0.33333334, "locked": false, "checked": true},
      {"variationId": "1351295", "sectionId": 4452, "allocationPart": 0.33333334, "locked": false, "checked": true},
      {"variationId": "0", "sectionId": 4452, "allocationPart": 0.33333334, "locked": false, "checked": true}
    ],
    "combinationsAllocations": []
  }
}
```

Remarquez que Kameleoon a généré de nouveaux `sectionId` et `variationId` (`4451`, `4452`, `1351293`-`1351296`), a ajouté une variation de référence (`variationId: "0"`) à chaque section, et a remplacé l'allocation envoyée par une part égale de `0.33333334`, en réinitialisant `locked` à `false`. Kameleoon conserve `exposedPart` tel qu'envoyé. Passez à l'étape suivante pour définir l'allocation souhaitée.

### 2. Récupérer les Id générés

Si vous n'avez pas conservé les Id générés à partir de la réponse de création, récupérez-les avec une requête `GET`.

**Endpoint :**

```
GET https://api.kameleoon.com/experiments/{experimentId}
```

**Exemple :**

```bash theme={null}
curl -L -X GET 'https://api.kameleoon.com/experiments/404811' \
-H 'Authorization: Bearer <ACCESS_TOKEN>'
```

La réponse contient le même tableau `mvtAllocationSettings.sectionsAllocations` que celui présenté à l'étape 1, avec les valeurs `sectionId` et `variationId` générées dont vous avez besoin pour l'étape suivante.

### 3. Définir une allocation de trafic personnalisée

**Endpoint :**

```
PATCH https://api.kameleoon.com/experiments/{experimentId}
```

Envoyez à nouveau `mvtAllocationSettings`, cette fois en utilisant les valeurs `sectionId` et `variationId` générées à l'étape 2.

**Exemple :**

```bash theme={null}
curl -L -X PATCH 'https://api.kameleoon.com/experiments/404811' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <ACCESS_TOKEN>' \
--data-raw '{
  "trafficAllocationMethod": "MANUAL",
  "mvtAllocationSettings": {
    "exposedPart": 0.8,
    "sectionsAllocations": [
      {"allocationPart": 0.6, "checked": true, "locked": true, "sectionId": 4451, "variationId": "1351294"},
      {"allocationPart": 0.25, "checked": true, "locked": true, "sectionId": 4451, "variationId": "1351293"},
      {"allocationPart": 0.15, "checked": true, "locked": true, "sectionId": 4451, "variationId": "0"},
      {"allocationPart": 0.5, "checked": true, "locked": true, "sectionId": 4452, "variationId": "1351296"},
      {"allocationPart": 0.3, "checked": true, "locked": true, "sectionId": 4452, "variationId": "1351295"},
      {"allocationPart": 0.2, "checked": true, "locked": true, "sectionId": 4452, "variationId": "0"}
    ],
    "combinationsAllocations": []
  }
}'
```

**Réponse (abrégée) :**

```json theme={null}
{
  "id": 404811,
  "mvtAllocationSettings": {
    "exposedPart": 0.8,
    "sectionsAllocations": [
      {"variationId": "1351294", "sectionId": 4451, "allocationPart": 0.6, "locked": true, "checked": true},
      {"variationId": "1351293", "sectionId": 4451, "allocationPart": 0.25, "locked": true, "checked": true},
      {"variationId": "0", "sectionId": 4451, "allocationPart": 0.15, "locked": true, "checked": true},
      {"variationId": "1351296", "sectionId": 4452, "allocationPart": 0.5, "locked": true, "checked": true},
      {"variationId": "1351295", "sectionId": 4452, "allocationPart": 0.3, "locked": true, "checked": true},
      {"variationId": "0", "sectionId": 4452, "allocationPart": 0.2, "locked": true, "checked": true}
    ],
    "combinationsAllocations": []
  }
}
```

L'allocation correspond désormais aux valeurs envoyées, et `locked` reste `true`. Une requête `GET` ultérieure confirme le même résultat.

### 4. Vérifier l'expérience

Rendez-vous sur le **Experiments Dashboard** de l'application Kameleoon et ouvrez l'expérience pour vérifier que les sections, variations et allocations de trafic correspondent à votre configuration.

## Limites connues

* **La suppression de tests multivariate volumineux peut expirer.** `DELETE /experiments/{experimentId}` peut renvoyer une erreur `504 Gateway Timeout` lorsque l'expérience comporte de nombreuses combinaisons. Un délai dépassé ne signifie pas nécessairement que la suppression a échoué : envoyez une requête `GET` pour ce même Id d'expérience afin de vérifier si elle existe encore avant de retenter la suppression.
