Tester une campagne

POST /api/v1/campaigns/{campaignId}/test-send Envoie un seul e-mail — la campagne exactement telle qu'elle est rédigée — à l'adresse de votre choix, pour qu'un humain puisse vérifier l'arrivée en boîte de réception et le rendu avant le véritable envoi. C'est le pendant API du bouton « Envoyer un test ».
json
{"success": true, "data": {"campaignId": "…", "email": "you@example.com", "status": "test_sent"}}
Un test consomme un envoi réel. Il part par le même chemin qu'une campagne — même identité d'expéditeur, même jeu de configuration, même objet et même HTML, sans préfixe [TEST] — et compte dans le quota d'envoi sur 24 h. Contrairement à POST /api/v1/render, cet endpoint n'est pas gratuit à appeler en boucle.
Ce qu'un test écrit : rien. Aucune ligne d'envoi n'est créée, donc les compteurs de la campagne, son statut et ses statistiques restent intacts. Deux conséquences en découlent, et c'est pour elles que l'endpoint est honnête sur ses limites :
Dans un envoi réelDans un test
Pixel de suivi des ouverturesAbsent — le pixel est adressé par une ligne d'envoi
Liens réécrits pour les clicsNon réécrits — le suivi des clics est adressé par une ligne d'envoi
Balises de fusion par destinataireDonnées d'exemple de l'aperçu, les mêmes que celles du panneau d'aperçu
Lien de désabonnementUn lien d'aperçu qui ne désabonne personne
Cette dernière ligne compte : la page de désabonnement désabonne dès son chargement. Un test portant le jeton d'un vrai contact désabonnerait ce contact au premier clic — y compris le pré-clic d'un filtre anti-spam. C'est pourquoi un test porte toujours le lien d'aperçu inerte, dans le corps et dans l'en-tête List-Unsubscribe.
ConditionRéponse
draft ou scheduled, tout est autorisé200 — le test a été envoyé
email absent ou mal formé400 — rien n'a été envoyé
aucun lien de désabonnement dans le contenu400 — même vérification que /render, rien n'est envoyé
envoi en masse désactivé sur tout le compte409 — rien n'a été envoyé
organisation non autorisée à envoyer409 — rien n'a été envoyé
adresse sur la liste de suppression de l'organisation409 — rien n'a été envoyé
campagne sending, sent ou failed409 — un test concerne une campagne en préparation
plus de 10 tests au cours de la dernière heure, même utilisateur409 — le plafond est partagé avec l'interface
campagne inconnue, ou d'une autre organisation404
Le plafond est porté par l'utilisateur derrière la clé, pas par l'endpoint. Dix tests par heure, partagés avec le bouton « Envoyer un test » de l'application — appeler l'API ne permet pas de contourner le budget de l'interface.

Autorisation

Rôle dans l'organisationCet endpoint
OWNERAutorisé
ADMINAutorisé
MEMBERRefusé — 403
Une clé porte le rôle que son créateur détient dans cette organisation — jamais un rôle sur AgentsMail lui-même. Voir Clés d'API.

Exemple

bash
curl -X POST -H "x-api-key: $AGENTMAIL_API_KEY" -H "content-type: application/json" \
  "https://www.agentsmail.io/api/v1/campaigns/$CAMPAIGN_ID/test-send" \
  -d '{ "email": "you@example.com" }'

Réponse

  • 200 OK — l'appel a réussi.
  • 401 Unauthorized — clé absente ou invalide, ou son propriétaire a quitté l'organisation.
  • 403 Forbidden — le propriétaire de la clé est member de l'organisation, pas admin.
  • 404 Not Found — aucune ressource de ce type, ou elle appartient à une autre organisation. L'API ne confirme jamais l'existence d'un id à un appelant qui n'y a pas droit.
  • 429 Too Many Requests — plus de 120 requêtes en une minute pour cette clé.

Champs de la réponse

ChampTypeDescription
successbooleanIndique si l'opération a réussi
data.statusstringsent, ou la raison pour laquelle il n'est pas parti

Exemple de réponse

json
{
  "success": true,
  "data": {
    "status": "subscribed"
  }
}

Voir aussi