Events: - #1 Brocante de Printemps (past, offline) - #2 Convention Cosplay (ongoing, online) - #3 Marche de Noel (upcoming, online) 6 categories, 8 billets across all events Scan scenarios for event #2 (ongoing): - DEMO-0001: valid, never scanned - DEMO-0002: refused, exit_definitive (already scanned with definitive exit) - DEMO-0003: accepted, unlimited entry/exit (already scanned once) - DEMO-0004: accepted, invitation (never scanned) - DEMO-0005: refused, invalid (vote type - no generated ticket) API doc: show sandbox event IDs and scan references with colored badges Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
408 lines
13 KiB
JSON
408 lines
13 KiB
JSON
{
|
|
"events": [
|
|
{
|
|
"id": 1,
|
|
"title": "Brocante de Printemps 2026",
|
|
"description": "Grande brocante annuelle en plein air avec plus de 200 exposants.",
|
|
"startAt": "2025-06-15T08:00:00",
|
|
"endAt": "2025-06-15T18:00:00",
|
|
"address": "Place de la Republique",
|
|
"zipcode": "75003",
|
|
"city": "Paris",
|
|
"isOnline": false,
|
|
"isSecret": false,
|
|
"imageUrl": null,
|
|
"status": "past"
|
|
},
|
|
{
|
|
"id": 2,
|
|
"title": "Convention Cosplay Ete",
|
|
"description": "Convention cosplay avec concours, stands et animations. Evenement en cours !",
|
|
"startAt": "2026-03-22T10:00:00",
|
|
"endAt": "2026-03-24T19:00:00",
|
|
"address": "Parc des Expositions",
|
|
"zipcode": "02800",
|
|
"city": "Beautor",
|
|
"isOnline": true,
|
|
"isSecret": false,
|
|
"imageUrl": "https://ticket.e-cosplay.fr/demo/convention.jpg",
|
|
"status": "ongoing"
|
|
},
|
|
{
|
|
"id": 3,
|
|
"title": "Marche de Noel 2026",
|
|
"description": "Marche de Noel avec chalets, vin chaud et animations pour enfants.",
|
|
"startAt": "2026-12-15T10:00:00",
|
|
"endAt": "2026-12-24T20:00:00",
|
|
"address": "Place du Marche",
|
|
"zipcode": "59000",
|
|
"city": "Lille",
|
|
"isOnline": true,
|
|
"isSecret": false,
|
|
"imageUrl": null,
|
|
"status": "upcoming"
|
|
}
|
|
],
|
|
"categories": {
|
|
"1": [
|
|
{
|
|
"id": 1,
|
|
"name": "Entrees",
|
|
"position": 0,
|
|
"startAt": "2026-05-01T00:00:00",
|
|
"endAt": "2026-06-15T18:00:00",
|
|
"isHidden": false,
|
|
"isActive": true
|
|
},
|
|
{
|
|
"id": 2,
|
|
"name": "Reservations Brocante",
|
|
"position": 1,
|
|
"startAt": "2026-04-01T00:00:00",
|
|
"endAt": "2026-06-10T23:59:00",
|
|
"isHidden": false,
|
|
"isActive": true
|
|
}
|
|
],
|
|
"2": [
|
|
{
|
|
"id": 3,
|
|
"name": "General",
|
|
"position": 0,
|
|
"startAt": "2026-07-01T00:00:00",
|
|
"endAt": "2026-08-21T19:00:00",
|
|
"isHidden": false,
|
|
"isActive": true
|
|
},
|
|
{
|
|
"id": 4,
|
|
"name": "VIP",
|
|
"position": 1,
|
|
"startAt": "2026-07-01T00:00:00",
|
|
"endAt": "2026-08-15T23:59:00",
|
|
"isHidden": false,
|
|
"isActive": true
|
|
}
|
|
],
|
|
"3": [
|
|
{
|
|
"id": 5,
|
|
"name": "Chalets & Stands",
|
|
"position": 0,
|
|
"startAt": "2026-10-01T00:00:00",
|
|
"endAt": "2026-12-14T23:59:00",
|
|
"isHidden": false,
|
|
"isActive": true
|
|
},
|
|
{
|
|
"id": 6,
|
|
"name": "Entrees Visiteurs",
|
|
"position": 1,
|
|
"startAt": "2026-11-01T00:00:00",
|
|
"endAt": "2026-12-24T20:00:00",
|
|
"isHidden": false,
|
|
"isActive": true
|
|
}
|
|
]
|
|
},
|
|
"billets": {
|
|
"1": [
|
|
{
|
|
"id": 1,
|
|
"name": "Entree Adulte",
|
|
"priceHT": 500,
|
|
"quantity": 500,
|
|
"sold": 312,
|
|
"type": "billet",
|
|
"isGeneratedBillet": true,
|
|
"notBuyable": false,
|
|
"position": 0
|
|
},
|
|
{
|
|
"id": 2,
|
|
"name": "Entree Enfant (-12 ans)",
|
|
"priceHT": 0,
|
|
"quantity": null,
|
|
"sold": 145,
|
|
"type": "billet",
|
|
"isGeneratedBillet": true,
|
|
"notBuyable": false,
|
|
"position": 1
|
|
}
|
|
],
|
|
"2": [
|
|
{
|
|
"id": 3,
|
|
"name": "Emplacement 3m",
|
|
"priceHT": 1500,
|
|
"quantity": 80,
|
|
"sold": 72,
|
|
"type": "reservation_brocante",
|
|
"isGeneratedBillet": false,
|
|
"notBuyable": false,
|
|
"position": 0
|
|
}
|
|
],
|
|
"3": [
|
|
{
|
|
"id": 4,
|
|
"name": "Pass 2 jours",
|
|
"priceHT": 2000,
|
|
"quantity": 300,
|
|
"sold": 189,
|
|
"type": "billet",
|
|
"isGeneratedBillet": true,
|
|
"notBuyable": false,
|
|
"position": 0
|
|
},
|
|
{
|
|
"id": 5,
|
|
"name": "Pass 1 jour Samedi",
|
|
"priceHT": 1200,
|
|
"quantity": 200,
|
|
"sold": 156,
|
|
"type": "billet",
|
|
"isGeneratedBillet": true,
|
|
"notBuyable": false,
|
|
"position": 1
|
|
}
|
|
],
|
|
"4": [
|
|
{
|
|
"id": 6,
|
|
"name": "Pass VIP 2 jours",
|
|
"priceHT": 5000,
|
|
"quantity": 30,
|
|
"sold": 28,
|
|
"type": "billet",
|
|
"isGeneratedBillet": true,
|
|
"notBuyable": false,
|
|
"position": 0
|
|
}
|
|
],
|
|
"5": [
|
|
{
|
|
"id": 7,
|
|
"name": "Chalet Standard (3m)",
|
|
"priceHT": 8000,
|
|
"quantity": 40,
|
|
"sold": 12,
|
|
"type": "reservation_brocante",
|
|
"isGeneratedBillet": false,
|
|
"notBuyable": false,
|
|
"position": 0
|
|
}
|
|
],
|
|
"6": [
|
|
{
|
|
"id": 8,
|
|
"name": "Entree Gratuite",
|
|
"priceHT": 0,
|
|
"quantity": null,
|
|
"sold": 0,
|
|
"type": "billet",
|
|
"isGeneratedBillet": true,
|
|
"notBuyable": false,
|
|
"position": 0
|
|
}
|
|
]
|
|
},
|
|
"billetDetails": {
|
|
"1": {
|
|
"id": 1,
|
|
"name": "Entree Adulte",
|
|
"description": "Entree standard pour les adultes. Billet electronique avec QR code.",
|
|
"priceHT": 500,
|
|
"quantity": 500,
|
|
"sold": 312,
|
|
"type": "billet",
|
|
"isGeneratedBillet": true,
|
|
"hasDefinedExit": false,
|
|
"notBuyable": false,
|
|
"position": 0,
|
|
"imageUrl": null,
|
|
"category": {"id": 1, "name": "Entrees"},
|
|
"event": {"id": 1, "title": "Brocante de Printemps 2026"}
|
|
},
|
|
"2": {
|
|
"id": 2,
|
|
"name": "Entree Enfant (-12 ans)",
|
|
"description": "Gratuit pour les enfants de moins de 12 ans.",
|
|
"priceHT": 0,
|
|
"quantity": null,
|
|
"sold": 145,
|
|
"type": "billet",
|
|
"isGeneratedBillet": true,
|
|
"hasDefinedExit": false,
|
|
"notBuyable": false,
|
|
"position": 1,
|
|
"imageUrl": null,
|
|
"category": {"id": 1, "name": "Entrees"},
|
|
"event": {"id": 1, "title": "Brocante de Printemps 2026"}
|
|
},
|
|
"3": {
|
|
"id": 3,
|
|
"name": "Emplacement 3m",
|
|
"description": "Emplacement de 3 metres lineaires pour exposant.",
|
|
"priceHT": 1500,
|
|
"quantity": 80,
|
|
"sold": 72,
|
|
"type": "reservation_brocante",
|
|
"isGeneratedBillet": false,
|
|
"hasDefinedExit": false,
|
|
"notBuyable": false,
|
|
"position": 0,
|
|
"imageUrl": null,
|
|
"category": {"id": 2, "name": "Reservations Brocante"},
|
|
"event": {"id": 1, "title": "Brocante de Printemps 2026"}
|
|
},
|
|
"4": {
|
|
"id": 4,
|
|
"name": "Pass 2 jours",
|
|
"description": "Acces aux 2 jours de la convention.",
|
|
"priceHT": 2000,
|
|
"quantity": 300,
|
|
"sold": 189,
|
|
"type": "billet",
|
|
"isGeneratedBillet": true,
|
|
"hasDefinedExit": true,
|
|
"notBuyable": false,
|
|
"position": 0,
|
|
"imageUrl": "https://ticket.e-cosplay.fr/demo/pass-2j.jpg",
|
|
"category": {"id": 3, "name": "General"},
|
|
"event": {"id": 2, "title": "Convention Cosplay Ete"}
|
|
},
|
|
"5": {
|
|
"id": 5,
|
|
"name": "Pass 1 jour Samedi",
|
|
"description": "Acces le samedi uniquement.",
|
|
"priceHT": 1200,
|
|
"quantity": 200,
|
|
"sold": 156,
|
|
"type": "billet",
|
|
"isGeneratedBillet": true,
|
|
"hasDefinedExit": true,
|
|
"notBuyable": false,
|
|
"position": 1,
|
|
"imageUrl": null,
|
|
"category": {"id": 3, "name": "General"},
|
|
"event": {"id": 2, "title": "Convention Cosplay Ete"}
|
|
},
|
|
"6": {
|
|
"id": 6,
|
|
"name": "Pass VIP 2 jours",
|
|
"description": "Acces VIP avec espace dedie, boissons et rencontre artistes.",
|
|
"priceHT": 5000,
|
|
"quantity": 30,
|
|
"sold": 28,
|
|
"type": "billet",
|
|
"isGeneratedBillet": true,
|
|
"hasDefinedExit": true,
|
|
"notBuyable": false,
|
|
"position": 0,
|
|
"imageUrl": "https://ticket.e-cosplay.fr/demo/vip.jpg",
|
|
"category": {"id": 4, "name": "VIP"},
|
|
"event": {"id": 2, "title": "Convention Cosplay Ete"}
|
|
},
|
|
"7": {
|
|
"id": 7,
|
|
"name": "Chalet Standard (3m)",
|
|
"description": "Chalet en bois de 3 metres avec eclairage et prise electrique.",
|
|
"priceHT": 8000,
|
|
"quantity": 40,
|
|
"sold": 12,
|
|
"type": "reservation_brocante",
|
|
"isGeneratedBillet": false,
|
|
"hasDefinedExit": false,
|
|
"notBuyable": false,
|
|
"position": 0,
|
|
"imageUrl": null,
|
|
"category": {"id": 5, "name": "Chalets & Stands"},
|
|
"event": {"id": 3, "title": "Marche de Noel 2026"}
|
|
},
|
|
"8": {
|
|
"id": 8,
|
|
"name": "Entree Gratuite",
|
|
"description": "Entree gratuite pour tous les visiteurs du marche de Noel.",
|
|
"priceHT": 0,
|
|
"quantity": null,
|
|
"sold": 0,
|
|
"type": "billet",
|
|
"isGeneratedBillet": true,
|
|
"hasDefinedExit": false,
|
|
"notBuyable": false,
|
|
"position": 0,
|
|
"imageUrl": null,
|
|
"category": {"id": 6, "name": "Entrees Visiteurs"},
|
|
"event": {"id": 3, "title": "Marche de Noel 2026"}
|
|
}
|
|
},
|
|
"scan": {
|
|
"ETICKET-DEMO-0001-AAAA": {
|
|
"state": "accepted",
|
|
"reason": null,
|
|
"reference": "ETICKET-DEMO-0001-AAAA",
|
|
"billetName": "Pass 2 jours",
|
|
"buyerFirstName": "Jean",
|
|
"buyerLastName": "Dupont",
|
|
"isInvitation": false,
|
|
"firstScannedAt": null,
|
|
"hasDefinedExit": true,
|
|
"details": {},
|
|
"_comment": "Billet valide - jamais scanne"
|
|
},
|
|
"ETICKET-DEMO-0002-BBBB": {
|
|
"state": "refused",
|
|
"reason": "exit_definitive",
|
|
"reference": "ETICKET-DEMO-0002-BBBB",
|
|
"billetName": "Pass 2 jours",
|
|
"buyerFirstName": "Marie",
|
|
"buyerLastName": "Martin",
|
|
"isInvitation": false,
|
|
"firstScannedAt": "2026-03-22T11:00:00",
|
|
"hasDefinedExit": true,
|
|
"details": null,
|
|
"_comment": "Billet valide - deja scanne avec sortie definitive"
|
|
},
|
|
"ETICKET-DEMO-0003-CCCC": {
|
|
"state": "accepted",
|
|
"reason": null,
|
|
"reference": "ETICKET-DEMO-0003-CCCC",
|
|
"billetName": "Pass 1 jour Samedi",
|
|
"buyerFirstName": "Pierre",
|
|
"buyerLastName": "Durand",
|
|
"isInvitation": false,
|
|
"firstScannedAt": "2026-03-22T10:30:00",
|
|
"hasDefinedExit": false,
|
|
"details": {},
|
|
"_comment": "Billet valide - entree/sortie illimitee (deja scanne une fois)"
|
|
},
|
|
"ETICKET-DEMO-0004-DDDD": {
|
|
"state": "accepted",
|
|
"reason": null,
|
|
"reference": "ETICKET-DEMO-0004-DDDD",
|
|
"billetName": "Pass VIP 2 jours",
|
|
"buyerFirstName": "Sophie",
|
|
"buyerLastName": "Bernard",
|
|
"isInvitation": true,
|
|
"firstScannedAt": null,
|
|
"hasDefinedExit": true,
|
|
"details": {},
|
|
"_comment": "Invitation - jamais scannee"
|
|
},
|
|
"ETICKET-DEMO-0005-EEEE": {
|
|
"state": "refused",
|
|
"reason": "invalid",
|
|
"reference": "ETICKET-DEMO-0005-EEEE",
|
|
"billetName": "Vote Meilleur Cosplay",
|
|
"buyerFirstName": "Lucas",
|
|
"buyerLastName": "Petit",
|
|
"isInvitation": false,
|
|
"firstScannedAt": null,
|
|
"hasDefinedExit": false,
|
|
"details": null,
|
|
"_comment": "Vote - pas de billet genere, refuse car type vote"
|
|
}
|
|
}
|
|
}
|