Référence API
Démarrer un vote public
Valide campagne publique, candidat admissible, quantité et protection navigateur avant le paiement centralisé.
https://api.sparkglim.net/api/public/voteModèle d’accès
- Modèle d’accès
- Accès public avec validation
- Disponibilité documentée
- Implémenté dans le code
La disponibilité est vérifiée dans le code, pas garantie en production.
Ouvrez l’URL de paiement retournée. SparkGlim Server contrôle prix, moyens, vérification et exécution ; le retour navigateur est uniquement une navigation.
Requête
| Nom | Type | Validation |
|---|---|---|
campaign_idObligatoireCampagne existante dans le compte et dans tout périmètre de clé de campagne plus limité. | string | Validation : UUID. |
participant_idObligatoireCandidat choisi dans cette campagne ; approbation et règles sont vérifiées par le serveur. | string | Validation : UUID. |
vote_countObligatoireNombre de votes pour le candidat ; le serveur détermine le prix valide et enregistre les votes terminés. | integer | Validation : 1–100. |
phone_numberObligatoireTéléphone du participant ; les moyens de paiement et règles peuvent exiger un numéro international valide. | string | Validation : Valeur non vide. |
emailFacultatifEmail de contact utilisé par le parcours configuré ; il ne donne jamais accès à lui seul. | string | Validation : Adresse e-mail. |
payment_channelFacultatifPréférence facultative ; seuls les moyens activés pour le pays vendeur, la devise et le marchand sont utilisables. | enum | Validation : Méthode configurée uniquement. |
network_codeFacultatifRéseau mobile configuré lorsque le moyen de paiement choisi l’exige. | string | Validation : Réseau configuré. |
is_appFacultatifContexte existant pour choisir configuration Web ou App ; aucune permission supplémentaire. | boolean | Validation : Contexte du client. |
web_abuse_contextObligatoireDonnées existantes de protection navigateur requises avant paiement public ; elles ne remplacent pas l’autorisation serveur. | object | Validation : Objet strict ; JSON de device_details <=12000 caractères. |
web_abuse_context.device_idObligatoireSignal existant de protection navigateur accepté par le schéma actuel de paiement public. | string | Validation : 12–160. |
web_abuse_context.device_fingerprintObligatoireSignal existant de protection navigateur accepté par le schéma actuel de paiement public. | string | Validation : 12–160. |
web_abuse_context.browser_signatureFacultatifSignal existant de protection navigateur accepté par le schéma actuel de paiement public. | string|null | Validation : 12–160. |
web_abuse_context.hardware_signatureFacultatifSignal existant de protection navigateur accepté par le schéma actuel de paiement public. | string|null | Validation : 12–160. |
web_abuse_context.device_detailsFacultatifSignal existant de protection navigateur accepté par le schéma actuel de paiement public. | object | Validation : Objet JSON. |
web_abuse_context.client_pattern_detectedFacultatifSignal existant de protection navigateur accepté par le schéma actuel de paiement public. | boolean | Validation : Protection d’appareil existante. |
client_attempt_idFacultatifIdentifiant stable d’opération utilisé pour retrouver une tentative et rejeter les reprises incompatibles. | string | Validation : Identité d’opération normalisée et stable. |
return_pathFacultatifDestination relative de retour sur le site actuel vérifié après paiement centralisé. | string | Validation : Chemin relatif de même origine ; sans // ni barre oblique inverse. |
Requête
Les exemples décrivent le contrat et ne sont pas exécutés. Utilisez des données de test autorisées ; ne saisissez jamais de secret réel ici.
POST /api/public/vote HTTP/1.1
Host: api.sparkglim.net
Content-Type: application/json
{
"campaign_id": "11111111-1111-4111-8111-111111111111",
"participant_id": "33333333-3333-4333-8333-333333333333",
"vote_count": 1,
"phone_number": "+233200000000",
"web_abuse_context": {
"device_id": "<EXISTING_DEVICE_ID>",
"device_fingerprint": "<EXISTING_DEVICE_FINGERPRINT>"
},
"client_attempt_id": "example_stable_attempt_0001"
}Réponse
{
"success": true,
"data": {
"id": "11111111-1111-4111-8111-111111111111",
"status": "pending"
}
}{
"success": false,
"error": "<ERROR_MESSAGE>"
}Validation, permissions, données indisponibles et pannes utilisent le statut HTTP et l’erreur du gestionnaire.
Limites et tentatives
Limite serveur par défaut : 100 requêtes par IP sur 60 secondes. Des contrôles spécifiques s’appliquent.
Compatibilité du code
Les opérations autorisées nécessitent des tests propres au compte.
server/src/api/router.tsserver/src/api/routes/public.ts