# Clés de suivi API

> Gérez les clés publiques qu’utilise le script de suivi pour envoyer des événements depuis votre site web.

URL de base : `https://api.emailit.com/v2`. Authentifiez-vous avec `Authorization: Bearer <API key>`.

## Créer une clé de suivi — POST /tracking-keys

> Créez une clé de suivi publique pour le script de suivi Emailit, éventuellement limitée à vos propres sites.

# Créer une clé de suivi

Crée une clé de suivi pour le [script de suivi](/fr/docs/events/tracking-script/). La réponse inclut la `key` publique à placer dans l’URL du script. Nécessite une clé API avec la portée `full`.

Les clés de suivi sont publiques : n’importe qui peut en copier une depuis votre page. Elles peuvent seulement envoyer des événements d’espace de travail et des événements personnalisés, jamais lire de données, et vous pouvez les limiter à vos propres sites avec `allowed_origins`. Un espace de travail peut avoir jusqu’à 25 clés de suivi.

Le suivi de site web est inclus dans les forfaits Pro, Business et Custom. Les clés restent après un passage à Pay as you go, mais les requêtes du script de suivi qui les utilisent renvoient `403`.

`POST /tracking-keys`

## Paramètres du corps

- `name` (string): Nom qui indique où la clé est utilisée, comme `Online shop`, 100 caractères au maximum.

- `allowed_origins` (string[]): Les sites autorisés à envoyer des événements avec la clé, 50 au maximum. Vide ou omis : n’importe quel site. Chaque entrée est l’une des suivantes : - une origine, comme `https://shop.example.com` : uniquement ce schéma, cet hôte et ce port ; - un hôte, comme `shop.example.com` : cet hôte avec n’importe quel schéma ou port ; - un motif générique (wildcard), comme `*.example.com` : `example.com` et tous ses sous-domaines. Les entrées sont enregistrées en minuscules, sans barre oblique finale. Une chaîne dont les entrées sont séparées par des espaces ou des virgules est aussi acceptée.

- `enabled` (boolean): `false` crée la clé désactivée.

## Réponse

Renvoie `201 Created` avec l’[objet clé de suivi](/fr/docs/api-reference/tracking-keys/get/).

| Statut | Cas |
| --- | --- |
| `403` | La clé API n’a pas la portée `full`, ou l’espace de travail est sur Pay as you go : `error` vaut `plan_required` et `required_plan` vaut `pro`. |
| `422` | Un champ est invalide, par exemple une entrée de `allowed_origins` qui n’est ni une origine, ni un hôte, ni un motif générique. `errors` est indexé par champ et `message` reprend le premier problème. Renvoyé aussi avec `code: "tracking_keys_limit"` lorsque l’espace de travail compte déjà 25 clés de suivi. |

**Requête** `POST /tracking-keys`

**cURL**

```bash
curl -X POST https://api.emailit.com/v2/tracking-keys \
  -H "Authorization: Bearer $EMAILIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Online shop",
    "allowed_origins": ["https://shop.example.com", "*.example.com"]
  }'
```

**Node.js**

```javascript
const res = await fetch('https://api.emailit.com/v2/tracking-keys', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.EMAILIT_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    name: 'Online shop',
    allowed_origins: ['https://shop.example.com', '*.example.com'],
  }),
});
const trackingKey = await res.json();
```

**Python**

```python
import os, requests

r = requests.post(
    "https://api.emailit.com/v2/tracking-keys",
    headers={"Authorization": f"Bearer {os.environ['EMAILIT_API_KEY']}"},
    json={
        "name": "Online shop",
        "allowed_origins": ["https://shop.example.com", "*.example.com"],
    },
)
tracking_key = r.json()
```

**PHP**

```php
$client = new GuzzleHttp\Client(['base_uri' => 'https://api.emailit.com/v2/']);

$response = $client->post('tracking-keys', [
    'headers' => ['Authorization' => 'Bearer ' . getenv('EMAILIT_API_KEY')],
    'json' => [
        'name' => 'Online shop',
        'allowed_origins' => ['https://shop.example.com', '*.example.com'],
    ],
]);
$trackingKey = json_decode($response->getBody(), true);
```

**201**

```json
{
  "object": "tracking_key",
  "id": "trk_2yHn5Pq2WcR7tY4uNs8KdV1bXj6",
  "name": "Online shop",
  "key": "pub_8fK2mQ9xLr4TzW7nB1cV5yH3dJ6sA0pE",
  "allowed_origins": ["https://shop.example.com", "*.example.com"],
  "enabled": true,
  "last_used_at": null,
  "created_at": "2026-10-19T08:05:00.000000+00:00",
  "updated_at": "2026-10-19T08:05:00.000000+00:00"
}
```

**403**

```json
{
  "error": "plan_required",
  "required_plan": "pro",
  "message": "Website tracking is included with Pro and Business."
}
```

**422**

```json
{
  "error": "allowed_origins \"https://shop.example.com/checkout\" is not an origin (https://example.com), a host (example.com) or a wildcard (*.example.com)",
  "message": "allowed_origins \"https://shop.example.com/checkout\" is not an origin (https://example.com), a host (example.com) or a wildcard (*.example.com)",
  "errors": {
    "allowed_origins": ["\"https://shop.example.com/checkout\" is not an origin (https://example.com), a host (example.com) or a wildcard (*.example.com)"]
  }
}
```

---
Source: https://emailit.com/fr/docs/api-reference/tracking-keys/create/

## Récupérer une clé de suivi — GET /tracking-keys/{id}

> Récupérez une clé de suivi du script de suivi Emailit, avec sa clé publique, ses sites autorisés et sa dernière utilisation.

# Récupérer une clé de suivi

Récupère une clé de suivi. Les clés de suivi sont des clés publiques pour le [script de suivi](/fr/docs/events/tracking-script/) : elles se placent dans vos pages web et peuvent seulement envoyer des événements d’espace de travail et des événements personnalisés. Nécessite une clé API avec la portée `full`.

`GET /tracking-keys/{id}`

## Paramètres de chemin

- `id` (string, obligatoire): L’ID de la clé de suivi (`trk_…`) ou la clé elle-même (`pub_…`).

## Réponse

Renvoie l’objet clé de suivi.

- `object` (string): Toujours `tracking_key`.

- `id` (string): ID de la clé de suivi, préfixé par `trk_`.

- `name` (string): Nom qui indique où la clé est utilisée.

- `key` (string): La clé publique : `pub_` suivi de 32 lettres et chiffres. Elle fait partie de l’URL du script : elle est donc renvoyée à chaque lecture.

- `allowed_origins` (string[]): Les sites qui peuvent envoyer des événements avec cette clé. Vide : n’importe quel site. Consultez [Sites autorisés](/fr/docs/events/tracking-script/#allowed-sites).

- `enabled` (boolean): `false` lorsque la clé est désactivée. Les événements envoyés avec une clé désactivée sont rejetés.

- `last_used_at` (string | null): Date du dernier envoi d’événements avec la clé, mise à jour au plus toutes les 10 minutes. `null` si elle n’a jamais été utilisée.

- `created_at, updated_at` (string): Horodatages en UTC.

Renvoie `404` avec `error: "Tracking key not found"` si aucune clé ne correspond.

**Requête** `GET /tracking-keys/{id}`

**cURL**

```bash
curl https://api.emailit.com/v2/tracking-keys/trk_2yHn5Pq2WcR7tY4uNs8KdV1bXj6 \
  -H "Authorization: Bearer $EMAILIT_API_KEY"
```

**Node.js**

```javascript
const res = await fetch('https://api.emailit.com/v2/tracking-keys/trk_2yHn5Pq2WcR7tY4uNs8KdV1bXj6', {
  headers: { Authorization: `Bearer ${process.env.EMAILIT_API_KEY}` },
});
const trackingKey = await res.json();
```

**Python**

```python
import os, requests

r = requests.get(
    "https://api.emailit.com/v2/tracking-keys/trk_2yHn5Pq2WcR7tY4uNs8KdV1bXj6",
    headers={"Authorization": f"Bearer {os.environ['EMAILIT_API_KEY']}"},
)
tracking_key = r.json()
```

**PHP**

```php
$client = new GuzzleHttp\Client(['base_uri' => 'https://api.emailit.com/v2/']);

$response = $client->get('tracking-keys/trk_2yHn5Pq2WcR7tY4uNs8KdV1bXj6', [
    'headers' => ['Authorization' => 'Bearer ' . getenv('EMAILIT_API_KEY')],
]);
$trackingKey = json_decode($response->getBody(), true);
```

**200**

```json
{
  "object": "tracking_key",
  "id": "trk_2yHn5Pq2WcR7tY4uNs8KdV1bXj6",
  "name": "Online shop",
  "key": "pub_8fK2mQ9xLr4TzW7nB1cV5yH3dJ6sA0pE",
  "allowed_origins": ["https://shop.example.com", "*.example.com"],
  "enabled": true,
  "last_used_at": "2026-10-19T09:40:00.000000+00:00",
  "created_at": "2026-10-19T08:05:00.000000+00:00",
  "updated_at": "2026-10-19T08:05:00.000000+00:00"
}
```

**404**

```json
{
  "error": "Tracking key not found"
}
```

---
Source: https://emailit.com/fr/docs/api-reference/tracking-keys/get/

## Mettre à jour une clé de suivi — POST /tracking-keys/{id}

> Renommez une clé de suivi, modifiez ses sites autorisés, ou désactivez-la puis réactivez-la. La clé publique reste la même.

# Mettre à jour une clé de suivi

Met à jour les champs transmis et laisse les autres inchangés. La `key` publique ne change jamais ; pour remplacer une clé, créez-en une nouvelle, mettez à jour vos pages et supprimez l’ancienne. Nécessite une clé API avec la portée `full`.

Les modifications peuvent prendre jusqu’à une minute pour s’appliquer partout.

`POST /tracking-keys/{id}`

## Paramètres de chemin

- `id` (string, obligatoire): L’ID de la clé de suivi (`trk_…`) ou la clé elle-même (`pub_…`).

## Paramètres du corps

- `name` (string): Nouveau nom, 100 caractères au maximum. Ne peut pas être vide.

- `allowed_origins` (string[]): Remplace la liste des sites autorisés, avec les mêmes règles qu’à la [création](/fr/docs/api-reference/tracking-keys/create/#body-parameters). `[]` autorise n’importe quel site.

- `enabled` (boolean): `false` désactive la clé : le script de suivi continue de se charger, mais ses événements sont rejetés avec `403`. `true` la réactive.

## Réponse

Renvoie l’[objet clé de suivi](/fr/docs/api-reference/tracking-keys/get/) mis à jour.

| Statut | Cas |
| --- | --- |
| `404` | Aucune clé de suivi ne correspond à `id`. |
| `422` | Un champ est invalide. `errors` est indexé par champ et `message` reprend le premier problème. |

**Requête** `POST /tracking-keys/{id}`

**cURL**

```bash
curl -X POST https://api.emailit.com/v2/tracking-keys/trk_2yHn5Pq2WcR7tY4uNs8KdV1bXj6 \
  -H "Authorization: Bearer $EMAILIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "allowed_origins": ["https://shop.example.com", "https://www.example.com"] }'
```

**Node.js**

```javascript
const res = await fetch('https://api.emailit.com/v2/tracking-keys/trk_2yHn5Pq2WcR7tY4uNs8KdV1bXj6', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.EMAILIT_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ allowed_origins: ['https://shop.example.com', 'https://www.example.com'] }),
});
const trackingKey = await res.json();
```

**Python**

```python
import os, requests

r = requests.post(
    "https://api.emailit.com/v2/tracking-keys/trk_2yHn5Pq2WcR7tY4uNs8KdV1bXj6",
    headers={"Authorization": f"Bearer {os.environ['EMAILIT_API_KEY']}"},
    json={"allowed_origins": ["https://shop.example.com", "https://www.example.com"]},
)
tracking_key = r.json()
```

**PHP**

```php
$client = new GuzzleHttp\Client(['base_uri' => 'https://api.emailit.com/v2/']);

$response = $client->post('tracking-keys/trk_2yHn5Pq2WcR7tY4uNs8KdV1bXj6', [
    'headers' => ['Authorization' => 'Bearer ' . getenv('EMAILIT_API_KEY')],
    'json' => ['allowed_origins' => ['https://shop.example.com', 'https://www.example.com']],
]);
$trackingKey = json_decode($response->getBody(), true);
```

**200**

```json
{
  "object": "tracking_key",
  "id": "trk_2yHn5Pq2WcR7tY4uNs8KdV1bXj6",
  "name": "Online shop",
  "key": "pub_8fK2mQ9xLr4TzW7nB1cV5yH3dJ6sA0pE",
  "allowed_origins": ["https://shop.example.com", "https://www.example.com"],
  "enabled": true,
  "last_used_at": "2026-10-19T09:40:00.000000+00:00",
  "created_at": "2026-10-19T08:05:00.000000+00:00",
  "updated_at": "2026-10-19T10:20:00.000000+00:00"
}
```

---
Source: https://emailit.com/fr/docs/api-reference/tracking-keys/update/

## Lister les clés de suivi — GET /tracking-keys

> Listez les clés de suivi de l’espace de travail pour le script de suivi Emailit, de la plus récente à la plus ancienne.

# Lister les clés de suivi

Renvoie toutes les clés de suivi de l’espace de travail, de la plus récente à la plus ancienne. Un espace de travail en compte 25 au maximum : la liste n’est donc pas paginée. Nécessite une clé API avec la portée `full`.

`GET /tracking-keys`

## Paramètres de requête

- `search` (string): Correspondance insensible à la casse sur une partie du nom.

- `match`, `order`, `direction`: voir [Filtrage et tri](https://emailit.com/fr/docs/api-reference/filtering/).

### Clés de filtre

Les filtres utilisent des paramètres de requête `key.condition=value`, par exemple `enabled.exact=true`. Pour les conditions disponibles selon le type, consultez [Filtrage et tri](/fr/docs/api-reference/filtering/).

| Clé | Type | Remarques |
| --- | --- | --- |
| `name` | chaîne | |
| `enabled` | booléen | |
| `created_at` | date | |
| `last_used_at` | date | |

Clés de tri pour `order` : `name`, `enabled`, `created_at`, `last_used_at`. Par défaut : `created_at`, de la plus récente à la plus ancienne.

## Réponse

- `data` (object[]): Les [objets clé de suivi](/fr/docs/api-reference/tracking-keys/get/), avec la `key` publique de chacun.

**Requête** `GET /tracking-keys`

**cURL**

```bash
curl https://api.emailit.com/v2/tracking-keys \
  -H "Authorization: Bearer $EMAILIT_API_KEY"
```

**Node.js**

```javascript
const res = await fetch('https://api.emailit.com/v2/tracking-keys', {
  headers: { Authorization: `Bearer ${process.env.EMAILIT_API_KEY}` },
});
const { data } = await res.json();
```

**Python**

```python
import os, requests

r = requests.get(
    "https://api.emailit.com/v2/tracking-keys",
    headers={"Authorization": f"Bearer {os.environ['EMAILIT_API_KEY']}"},
)
tracking_keys = r.json()["data"]
```

**PHP**

```php
$client = new GuzzleHttp\Client(['base_uri' => 'https://api.emailit.com/v2/']);

$response = $client->get('tracking-keys', [
    'headers' => ['Authorization' => 'Bearer ' . getenv('EMAILIT_API_KEY')],
]);
$trackingKeys = json_decode($response->getBody(), true)['data'];
```

**200**

```json
{
  "data": [
    {
      "object": "tracking_key",
      "id": "trk_2yHn5Pq2WcR7tY4uNs8KdV1bXj6",
      "name": "Online shop",
      "key": "pub_8fK2mQ9xLr4TzW7nB1cV5yH3dJ6sA0pE",
      "allowed_origins": ["https://shop.example.com", "*.example.com"],
      "enabled": true,
      "last_used_at": "2026-10-19T09:40:00.000000+00:00",
      "created_at": "2026-10-19T08:05:00.000000+00:00",
      "updated_at": "2026-10-19T08:05:00.000000+00:00"
    }
  ]
}
```

---
Source: https://emailit.com/fr/docs/api-reference/tracking-keys/list/

## Supprimer une clé de suivi — DELETE /tracking-keys/{id}

> Supprimez une clé de suivi. Les pages qui l’utilisent encore n’envoient plus d’événements ; les événements déjà enregistrés sont conservés.

# Supprimer une clé de suivi

Supprime une clé de suivi. Nécessite une clé API avec la portée `full`.

Les pages qui chargent encore le script avec cette clé continuent de fonctionner, mais leurs événements sont rejetés et ne sont pas enregistrés. Les événements déjà enregistrés avec la clé sont conservés. Pour arrêter les événements pendant un temps sans modifier vos pages, désactivez plutôt la clé avec [Mettre à jour une clé de suivi](/fr/docs/api-reference/tracking-keys/update/).

`DELETE /tracking-keys/{id}`

## Paramètres de chemin

- `id` (string, obligatoire): L’ID de la clé de suivi (`trk_…`) ou la clé elle-même (`pub_…`).

## Réponse

- `object` (string): Toujours `tracking_key`.

- `id` (string): ID de la clé supprimée.

- `deleted` (boolean): Toujours `true`.

Renvoie `404` si aucune clé de suivi ne correspond.

**Requête** `DELETE /tracking-keys/{id}`

**cURL**

```bash
curl -X DELETE https://api.emailit.com/v2/tracking-keys/trk_2yHn5Pq2WcR7tY4uNs8KdV1bXj6 \
  -H "Authorization: Bearer $EMAILIT_API_KEY"
```

**Node.js**

```javascript
const res = await fetch('https://api.emailit.com/v2/tracking-keys/trk_2yHn5Pq2WcR7tY4uNs8KdV1bXj6', {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${process.env.EMAILIT_API_KEY}` },
});
const result = await res.json();
```

**Python**

```python
import os, requests

r = requests.delete(
    "https://api.emailit.com/v2/tracking-keys/trk_2yHn5Pq2WcR7tY4uNs8KdV1bXj6",
    headers={"Authorization": f"Bearer {os.environ['EMAILIT_API_KEY']}"},
)
result = r.json()
```

**PHP**

```php
$client = new GuzzleHttp\Client(['base_uri' => 'https://api.emailit.com/v2/']);

$response = $client->delete('tracking-keys/trk_2yHn5Pq2WcR7tY4uNs8KdV1bXj6', [
    'headers' => ['Authorization' => 'Bearer ' . getenv('EMAILIT_API_KEY')],
]);
$result = json_decode($response->getBody(), true);
```

**200**

```json
{
  "object": "tracking_key",
  "id": "trk_2yHn5Pq2WcR7tY4uNs8KdV1bXj6",
  "deleted": true
}
```

---
Source: https://emailit.com/fr/docs/api-reference/tracking-keys/delete/
