POST /api/v1/campaigns/{campaignId}/schedule
Réserve l'envoi d'une campagne draft pour un instant futur, et répond 202. Appelé sur une
campagne déjà scheduled, il la déplace au nouvel instant. Cet appel n'envoie rien : la
campagne part d'elle-même à l'heure réservée.
Autorisation
| Rôle dans l'organisation | Cet endpoint |
|---|---|
OWNER | Autorisé |
ADMIN | Autorisé |
MEMBER | Refusé — 403 |
Paramètres de chemin
| Paramètre | Type | Description |
|---|---|---|
campaignId | string | Identifiant unique d'une campagne |
Corps de la requête
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
scheduledAt | string | oui | Instant ISO 8601 avec un décalage explicite, au moins une minute dans le futur |
json
{"scheduledAt": "2026-08-12T07:00:00Z"}Exemple
bash
curl -X POST -H "x-api-key: $AGENTMAIL_API_KEY" \
-H "Content-Type: application/json" \
-d '{"scheduledAt": "2026-08-12T07:00:00Z"}' \
"https://www.agentsmail.io/api/v1/campaigns/$CAMPAIGN_ID/schedule"Réponse
202 Accepted— la campagne estscheduledpour l'instant renvoyé dansscheduledAt.400 Bad Request—scheduledAtest absent, sans décalage, passé ou à moins d'une minute (detailsprécise le problème) ; ou le contenu n'a pas de lien de désabonnement.401 Unauthorized— clé absente ou invalide, ou son propriétaire a quitté l'organisation.403 Forbidden— le propriétaire de la clé estmemberde l'organisation, pasadmin.404 Not Found— aucune campagne 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.409 Conflict— le domaine d'envoi n'est pas encore vérifié, le solde ne couvre pas les destinataires de la campagne, sa liste a été retirée, ou la campagne estpaused,sending,sentoufailed. Rien n'est réservé.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.campaignId | string | La campagne programmée |
data.status | string | Toujours scheduled |
data.scheduledAt | string | L'instant réellement enregistré, en UTC, arrondi à la minute |
Exemple de réponse
json
{
"success": true,
"data": {
"campaignId": "6c6c6c6c-5555-4aaa-8bbb-999900001111",
"status": "scheduled",
"scheduledAt": "2026-08-12T07:00:00.000Z"
}
}Notes
Une date sans fuseau horaire est refusée, jamais interprétée comme UTC.
2026-08-12T09:00:00
répond 400 : l'API ne devine pas un décalage que vous n'avez pas écrit. Écrivez
2026-08-12T07:00:00Z, ou 2026-08-12T09:00:00+02:00 — les deux désignent le même instant.- La programmation est conservée à la minute près : les secondes transmises sont ignorées.
Lisez
scheduledAtdans la réponse pour connaître le départ exact. - Rappeler l'endpoint sur une campagne
scheduleddéplace le départ ; l'ancien horaire ne vaut plus. Une campagne n'a jamais plus d'un départ. - Une campagne
pausedrépond409: reprenez-la dans l'application, ou remettez-la en brouillon avec Déprogrammer une campagne puis reprogrammez-la. - Pour envoyer tout de suite, utilisez Envoyer une campagne.
Ne programmez jamais sans l'accord humain explicite pour cette campagne précise. Une campagne
programmée part d'elle-même ; l'accord pour un envoi ne couvre jamais le suivant.