API Reference
Achats
Enregistrer et suivre les achats liés aux participations au concours
Achats
Suivez les achats effectués par les participants au concours. Les achats peuvent attribuer des points aux participations selon la configuration de suivi des achats de votre concours.
Enregistrer un achat
/api/v1/contests/:contestId/purchasesEnregistrez un achat pour un participant au concours. Le participant se verra attribuer des points selon les paramètres de suivi des achats du concours. Les achats en double (même orderId) sont détectés et ne rapporteront pas de points deux fois.
Paramètres de chemin
contestIdstring required L'identifiant unique du concours
Corps de la requête
emailstring required Adresse email de l'acheteur (doit correspondre à une participation existante)
orderIdstring required Identifiant unique de la commande dans votre système
amountnumber required Montant de l'achat (doit être supérieur à 0)
currencystringCode de la devise (par défaut : 'USD')
Requête
curl -X POST https://blitzrocket.com/api/v1/contests/clx1abc123/purchases \
-H "x-api-key: your_private_key_here" \
-H "Content-Type: application/json" \
-d '{
"email": "jane@example.com",
"orderId": "order-12345",
"amount": 49.99,
"currency": "USD"
}'
Réponse (201 Créé)
{
"success": true,
"data": {
"purchaseId": "purchase_xyz789",
"entryId": "entry_abc123",
"pointsAwarded": 50,
"alreadyExists": false,
"message": "Achat enregistré avec succès"
}
}
Réponse (200 - Doublon)
Si un achat avec le même orderId existe déjà, l'API retourne un statut 200 pour indiquer qu'il a déjà été traité :
{
"success": true,
"data": {
"purchaseId": "purchase_xyz789",
"entryId": "entry_abc123",
"pointsAwarded": 0,
"alreadyExists": true,
"message": "Achat déjà enregistré"
}
}
Champs de réponse
purchaseIdstringIdentifiant unique de l'enregistrement de l'achat
entryIdstringLa participation à laquelle l'achat est associé
pointsAwardednumberPoints attribués pour cet achat (0 si doublon)
alreadyExistsbooleanIndique si cet achat a déjà été enregistré
messagestringMessage d'état lisible par un humain
Réponses d'erreur
| Statut | Erreur | Description |
|---|---|---|
400 | Corps de requête invalide | Email, orderId ou montant manquant ou invalide |
400 | Le montant doit être positif | La valeur du montant doit être supérieure à 0 |
403 | Clé privée requise | Ce point de terminaison nécessite une clé API privée |
404 | Concours non trouvé | Aucun concours n'existe avec l'ID donné |
Exemple d'intégration
Voici un exemple complet d'intégration du suivi des achats avec un webhook Shopify :
app.post("/webhooks/shopify/order-created", async (req, res) => {
const order = req.body;
try {
const response = await fetch(
`https://blitzrocket.com/api/v1/contests/${CONTEST_ID}/purchases`,
{
method: "POST",
headers: {
"x-api-key": process.env.BLITZROCKET_PRIVATE_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
email: order.email,
orderId: order.id.toString(),
amount: parseFloat(order.total_price),
currency: order.currency,
}),
}
);
const data = await response.json();
console.log("Achat suivi :", data);
res.status(200).send("OK");
} catch (error) {
console.error("Échec du suivi de l'achat :", error);
res.status(500).send("Erreur");
}
});