StadePassGuide partenaire
FR EN
Pour les partenaires

StadePass Public API

En clair : voir vos événements → ouvrir un avec votre code → choisir des places sur le plan → les réserver → encaisser → confirmer pour émettre les billets.

Site partenaires : https://book.stadepassgn.com. Gardez code partenaire et code événement secrets (sur votre serveur seulement).

Introduction

Ce guide aide votre équipe à connecter votre application ou site à StadePass pour vendre des places de stade.

Vous envoyez toujours votre code partenaire. Pour ouvrir un événement, vous envoyez aussi le code événement que nous vous avons donné.

Comme un magasin : liste des produits → ouvrir un produit → choisir → réserver un moment → le client vous paie → vous dites à StadePass « vendu » et nous créons les billets.

Vos deux codes

Nous vous donnons seulement deux secrets. C’est tout.

CodeWhenUse
Code partenaireLe code de votre société (ex. YOUR_PARTNER_CODE)À envoyer à chaque demande (comme un badge à l’entrée)
Code événementUn code par événement auquel vous êtes invitéSeulement pour ouvrir cet événement (débloquer plan et places)

Le code événement n’est pas un mot de recherche. Ne le mettez pas dans la recherche de la liste.

Comment ça marche (simple)

1 — Voir vos événements

Demandez la liste des événements que vous avez le droit de vendre. Choisissez-en un (gardez son numéro / id).

2 — Ouvrir cet événement

Envoyez le numéro d’événement + votre code événement. StadePass ouvre le plan, les sections et les places. Gardez l’identifiant de session.

3 — Choisir et réserver les places

Ouvrez une section, choisissez des places libres. Chaque place = une réservation courte (~12 min). Deux billets = deux réservations.

4 — Le client vous paie, puis vous confirmez

Demandez le montant total. Vous encaissez vous-même (nous ne débitons pas la carte). Puis confirmez l’achat avec tous les ids de réservation : places vendues et billets créés.

5 — Afficher le billet dans votre app

La réponse d’achat contient data.tickets[].qr_code (32 caractères hex) et place{} (place_id UNIQUE, porte, tribune.couleur, rangée, siège, route). Pas d’image QR — générez le QR côté app.

Comment vous identifier

Chaque demande doit inclure votre code partenaire (nom : x-partner-code). Le code événement sert seulement à ouvrir un événement. Pour la démo, ajoutez aussi x-env: demo (ou ?env=demo) ; par défaut = production.

À envoyer à chaque fois

HeaderDescription
x-partner-codeVotre code partenaire — comme montrer votre badge à chaque appel
x-envOptionnel : demo pour l’environnement démo ; omettre = production

Les prix sont en francs guinéens (GNF). Exemple : 50000 = 50 000 GNF.

Étapes pour vos développeurs

Suivez les étapes 1 à 8 dans l’ordre. Les pages détail montrent quoi envoyer.

À quoi sert chaque étape

Operation
1. Lister les événements

Obtenir les événements que vous pouvez vendre. Noter l’id.

GET /api/v1/public/events
Voir le détail →
1b. Créer un événement (demo seulement)

Demo : créez un événement avec le code partenaire seulement. Envoyez x-env: demo. Gardez event_id + access_code pour l’étape 2.

POST /api/v1/public/events
Voir le détail →
2. Ouvrir l’événement (le plan apparaît ici)

Envoyer id événement + code événement. Zones/sections + comptes (map.seats vide jusqu’à l’étape 3).

POST /api/v1/public/booking-sessions
Voir le détail →
3. Ouvrir une section

Voir les places d’une section. Chaque siège inclut place_id (nombre) / place / rangee / porte / tribune / route_texte. Hold avec id.

GET /api/v1/public/booking-sessions/:id?section_id=
Voir le détail →
4. Réserver une place (répéter pour chaque billet)

Une place à la fois. 3 billets = 3 réservations. Garder chaque hold id.

POST /api/v1/public/booking-sessions/:id/holds
Voir le détail →
5. Voir le total à encaisser

Obtenir le montant avant de faire payer le client.

GET /api/v1/public/booking-sessions/:id/checkout
Voir le détail →
6. Confirmer après paiement

Confirmer : places + montant. La réponse tickets[] contient qr_code + place{} (tribune.couleur). Pas d’image QR.

POST /api/v1/public/purchases
Voir le détail →
7. Lister les billets

Billets pour owner_ref. Inclut qr_code + place{} (tribune.couleur).

GET /api/v1/public/tickets?owner_ref=
Voir le détail →
8. Récupérer un billet

Même owner_ref. Renvoie qr_code + place{} (tribune.couleur). Pas d’image QR.

GET /api/v1/public/tickets/:id?owner_ref=
Voir le détail →

Parcours complet

Lister → ouvrir → section → réserver chaque place → total → le client vous paie → confirmer → afficher les détails place{}.

Vous ne voyez que les événements auxquels vous êtes invité. Les places sont partagées — la première vente confirmée gagne.

Quoi afficher après l’achat

Utilisez data.tickets[].qr_code et place{} de l’achat (même sur GET /tickets/:id). place_id = siège UNIQUE. tribune.couleur = couleur tribune (#hex). Voir docs/TICKET-RESPONSE.md et docs/places-restantes.place-shape.sample.json. Pas d’image QR — générez le QR côté app.

FieldÀ afficher / usage
qr_codePayload QR 32 caractères hex — à encoder en QR dans votre app
place.place_idId UNIQUE du siège — toujours s’y fier
place.place, rangee, numero_placeLibellé (W16) + rangée + numéro
place.portePorte : Ouest 1 / Ouest 2 / Est / Nord / Sud (code + libelle)
place.tribune.couleurCouleur tribune (#hex) pour l’UI
place.tribune / route_texteNom tribune + chemin
place.code_litigeCode litige STD-{event}-S{place_id}
ticket_numberNuméro lisible sur le billet
Exemple front
<strong>{ticket.ticket_number}</strong>
<span style="color:{ticket.place.tribune.couleur}">{ticket.place.porte.libelle} · {ticket.place.tribune.nom}</span>
<span>Secteur {ticket.place.secteur} · Rangée {ticket.place.rangee} · Siège {ticket.place.place}</span>
<span>{ticket.place.route_texte}</span>
<span>{ticket.place.code_litige}</span>
<qr value="{ticket.qr_code}" />

Exemple — ouvrir un événement

Ce que vous envoyez
curl -X POST \
  "https://book.stadepassgn.com/api/v1/public/booking-sessions" \
  -H "Content-Type: application/json" \
  -H "x-partner-code: YOUR_PARTNER_CODE" \
  -d '{
  "event_id": "8",
  "access_code": "YOUR_EVENT_SECRET"
}'
Ce que vous recevez
{
  "success": true,
  "message": "Booking session created",
  "data": {
    "session_id": "6e5e5b33-ab5c-40da-b9f0-19bec7da55dd",
    "event_id": "8",
    "owner_ref": "YOUR_PARTNER_CODE-user-42",
    "status": "ACTIVE",
    "expires_at": "2026-09-04T13:30:00.000Z",
    "requires_access_code": true,
    "event": { "id": "8", "min_price": 35000, "currency": "GNF" },
    "map": { "event_id": "8", "zones": [], "sections": [], "seats": [] },
    "availability": { "scope": "overview", "remaining": 18894, "zones": [], "sections": [] },
    "holds": []
  }
}

Postman (pour développeurs)

Téléchargez la collection. base_url = https://book.stadepassgn.com, partner_code, event_secret. Lancez les requêtes de haut en bas.

Si ça ne marche pas

Problèmes fréquents, en langage simple.

401 ACCESS_DENIED
{
  "code": "ACCESS_DENIED",
  "message": "Invalid or missing event access_code"
}