# Adresses bloquées API

> Consultez et gérez les adresses auxquelles Emailit n’enverra pas d’e-mails.

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

## Créer un blocage — POST /suppressions

> Ajoutez une adresse à la liste d’adresses bloquées, définitivement ou jusqu’à la date de votre choix, pour qu’Emailit cesse de lui envoyer des e-mails.

# Créer un blocage

Ajoute une adresse à la liste d’adresses bloquées de votre espace de travail. Les e-mails API et SMTP destinés à une adresse faisant l’objet d’un blocage `recipient` reçoivent le statut `suppressed` au lieu d’être envoyés, et les campagnes ignorent les adresses bloquées. Nécessite une clé API de portée `full`.

`POST /suppressions`

## Corps de la requête

- `email` (string, obligatoire): Adresse à bloquer. Emailit l’enregistre en minuscules.

- `type` (string): Type de blocage. Par défaut : `recipient`. Emailit utilise `recipient`, `bounce`, `complaint` et `unsubscribe`. Seuls les blocages `recipient` arrêtent les e-mails envoyés via l’API et SMTP. Les campagnes ignorent toute adresse faisant l’objet d’un blocage actif, quel qu’en soit le type. Une adresse peut avoir un blocage par type.

- `reason` (string): Note en texte libre, par exemple `manual` ou `Asked to stop receiving invoices`.

- `keep_until` (string | number | null): Date d’expiration du blocage. Accepte un horodatage ISO 8601 (`2026-12-31T00:00:00Z`), un horodatage Unix en secondes (`1798675200`) ou une expression en langage naturel comme `in 30 days` ou `tomorrow at 9am`. Omettez-le ou envoyez `null` pour un blocage permanent. Passé cette date, le blocage n’empêche plus les envois. Il reste dans la liste jusqu’à ce que vous le supprimiez.

## Réponse

Renvoie `201 Created` avec l’objet blocage. Emailit envoie aussi l’événement webhook [`suppression.created`](/fr/docs/webhooks/events/suppression/created/).

| Statut | Cas |
| --- | --- |
| `400` | `email` n’est pas une adresse valide ou `keep_until` ne peut pas être analysé (le corps contient une chaîne `error`), ou `email` est absent (erreur de validation standard). |
| `409` | L’adresse fait déjà l’objet d’un blocage de ce type. Le corps inclut le blocage existant dans `existing`. |

**Requête** `POST /suppressions`

**Node.js**

```javascript
import { Emailit } from '@emailit/node';
const emailit = new Emailit('your_api_key');

const suppression = await emailit.suppressions.create({
    email: 'ada@example.com',
    reason: 'manual'
});
```

**Python**

```python
from emailit import EmailitClient
client = EmailitClient("your_api_key")

suppression = client.suppressions.create({
    "email": "ada@example.com",
    "reason": "manual"
})
```

**PHP**

```php
$emailit = Emailit::client('your_api_key');

$suppression = $emailit->suppressions()->create([
    'email' => 'ada@example.com',
    'reason' => 'manual'
]);
```

**Ruby**

```ruby
require "emailit"
client = Emailit::EmailitClient.new("your_api_key")

suppression = client.suppressions.create(
    email: "ada@example.com",
    reason: "manual"
)
```

**Go**

```go
import "github.com/emailit/emailit-go/v2"
client := emailit.NewClient("your_api_key")

suppression, err := client.Suppressions.Create(&emailit.CreateSuppressionRequest{
    Email: "ada@example.com",
    Reason: "manual",
})
```

**Rust**

```rust
use emailit::Emailit;
let emailit = Emailit::new("your_api_key");

let suppression = emailit.suppressions.create(
    emailit::types::CreateSuppressionParams::new("ada@example.com")
        .with_reason("manual")
).await?;
```

**Java**

```java
import com.emailit.*;
import com.emailit.params.*;
EmailitClient emailit = new EmailitClient("your_api_key");

EmailitObject suppression = emailit.suppressions().create(
    SuppressionCreateParams.builder()
        .setEmail("ada@example.com")
        .setReason("manual")
        .build()
);
```

**.NET**

```csharp
using Emailit;
var emailit = new EmailitClient("your_api_key");

var suppression = emailit.Suppressions.Create(new SuppressionCreateOptions {
    Email = "ada@example.com",
    Reason = "manual"
});
```

**Laravel**

```php
use Emailit\Laravel\Facades\Emailit;

$suppression = Emailit::suppressions()->create([
    'email' => 'ada@example.com',
    'reason' => 'manual'
]);
```

**cURL**

```bash
curl -X POST https://api.emailit.com/v2/suppressions \
  -H "Authorization: Bearer your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "ada@example.com",
    "reason": "manual"
  }'
```

**201**

```json
{
  "object": "suppression",
  "id": "sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e",
  "type": "recipient",
  "email": "ada@example.com",
  "reason": "manual",
  "created_at": "2026-10-01T09:30:12.481000+00:00",
  "keep_until": null
}
```

**400**

```json
{
  "error": "Invalid keep_until format. Accepts ISO 8601, Unix timestamp, or natural language like \"tomorrow at 9am\"."
}
```

**409**

```json
{
  "error": "Suppression already exists for this email and type",
  "existing": {
    "object": "suppression",
    "id": "sup_2xKz0Pq5Rm8Nw2Tb7YdLc4HsE1a",
    "type": "recipient",
    "email": "ada@example.com",
    "reason": "too many bounces",
    "created_at": "2026-09-12T16:04:51.207000+00:00",
    "keep_until": null
  }
}
```

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

## Récupérer un blocage — GET /suppressions/{id}

> Récupérez un blocage par son ID ou par l’adresse e-mail bloquée, avec son type, son motif et sa date d’expiration.

# Récupérer un blocage

Renvoie un blocage, recherché par ID ou par adresse e-mail. Nécessite une clé API de portée `full`.

`GET /suppressions/:id`

## Paramètres de chemin

- `id` (string, obligatoire): ID du blocage (`sup_…`) ou adresse bloquée. Encodez l’adresse pour l’URL, par exemple `ada%40example.com`. Une adresse peut avoir un blocage par type. Lorsque vous recherchez par adresse, Emailit renvoie l’un d’eux ; utilisez l’ID pour cibler un type précis.

## Réponse

Renvoie `200 OK` avec l’objet blocage. Un blocage dont la date `keep_until` est passée n’empêche plus l’envoi.

Renvoie `400` si `id` n’est ni un ID `sup_` ni une adresse e-mail valide, et `404` si aucun blocage ne correspond.

**Requête** `GET /suppressions/{id}`

**Node.js**

```javascript
import { Emailit } from '@emailit/node';
const emailit = new Emailit('your_api_key');

const suppression = await emailit.suppressions.get('sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e');
```

**Python**

```python
from emailit import EmailitClient
client = EmailitClient("your_api_key")

suppression = client.suppressions.get("sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e")
```

**PHP**

```php
$emailit = Emailit::client('your_api_key');

$suppression = $emailit->suppressions()->get('sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e');
```

**Ruby**

```ruby
require "emailit"
client = Emailit::EmailitClient.new("your_api_key")

suppression = client.suppressions.get("sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e")
```

**Go**

```go
import "github.com/emailit/emailit-go/v2"
client := emailit.NewClient("your_api_key")

suppression, err := client.Suppressions.Get("sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e")
```

**Rust**

```rust
use emailit::Emailit;
let emailit = Emailit::new("your_api_key");

let suppression = emailit.suppressions.get("sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e").await?;
```

**Java**

```java
import com.emailit.*;
import com.emailit.params.*;
EmailitClient emailit = new EmailitClient("your_api_key");

EmailitObject suppression = emailit.suppressions().get("sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e");
```

**.NET**

```csharp
using Emailit;
var emailit = new EmailitClient("your_api_key");

var suppression = emailit.Suppressions.Get("sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e");
```

**Laravel**

```php
use Emailit\Laravel\Facades\Emailit;

$suppression = Emailit::suppressions()->get('sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e');
```

**cURL**

```bash
curl https://api.emailit.com/v2/suppressions/sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e \
  -H "Authorization: Bearer your_api_key"
```

**200**

```json
{
  "object": "suppression",
  "id": "sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e",
  "type": "recipient",
  "email": "ada@example.com",
  "reason": "too many bounces",
  "created_at": "2026-10-01T09:30:12.481000+00:00",
  "keep_until": null
}
```

**400**

```json
{
  "error": "Invalid identifier. Must be a suppression ID (sup_xxx) or valid email address."
}
```

**404**

```json
{
  "error": "Suppression not found"
}
```

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

## Mettre à jour un blocage — POST /suppressions/{id}

> Modifiez l’adresse, le type, le motif ou la date d’expiration d’un blocage, recherché par son ID ou par l’adresse bloquée.

# Mettre à jour un blocage

Met à jour un blocage. N’envoyez que les champs à modifier ; au moins un est obligatoire. Nécessite une clé API de portée `full`.

`POST /suppressions/:id`

## Paramètres de chemin

- `id` (string, obligatoire): ID du blocage (`sup_…`) ou adresse bloquée, encodée pour l’URL (`ada%40example.com`). Lorsqu’une adresse fait l’objet de blocages de plusieurs types, utilisez l’ID.

## Corps de la requête

- `email` (string): Nouvelle adresse. Enregistrée en minuscules.

- `type` (string): Nouveau type : `recipient`, `bounce`, `complaint` ou `unsubscribe`. Seuls les blocages `recipient` arrêtent les envois via l’API et SMTP.

- `reason` (string): Nouveau motif, en texte libre.

- `keep_until` (string | number | null): Nouvelle date d’expiration, dans les mêmes formats qu’à la [création](/fr/docs/api-reference/suppressions/create/) : ISO 8601, horodatage Unix en secondes ou langage naturel comme `in 30 days`. Envoyez `null` pour rendre le blocage permanent.

## Réponse

Renvoie `200 OK` avec le blocage mis à jour. Emailit envoie aussi l’événement webhook [`suppression.updated`](/fr/docs/webhooks/events/suppression/updated/).

| Statut | Cas |
| --- | --- |
| `400` | Le corps ne contient aucun des champs ci-dessus, `email` n’est pas valide ou `keep_until` ne peut pas être analysé. |
| `404` | Aucun blocage ne correspond à `id`. |
| `409` | Un autre blocage existe déjà pour la nouvelle adresse et le nouveau type. |

**Requête** `POST /suppressions/{id}`

**Node.js**

```javascript
import { Emailit } from '@emailit/node';
const emailit = new Emailit('your_api_key');

const suppression = await emailit.suppressions.update('sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e', {
    reason: 'Asked to pause invoices until January'
});
```

**Python**

```python
from emailit import EmailitClient
client = EmailitClient("your_api_key")

suppression = client.suppressions.update("sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e", {
    "reason": "Asked to pause invoices until January"
})
```

**PHP**

```php
$emailit = Emailit::client('your_api_key');

$suppression = $emailit->suppressions()->update('sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e', [
    'reason' => 'Asked to pause invoices until January'
]);
```

**Ruby**

```ruby
require "emailit"
client = Emailit::EmailitClient.new("your_api_key")

suppression = client.suppressions.update("sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e", reason: "Asked to pause invoices until January")
```

**Go**

```go
import "github.com/emailit/emailit-go/v2"
client := emailit.NewClient("your_api_key")

suppression, err := client.Suppressions.Update("sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e", &emailit.UpdateSuppressionRequest{
    Reason: "Asked to pause invoices until January",
})
```

**Rust**

```rust
use emailit::Emailit;
let emailit = Emailit::new("your_api_key");

let suppression = emailit.suppressions.update(
    "sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e",
    emailit::types::UpdateSuppressionParams {
        reason: Some("Asked to pause invoices until January".into()),
        ..Default::default()
    }
).await?;
```

**Java**

```java
import com.emailit.*;
import com.emailit.params.*;
EmailitClient emailit = new EmailitClient("your_api_key");

EmailitObject suppression = emailit.suppressions().update("sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e",
    SuppressionUpdateParams.builder()
        .setReason("Asked to pause invoices until January")
        .build()
);
```

**.NET**

```csharp
using Emailit;
var emailit = new EmailitClient("your_api_key");

var suppression = emailit.Suppressions.Update("sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e",
    new SuppressionUpdateOptions { Reason = "Asked to pause invoices until January" });
```

**Laravel**

```php
use Emailit\Laravel\Facades\Emailit;

$suppression = Emailit::suppressions()->update('sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e', [
    'reason' => 'Asked to pause invoices until January'
]);
```

**cURL**

```bash
curl -X POST https://api.emailit.com/v2/suppressions/sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e \
  -H "Authorization: Bearer your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"reason": "Asked to pause invoices until January"}'
```

**200**

```json
{
  "object": "suppression",
  "id": "sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e",
  "type": "recipient",
  "email": "ada@example.com",
  "reason": "Asked to pause invoices until January",
  "created_at": "2026-10-01T09:30:12.481000+00:00",
  "keep_until": "2027-01-01T00:00:00.000000+00:00"
}
```

**400**

```json
{
  "error": "No valid fields provided for update. Provide at least one of: email, type, reason, keep_until"
}
```

**404**

```json
{
  "error": "Suppression not found"
}
```

**409**

```json
{
  "error": "Another suppression already exists for this email and type combination"
}
```

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

## Lister les blocages — GET /suppressions

> Listez les adresses bloquées de votre espace de travail, avec recherche, filtres, tri et pagination par pages.

# Lister les blocages

Renvoie les blocages de votre espace de travail, du plus récent au plus ancien. La liste inclut les blocages qu’Emailit ajoute automatiquement après des rebonds et des plaintes, ainsi que les blocages expirés dont la date `keep_until` est passée. Nécessite une clé API de portée `full`.

`GET /suppressions`

## Paramètres de requête

- `page` (integer): Numéro de page, à partir de `1`. Par défaut : `1`.

- `limit` (integer): Nombre de blocages par page, de `1` à `100`. Par défaut : `10`.

- `search` (string): Recherche insensible à la casse sur l’adresse ou le motif. `q` fonctionne comme alias.

- `match` (string): `all` (par défaut) exige que tous les filtres `key.condition` correspondent. `or` accepte n’importe lequel d’entre eux. Consultez [Filtrage et tri](/fr/docs/api-reference/filtering/).

- `sort` (string): Clé de tri : `email`, `reason`, `type` ou `created_at` (par défaut).

- `order` (string): Sens du tri : `asc` ou `desc` (par défaut).

## Filtres

Clés de filtre et de tri : voir [Filtrage et tri](https://emailit.com/fr/docs/api-reference/filtering/).

Sur cet endpoint, `order` n’accepte que `asc` ou `desc`. Transmettez la clé de tri dans `sort`, par exemple `sort=email&order=asc`.

## Réponse

Renvoie `200 OK` avec les blocages dans `data`, ainsi que `next_page_url` et `previous_page_url` (`null` lorsqu’il n’y a pas de page suivante ou précédente). Les URL de page conservent votre recherche, vos filtres et votre tri.

**Requête** `GET /suppressions`

**Node.js**

```javascript
import { Emailit } from '@emailit/node';
const emailit = new Emailit('your_api_key');

const suppressions = await emailit.suppressions.list();
```

**Python**

```python
from emailit import EmailitClient
client = EmailitClient("your_api_key")

suppressions = client.suppressions.list()
```

**PHP**

```php
$emailit = Emailit::client('your_api_key');

$suppressions = $emailit->suppressions()->list();
```

**Ruby**

```ruby
require "emailit"
client = Emailit::EmailitClient.new("your_api_key")

suppressions = client.suppressions.list
```

**Go**

```go
import "github.com/emailit/emailit-go/v2"
client := emailit.NewClient("your_api_key")

suppressions, err := client.Suppressions.List(nil)
```

**Rust**

```rust
use emailit::Emailit;
let emailit = Emailit::new("your_api_key");

let suppressions = emailit.suppressions.list(None).await?;
```

**Java**

```java
import com.emailit.*;
import com.emailit.params.*;
EmailitClient emailit = new EmailitClient("your_api_key");

EmailitObject suppressions = emailit.suppressions().list();
```

**.NET**

```csharp
using Emailit;
var emailit = new EmailitClient("your_api_key");

var suppressions = emailit.Suppressions.List();
```

**Laravel**

```php
use Emailit\Laravel\Facades\Emailit;

$suppressions = Emailit::suppressions()->list();
```

**cURL**

```bash
curl https://api.emailit.com/v2/suppressions \
  -H "Authorization: Bearer your_api_key"
```

**200**

```json
{
  "data": [
    {
      "object": "suppression",
      "id": "sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e",
      "type": "recipient",
      "email": "ada@example.com",
      "reason": "too many bounces",
      "created_at": "2026-10-01T09:30:12.481000+00:00",
      "keep_until": null
    },
    {
      "object": "suppression",
      "id": "sup_2xKz0Pq5Rm8Nw2Tb7YdLc4HsE1a",
      "type": "complaint",
      "email": "grace@example.com",
      "reason": "complaint",
      "created_at": "2026-09-28T13:17:40.912000+00:00",
      "keep_until": null
    }
  ],
  "next_page_url": "/v2/suppressions?limit=10&page=2",
  "previous_page_url": null
}
```

**401**

```json
{
  "statusCode": 401,
  "error": "Unauthorized",
  "message": "Invalid API key"
}
```

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

## Supprimer un blocage — DELETE /suppressions/{id}

> Supprimez un blocage par son ID ou par l’adresse bloquée pour qu’Emailit puisse de nouveau envoyer des e-mails à cette adresse.

# Supprimer un blocage

Supprime un blocage pour que l’adresse puisse de nouveau recevoir des e-mails. Nécessite une clé API de portée `full`.

`DELETE /suppressions/:id`

## Paramètres de chemin

- `id` (string, obligatoire): ID du blocage (`sup_…`) ou adresse bloquée, encodée pour l’URL (`ada%40example.com`). Une requête par adresse supprime un seul blocage. Si l’adresse fait l’objet de blocages de plusieurs types, supprimez chacun par son ID, ou répétez la requête jusqu’à ce qu’elle renvoie `404`.

## Réponse

Renvoie `200 OK` avec l’`id` et l’`email` du blocage supprimé, et `deleted: true`. Emailit envoie aussi l’événement webhook [`suppression.deleted`](/fr/docs/webhooks/events/suppression/deleted/).

Renvoie `400` si `id` n’est ni un ID `sup_` ni une adresse e-mail valide, et `404` si aucun blocage ne correspond.

**Requête** `DELETE /suppressions/{id}`

**Node.js**

```javascript
import { Emailit } from '@emailit/node';
const emailit = new Emailit('your_api_key');

await emailit.suppressions.delete('sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e');
```

**Python**

```python
from emailit import EmailitClient
client = EmailitClient("your_api_key")

client.suppressions.delete("sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e")
```

**PHP**

```php
$emailit = Emailit::client('your_api_key');

$emailit->suppressions()->delete('sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e');
```

**Ruby**

```ruby
require "emailit"
client = Emailit::EmailitClient.new("your_api_key")

client.suppressions.delete("sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e")
```

**Go**

```go
import "github.com/emailit/emailit-go/v2"
client := emailit.NewClient("your_api_key")

err := client.Suppressions.Delete("sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e")
```

**Rust**

```rust
use emailit::Emailit;
let emailit = Emailit::new("your_api_key");

emailit.suppressions.delete("sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e").await?;
```

**Java**

```java
import com.emailit.*;
import com.emailit.params.*;
EmailitClient emailit = new EmailitClient("your_api_key");

emailit.suppressions().delete("sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e");
```

**.NET**

```csharp
using Emailit;
var emailit = new EmailitClient("your_api_key");

emailit.Suppressions.Delete("sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e");
```

**Laravel**

```php
use Emailit\Laravel\Facades\Emailit;

Emailit::suppressions()->delete('sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e');
```

**cURL**

```bash
curl -X DELETE https://api.emailit.com/v2/suppressions/sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e \
  -H "Authorization: Bearer your_api_key"
```

**200**

```json
{
  "object": "suppression",
  "id": "sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e",
  "email": "ada@example.com",
  "deleted": true
}
```

**400**

```json
{
  "error": "Invalid identifier. Must be a suppression ID (sup_xxx) or valid email address."
}
```

**404**

```json
{
  "error": "Suppression not found"
}
```

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