GET /api/v1/contacts
Les contacts d'une liste, paginés.
listId est obligatoire : une lecture porte toujours sur une seule liste, il n'existe pas de liste de contacts à l'échelle de l'organisation. Une requête sans ce paramètre répond 400. Récupérez vos identifiants de listes avec GET /api/v1/lists — voir Découverte.
tagId attend l'identifiant d'un tag, pas son nom : appelez d'abord GET /api/v1/tags et prenez l'id du tag dont le name vous intéresse.
L'organisation n'est jamais un paramètre. Elle vient de la clé. Un
organizationId passé dans la requête est ignoré — vous ne pouvez jamais lire que votre propre audience. Un listId appartenant à une autre organisation répond 404, pas une page vide.id, email, firstName, lastName, status, listId, list, tags et ses dates createdAt / updatedAt. Rien d'autre — en particulier, le jeton de désabonnement d'un contact n'est jamais exposé par cette API.
Autorisation
| Rôle dans l'organisation | Cet endpoint |
|---|---|
OWNER | Autorisé |
ADMIN | Autorisé |
MEMBER | Autorisé |
Paramètres de requête
| Paramètre | Type | Description |
|---|---|---|
listId | string | Liste à lire. Les contacts portent toujours sur une liste. |
status | string | pending, subscribed, unsubscribed, bounced, complained |
tagId | string | Uniquement les contacts portant ce tag — un identifiant de tag, pas un nom |
search | string | Cherche dans l'e-mail, le prénom ou le nom |
page | number | Vaut 1 par défaut |
limit | number | Vaut 20 par défaut, plafonné à 100 |
Exemple
bash
curl -H "x-api-key: $AGENTMAIL_API_KEY" \
"https://www.agentsmail.io/api/v1/contacts?listId=$LIST_ID&status=subscribed&limit=50"Réponse
200 OK— l'appel a réussi.401 Unauthorized— clé absente ou invalide, ou son propriétaire a quitté l'organisation.429 Too Many Requests— plus de 120 requêtes en une minute pour cette clé.
Champs de la réponse
| Champ | Type | Description |
|---|---|---|
success | boolean | Indique si l'opération a réussi |
data[].id | string | Identifiant unique du contact |
data[].email | string | Son adresse — unique au sein de sa liste |
data[].firstName | string | null |
data[].lastName | string | null |
data[].status | string | pending, subscribed, unsubscribed, bounced, complained |
data[].listId | string | La liste à laquelle il appartient |
data[].list | object | {id, name} de cette liste |
data[].tags | array | {id, name} de chaque tag porté |
data[].createdAt | string | Date de création ISO |
data[].updatedAt | string | Date ISO de la dernière modification |
pagination | object | {total, page, limit, totalPages} |
Exemple de réponse
json
{
"success": true,
"data": [
{
"id": "4d19c0a2",
"email": "ada@example.com",
"firstName": "Ada",
"lastName": "Lovelace",
"status": "subscribed",
"listId": "0b7c51e8",
"list": {
"id": "0b7c51e8",
"name": "Newsletter"
},
"tags": [
{
"id": "7c2ef4b1",
"name": "vip"
}
],
"createdAt": "2026-08-23T10:22:05.000Z",
"updatedAt": "2026-08-23T10:22:05.000Z"
}
],
"pagination": {
"total": 1,
"page": 1,
"limit": 20,
"totalPages": 1
}
}