POST /api/v1/topics
Crée un sujet. Répond 201 avec le sujet créé — son id est le topicId que vous attachez à une campagne ou à une séquence.
Un nom déjà pris — sans tenir compte de la casse, donc Freelancing entre en collision avec freelancing — répond 409.
Autorisation
| Rôle dans l'organisation | Cet endpoint |
|---|---|
OWNER | Autorisé |
ADMIN | Autorisé |
MEMBER | Refusé — 403 |
Corps de la requête
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
name | string | oui | De 1 à 50 caractères |
json
{"name": "freelancing"}Exemple
bash
curl -X POST -H "x-api-key: $AGENTMAIL_API_KEY" -H "content-type: application/json" \
-d '{"name":"freelancing"}' \
"https://www.agentsmail.io/api/v1/topics"Réponse
201 Created— le sujet créé.400 Bad Request— le nom est absent, vide ou dépasse 50 caractères ;detailsporte les erreurs champ par champ.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.409 Conflict— un autre sujet porte déjà ce nom, casse ignorée. Rien n'a été créé ; listez les sujets et réutilisez l'identifiant existant.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 sujet |
data.name | string | Nom du sujet, unique dans l'organisation |
data.createdAt | string | Date de création ISO |
data.updatedAt | string | Date ISO de la dernière modification |
Exemple de réponse
json
{
"success": true,
"data": {
"id": "7c2e4b19",
"name": "freelancing",
"createdAt": "2026-08-23T10:22:05.000Z",
"updatedAt": "2026-08-23T10:22:05.000Z"
}
}Recette pour agent
Réutilisez avant de créer — un second appel pour un nom déjà pris ne vous rapporte qu'un409 :
js
const existing = await list('/api/v1/topics')
const topic =
existing.data.find((t) => t.name.toLowerCase() === 'freelancing') ??
(await post('/api/v1/topics', {name: 'freelancing'})).data
await post('/api/v1/campaigns', {
name: 'Freelance news',
subject: 'This month for freelancers',
templateId,
listId,
topicId: topic.id,
})Remarques
- Créer un sujet ne change rien en soi. Il commence à compter le jour où une campagne ou une séquence le porte.