Campagnes (Votez)
Gestion complète des campagnes de vote. Module requis : Votez.
Pour le parcours complet, voir le guide de workflow de vote.
Liste des campagnes
GET /b2b/v1/campagnes
Filtres (query string)
| Nom | Type | Description |
|---|---|---|
etat | string | Filtre par état (Brouillon, Planifie, VoteOuvert, Termine, Archive) |
titre | string | Recherche partielle (contains) |
ouvertureApres | DateTime | OuvertureDuVoteUtc ≥ ouvertureApres |
fermetureAvant | DateTime | FermetureDuVoteUtc ≤ fermetureAvant |
Réponse
[
{
"id": "...",
"titre": "Vote d'acceptation 2026",
"slug": "vote-acceptation-2026",
"ouvertureDuVoteUtc": "2026-05-01T14:00:00Z",
"fermetureDuVoteUtc": "2026-05-08T14:00:00Z",
"etat": "Planifie",
"estPublie": true,
"estArchive": false,
"nombreVotants": 1247,
"nombreQuestions": 3,
"dateCreationUtc": "2026-04-20T10:00:00Z",
"dateModificationUtc": "2026-04-24T14:30:00Z"
}
]
Obtenir une campagne
GET /b2b/v1/campagnes/{id}
| Nom | Emplacement | Type | Description |
|---|---|---|---|
id | Path | Guid | Identifiant de la campagne |
Statistiques de campagne
GET /b2b/v1/campagnes/{id}/stats
| Nom | Emplacement | Type | Description |
|---|---|---|---|
id | Path | Guid | Identifiant de la campagne |
syndicatIdExterne | Query | string? | Limite les stats au syndicat dont l'identifiant externe correspond (optionnel) |
employeurIdentifiantExterne | Query | string? | Limite les stats à l'employeur dont l'identifiant externe correspond (optionnel) |
Les deux filtres sont combinés par ET logique (AND) : si les deux sont fournis, seuls les votants appartenant au syndicat et à l'employeur indiqués sont comptabilisés. Un identifiant inconnu retourne des stats à zéro (et non une erreur 404), car la campagne elle-même existe.
Les filtres s'appliquent uniformément à tous les compteurs : totaux de participation (TotalVotants, TotalVotantsAvecDroitDeVote, VotantsAyantVote) et résultats par option (Questions[].Options[].Votes, PoidsTotal, Pourcentage). Les chiffres retournés reflètent donc toujours la même population filtrée. Les valeurs de vote sont issues d'un instantané pris au moment du vote (Vote.SyndicatId / Vote.EmployeurId), ce qui préserve l'anonymat.
Réponse
{
"campagneId": "...",
"titre": "Vote d'acceptation 2026",
"etat": "VoteOuvert",
"totalVotants": 1247,
"totalVotantsAvecDroitDeVote": 1235,
"votantsAyantVote": 892,
"tauxParticipation": 72.23,
"resultatsVisibles": false,
"questions": [ /* B2BQuestionStatsItem */ ]
}
resultatsVisibles = falsependant la campagne tant que l'indicateur de fonctionnalité « affichage des résultats actifs » est désactivé. Les détails par option n'apparaissent qu'aprèsFermetureDuVoteUtc.
Exemples de filtrage
Stats globales (aucun filtre) :
GET /b2b/v1/campagnes/{id}/stats
Stats pour un syndicat uniquement :
GET /b2b/v1/campagnes/{id}/stats?syndicatIdExterne=SYND001
Stats pour un employeur uniquement :
GET /b2b/v1/campagnes/{id}/stats?employeurIdentifiantExterne=EMP-MTL
Stats croisées syndicat + employeur :
GET /b2b/v1/campagnes/{id}/stats?syndicatIdExterne=SYND001&employeurIdentifiantExterne=EMP-MTL
Créer une campagne
POST /b2b/v1/campagnes
Corps de la requête
{
"titre": "Vote d'acceptation — Convention 2026",
"ouvertureDuVoteUtc": "2026-05-01T14:00:00Z",
"fermetureDuVoteUtc": "2026-05-08T14:00:00Z",
"textePageAccueil": "<p>Bienvenue...</p>",
"libelleAbstention": "Je m'abstiens",
"ordreReponsesAleatoire": false
}
Réponse
"3fa85f64-5717-4562-b3fc-2c963f66afa6"
L'identifiant de la campagne créée.
Erreurs possibles
| Code | HTTP | Signification |
|---|---|---|
Campagne.OuvertureVoteApresFermeture | 400 | ouvertureDuVoteUtc après fermetureDuVoteUtc |
Campagne.SlugDejaUtilise | 409 | Le slug généré à partir du titre est déjà utilisé |
Campagne.NomDejaUtilise | 409 | Une campagne porte déjà ce titre |
Modifier une campagne
PUT /b2b/v1/campagnes/{id}
Les modifications structurelles (questions, options, ordre) sont gelées une fois la campagne publiée.
Supprimer une campagne
DELETE /b2b/v1/campagnes/{id}
Erreurs possibles
| Code | HTTP | Signification |
|---|---|---|
Campagne.SupprimerAvecVotes | 409 | Des votes ont été enregistrés — suppression bloquée |
Publier une campagne
POST /b2b/v1/campagnes/{id}/publier
Verrouille la structure et expose la campagne aux votants.
Erreurs possibles
| Code | HTTP | Signification |
|---|---|---|
Campagne.AucuneQuestion | 400 | La campagne doit avoir au moins une question |
Campagne.TransitionNonPermise | 400 | L'état courant ne permet pas la publication |
Dépublier une campagne
POST /b2b/v1/campagnes/{id}/depublier
Possible uniquement si aucun vote n'a été enregistré.
Erreurs possibles
| Code | HTTP | Signification |
|---|---|---|
Campagne.DepublierAvecVotes | 400 | Des votes ont été enregistrés — dépublication bloquée |
Voir aussi
ICampagnesClient— client SDK .NET- Questions · Votants · Liste électorale
- Guide — workflow de vote