[{"data":1,"prerenderedAt":2877},["ShallowReactive",2],{"navigation_docs_fr":3,"-fr-oauth-booking-sync":312,"-fr-oauth-booking-sync-surround":2872},[4,17,210,237,272],{"title":5,"path":6,"stem":7,"children":8,"icon":11},"Premiers pas","\u002Ffr\u002Fgetting-started","fr\u002F0.getting-started\u002F1.index",[9,12],{"title":10,"path":6,"stem":7,"icon":11},"Visite de l'administration","sporty-toggle-large-on",{"title":13,"path":14,"stem":15,"icon":16},"Configuration de la première semaine","\u002Ffr\u002Fgetting-started\u002Ffirst-week-setup","fr\u002F0.getting-started\u002F2.first-week-setup","sporty-calendar-check",{"title":18,"path":19,"stem":20,"children":21,"page":209},"Interface","\u002Ffr\u002Finterface","fr\u002F1.interface",[22,65,72,79,90,97,105,112,119,126,147,154,174,185,203],{"title":23,"path":24,"stem":25,"children":26,"icon":28},"Courts","\u002Ffr\u002Finterface\u002Fcourts","fr\u002F1.interface\u002F01.courts\u002F1.index",[27,29],{"title":23,"path":24,"stem":25,"icon":28},"sporty-court-sport",{"title":30,"path":31,"stem":32,"children":33,"icon":11},"Contrôle d'accès et éclairage","\u002Ffr\u002Finterface\u002Fcourts\u002Fintegrations","fr\u002F1.interface\u002F01.courts\u002F5.integrations\u002F1.index",[34,35,40,45],{"title":30,"path":31,"stem":32,"icon":11},{"title":36,"path":37,"stem":38,"icon":39},"Weblock","\u002Ffr\u002Finterface\u002Fcourts\u002Fintegrations\u002Fweblock","fr\u002F1.interface\u002F01.courts\u002F5.integrations\u002F2.weblock","sporty-door-open",{"title":41,"path":42,"stem":43,"icon":44},"Shelly","\u002Ffr\u002Finterface\u002Fcourts\u002Fintegrations\u002Fshelly","fr\u002F1.interface\u002F01.courts\u002F5.integrations\u002F3.shelly","sporty-bolt",{"title":46,"path":47,"stem":48,"children":49,"icon":39},"UniFi Access","\u002Ffr\u002Finterface\u002Fcourts\u002Fintegrations\u002Funifi-access","fr\u002F1.interface\u002F01.courts\u002F5.integrations\u002F4.unifi-access\u002F1.index",[50,52,56,61],{"title":51,"path":47,"stem":48,"icon":39},"Présentation",{"title":53,"path":54,"stem":55,"icon":11},"Connecter le VPN","\u002Ffr\u002Finterface\u002Fcourts\u002Fintegrations\u002Funifi-access\u002Fvpn","fr\u002F1.interface\u002F01.courts\u002F5.integrations\u002F4.unifi-access\u002F2.vpn",{"title":57,"path":58,"stem":59,"icon":60},"Créer un jeton d'API","\u002Ffr\u002Finterface\u002Fcourts\u002Fintegrations\u002Funifi-access\u002Fapi-token","fr\u002F1.interface\u002F01.courts\u002F5.integrations\u002F4.unifi-access\u002F3.api-token","sporty-gear",{"title":62,"path":63,"stem":64,"icon":28},"Configurer dans Club Admin","\u002Ffr\u002Finterface\u002Fcourts\u002Fintegrations\u002Funifi-access\u002Fclub-admin","fr\u002F1.interface\u002F01.courts\u002F5.integrations\u002F4.unifi-access\u002F4.club-admin",{"title":66,"path":67,"stem":68,"children":69,"icon":71},"Membres","\u002Ffr\u002Finterface\u002Fmembers","fr\u002F1.interface\u002F02.members\u002F1.index",[70],{"title":66,"path":67,"stem":68,"icon":71},"sporty-user-group",{"title":73,"path":74,"stem":75,"children":76,"icon":78},"Adhésions","\u002Ffr\u002Finterface\u002Fmemberships","fr\u002F1.interface\u002F03.memberships\u002F1.index",[77],{"title":73,"path":74,"stem":75,"icon":78},"sporty-id-card",{"title":80,"path":81,"stem":82,"children":83,"icon":85},"Ligues","\u002Ffr\u002Finterface\u002Fleagues","fr\u002F1.interface\u002F04.leagues\u002F1.index",[84,86],{"title":80,"path":81,"stem":82,"icon":85},"sporty-ranking-star",{"title":87,"path":88,"stem":89,"icon":16},"Compétitions planifiées","\u002Ffr\u002Finterface\u002Fleagues\u002Fplanned-competitions","fr\u002F1.interface\u002F04.leagues\u002F2.planned-competitions",{"title":91,"path":92,"stem":93,"children":94,"icon":96},"Tournois","\u002Ffr\u002Finterface\u002Ftournaments","fr\u002F1.interface\u002F05.tournaments\u002F1.index",[95],{"title":91,"path":92,"stem":93,"icon":96},"sporty-trophy",{"title":98,"path":99,"stem":100,"children":101,"icon":104},"Paiements et abonnements","\u002Ffr\u002Finterface\u002Fpayments","fr\u002F1.interface\u002F06.payments\u002F1.index",[102],{"title":103,"path":99,"stem":100,"icon":104},"Paiements","sporty-credit-card",{"title":106,"path":107,"stem":108,"children":109,"icon":111},"Boutique","\u002Ffr\u002Finterface\u002Fshop","fr\u002F1.interface\u002F07.shop\u002F1.index",[110],{"title":106,"path":107,"stem":108,"icon":111},"sporty-bag-shopping",{"title":113,"path":114,"stem":115,"children":116,"icon":118},"Écoles et entraîneurs","\u002Ffr\u002Finterface\u002Fschools","fr\u002F1.interface\u002F08.schools\u002F1.index",[117],{"title":113,"path":114,"stem":115,"icon":118},"sporty-graduation-cap",{"title":120,"path":121,"stem":122,"children":123,"icon":125},"E-mails","\u002Ffr\u002Finterface\u002Femails","fr\u002F1.interface\u002F09.emails\u002F1.index",[124],{"title":120,"path":121,"stem":122,"icon":125},"sporty-envelope",{"title":127,"path":128,"stem":129,"children":130,"icon":132},"Vidéo et caméras","\u002Ffr\u002Finterface\u002Fvideo","fr\u002F1.interface\u002F10.video\u002F1.index",[131,133,137,142],{"title":127,"path":128,"stem":129,"icon":132},"sporty-camera-cctv",{"title":134,"path":135,"stem":136,"icon":132},"Caméras Dahua","\u002Ffr\u002Finterface\u002Fvideo\u002Fdahua","fr\u002F1.interface\u002F10.video\u002F2.dahua",{"title":138,"path":139,"stem":140,"icon":141},"Autres caméras RTMP","\u002Ffr\u002Finterface\u002Fvideo\u002Frtmp","fr\u002F1.interface\u002F10.video\u002F3.rtmp","sporty-video",{"title":143,"path":144,"stem":145,"icon":146},"Analyse des matchs","\u002Ffr\u002Finterface\u002Fvideo\u002Fanalytics","fr\u002F1.interface\u002F10.video\u002F4.analytics","sporty-chart-simple",{"title":148,"path":149,"stem":150,"children":151,"icon":153},"Rapports","\u002Ffr\u002Finterface\u002Freports","fr\u002F1.interface\u002F11.reports\u002F1.index",[152],{"title":148,"path":149,"stem":150,"icon":153},"sporty-chart-mixed",{"title":155,"path":156,"stem":157,"children":158,"icon":60},"Paramètres","\u002Ffr\u002Finterface\u002Fsettings","fr\u002F1.interface\u002F12.settings\u002F1.index",[159,161,165,169],{"title":160,"path":156,"stem":157,"icon":60},"Paramètres du club",{"title":162,"path":163,"stem":164,"icon":16},"Règles de réservation et liste de prix","\u002Ffr\u002Finterface\u002Fsettings\u002Fbooking-rules","fr\u002F1.interface\u002F12.settings\u002F2.booking-rules",{"title":166,"path":167,"stem":168,"icon":78},"Inscription et pages légales","\u002Ffr\u002Finterface\u002Fsettings\u002Fsignup-and-legal","fr\u002F1.interface\u002F12.settings\u002F3.signup-and-legal",{"title":170,"path":171,"stem":172,"icon":173},"Administrateurs et rôles","\u002Ffr\u002Finterface\u002Fsettings\u002Fadministrators-and-roles","fr\u002F1.interface\u002F12.settings\u002F4.administrators-and-roles","sporty-user",{"title":175,"path":176,"stem":177,"children":178,"icon":180},"Publication sur les réseaux sociaux","\u002Ffr\u002Finterface\u002Fsocial","fr\u002F1.interface\u002F13.social\u002F1.index",[179,181],{"title":175,"path":176,"stem":177,"icon":180},"sporty-newspaper",{"title":182,"path":183,"stem":184,"icon":11},"Connecter des canaux","\u002Ffr\u002Finterface\u002Fsocial\u002Fchannels","fr\u002F1.interface\u002F13.social\u002F2.channels",{"title":186,"path":187,"stem":188,"children":189,"icon":28},"Événements à places numérotées","\u002Ffr\u002Finterface\u002Fseated-events","fr\u002F1.interface\u002F14.seated-events\u002F1.index",[190,191,195,199],{"title":186,"path":187,"stem":188,"icon":28},{"title":192,"path":193,"stem":194,"icon":28},"Plans de salle","\u002Ffr\u002Finterface\u002Fseated-events\u002Fseating-plans","fr\u002F1.interface\u002F14.seated-events\u002F2.seating-plans",{"title":196,"path":197,"stem":198,"icon":16},"Vendre des places","\u002Ffr\u002Finterface\u002Fseated-events\u002Fselling-seats","fr\u002F1.interface\u002F14.seated-events\u002F3.selling-seats",{"title":200,"path":201,"stem":202,"icon":39},"En vente et à l'entrée","\u002Ffr\u002Finterface\u002Fseated-events\u002Fon-sale","fr\u002F1.interface\u002F14.seated-events\u002F4.on-sale",{"title":204,"path":205,"stem":206,"children":207,"icon":16},"Abonnements saisonniers","\u002Ffr\u002Finterface\u002Fseason-tickets","fr\u002F1.interface\u002F15.season-tickets\u002F1.index",[208],{"title":204,"path":205,"stem":206,"icon":16},false,{"title":211,"path":212,"stem":213,"children":214,"icon":217},"Site web","\u002Ffr\u002Fwebsite","fr\u002F2.website\u002F1.index",[215,218,223,227,232],{"title":216,"path":212,"stem":213,"icon":217},"Créateur de site web","sporty-browser",{"title":219,"path":220,"stem":221,"icon":222},"Pages, hero et pied de page","\u002Ffr\u002Fwebsite\u002Fpages","fr\u002F2.website\u002F2.pages","sporty-file-lines",{"title":224,"path":225,"stem":226,"icon":180},"Actualités et événements","\u002Ffr\u002Fwebsite\u002Fnews-and-events","fr\u002F2.website\u002F3.news-and-events",{"title":228,"path":229,"stem":230,"icon":231},"Entraîneurs et galerie","\u002Ffr\u002Fwebsite\u002Fcoaches-and-gallery","fr\u002F2.website\u002F4.coaches-and-gallery","sporty-images",{"title":233,"path":234,"stem":235,"icon":236},"FAQ et sponsors","\u002Ffr\u002Fwebsite\u002Ffaq-and-sponsors","fr\u002F2.website\u002F5.faq-and-sponsors","sporty-circle-question",{"title":238,"path":239,"stem":240,"children":241,"icon":173},"Pour les membres","\u002Ffr\u002Fmembers","fr\u002F3.members\u002F1.index",[242,244,248,252,256,260,264,268],{"title":243,"path":239,"stem":240,"icon":173},"Utiliser l'application des membres",{"title":245,"path":246,"stem":247,"icon":16},"Réserver un court","\u002Ffr\u002Fmembers\u002Fbooking","fr\u002F3.members\u002F2.booking",{"title":249,"path":250,"stem":251,"icon":104},"Adhésions et paiements","\u002Ffr\u002Fmembers\u002Fpayments","fr\u002F3.members\u002F3.payments",{"title":253,"path":254,"stem":255,"icon":85},"Comment fonctionnent les compétitions","\u002Ffr\u002Fmembers\u002Fhow-competitions-work","fr\u002F3.members\u002F4.how-competitions-work",{"title":257,"path":258,"stem":259,"icon":96},"Ligues, tournois et résultats","\u002Ffr\u002Fmembers\u002Fcompetitions","fr\u002F3.members\u002F5.competitions",{"title":261,"path":262,"stem":263,"icon":71},"Famille et enfants","\u002Ffr\u002Fmembers\u002Ffamily","fr\u002F3.members\u002F6.family",{"title":265,"path":266,"stem":267,"icon":78},"Votre compte","\u002Ffr\u002Fmembers\u002Faccount","fr\u002F3.members\u002F7.account",{"title":269,"path":270,"stem":271,"icon":236},"Obtenir de l'aide","\u002Ffr\u002Fmembers\u002Fhelp","fr\u002F3.members\u002F8.help",{"title":273,"path":274,"stem":275,"children":276,"icon":278},"OAuth et Se connecter avec Sporty","\u002Ffr\u002Foauth","fr\u002F4.oauth\u002F1.index",[277,279,283,287,291,295,299,303,307],{"title":273,"path":274,"stem":275,"icon":278},"sporty-brackets-curly",{"title":280,"path":281,"stem":282,"icon":278},"Enregistrer une application","\u002Ffr\u002Foauth\u002Fclients","fr\u002F4.oauth\u002F2.clients",{"title":284,"path":285,"stem":286,"icon":278},"Le flux du code d'autorisation","\u002Ffr\u002Foauth\u002Fauthorization-code","fr\u002F4.oauth\u002F3.authorization-code",{"title":288,"path":289,"stem":290,"icon":278},"Scopes","\u002Ffr\u002Foauth\u002Fscopes","fr\u002F4.oauth\u002F4.scopes",{"title":292,"path":293,"stem":294,"icon":278},"Se connecter avec Sporty","\u002Ffr\u002Foauth\u002Fsign-in-with-sporty","fr\u002F4.oauth\u002F5.sign-in-with-sporty",{"title":296,"path":297,"stem":298,"icon":278},"L'API partenaire","\u002Ffr\u002Foauth\u002Fpartner-api","fr\u002F4.oauth\u002F6.partner-api",{"title":300,"path":301,"stem":302,"icon":278},"Synchroniser les réservations","\u002Ffr\u002Foauth\u002Fbooking-sync","fr\u002F4.oauth\u002F7.booking-sync",{"title":304,"path":305,"stem":306,"icon":278},"MCP et clients IA","\u002Ffr\u002Foauth\u002Fmcp-and-ai-clients","fr\u002F4.oauth\u002F8.mcp-and-ai-clients",{"title":308,"path":309,"stem":310,"icon":311},"Paiement par agent","\u002Ffr\u002Foauth\u002Fagent-checkout","fr\u002F4.oauth\u002F9.agent-checkout","sporty-cart-shopping",{"id":313,"title":300,"body":314,"description":2863,"extension":2864,"links":2865,"meta":2866,"navigation":2867,"path":301,"seo":2868,"stem":302,"__hash__":2871},"docs_fr\u002Ffr\u002F4.oauth\u002F7.booking-sync.md",{"type":315,"value":316,"toc":2843},"minimark",[317,321,338,350,355,358,381,384,388,391,442,451,454,537,544,548,551,581,669,679,683,698,791,884,891,1136,1142,1147,1167,1173,1177,1244,1251,1255,1311,1332,1342,1346,1376,1382,1386,1390,1446,1572,1590,1626,1630,1637,1964,2003,2029,2038,2042,2049,2063,2066,2084,2092,2096,2099,2107,2121,2551,2554,2558,2561,2591,2613,2619,2623,2761,2778,2782,2785,2792,2803,2810,2813,2832,2839],[318,319,320],"p",{},"Si vous vendez les courts d'un club via votre propre système — une place de marché, un logiciel\nde gestion de site ou le site web du club —, deux plannings doivent concorder. Cette page couvre\nles deux sens :",[322,323,324,332],"ul",{},[325,326,327,331],"li",{},[328,329,330],"strong",{},"Vous nous informez"," de chaque réservation que vous prenez, et nous bloquons ce court pour\nque personne ne le réserve dans Sporty.",[325,333,334,337],{},[328,335,336],{},"Nous vous informons"," de chaque réservation prise, déplacée ou annulée dans Sporty, par\nwebhook signé.",[318,339,340,341,344,345,349],{},"Votre intégration est un ",[328,342,343],{},"compte de service",". Elle détient un jeton obtenu par\n",[346,347,348],"a",{"href":281},"identifiants client"," et agit pour le club, pas pour un membre.",[351,352,354],"h2",{"id":353},"ce-quest-une-réservation-venant-de-vous","Ce qu'est une réservation venant de vous",[318,356,357],{},"Lorsque vous envoyez une réservation, le court est bloqué exactement comme lorsqu'un\nadministrateur du club bloque un créneau dans Sporty :",[322,359,360,371,378],{},[325,361,362,363,366,367,370],{},"Elle a un ",[328,364,365],{},"nom"," (affiché dans le planning du club) et, éventuellement, une ",[328,368,369],{},"catégorie",".",[325,372,373,374,377],{},"Elle n'a ",[328,375,376],{},"ni joueurs ni prix",". Sporty n'encaisse aucun paiement pour elle, n'applique aucune\nlimite d'adhésion et ne notifie aucun membre à son sujet.",[325,379,380],{},"Le court doit être libre. C'est la seule règle que nous vérifions.",[318,382,383],{},"Qui a joué et qui a payé reste dans votre système. Vous indiquez au club que le court est pris,\nvous ne vendez pas la réservation via Sporty.",[351,385,387],{"id":386},"avant-de-commencer","Avant de commencer",[318,389,390],{},"Le club doit accorder à votre application les scopes dont elle a besoin. Pour une\nsynchronisation bidirectionnelle, ce sont :",[392,393,394,407],"table",{},[395,396,397],"thead",{},[398,399,400,404],"tr",{},[401,402,403],"th",{},"Scope",[401,405,406],{},"Pour",[408,409,410,422,432],"tbody",{},[398,411,412,419],{},[413,414,415],"td",{},[416,417,418],"code",{},"club.courts.read",[413,420,421],{},"Lister les courts, pour les faire correspondre aux vôtres",[398,423,424,429],{},[413,425,426],{},[416,427,428],{},"club.reservations.read",[413,430,431],{},"Lire le planning et ses catégories, et recevoir les webhooks",[398,433,434,439],{},[413,435,436],{},[416,437,438],{},"club.reservations.write",[413,440,441],{},"Bloquer, déplacer et annuler des réservations",[318,443,444,446,447,450],{},[416,445,438],{}," permet à votre application d'annuler ",[328,448,449],{},"n'importe quelle"," réservation\ndu club, y compris celles des membres, comme peut le faire le personnel du club. Le club\nl'accorde en connaissance de cause. Utilisez-le pour les réservations que vous devez reprendre,\npas pour faire le ménage dans le planning.",[318,452,453],{},"Obtenir un jeton :",[455,456,461],"pre",{"className":457,"code":458,"language":459,"meta":460,"style":460},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","curl -X POST https:\u002F\u002Fapi.sporty.plus\u002Foauth2\u002Ftoken \\\n  -d grant_type=client_credentials \\\n  -d client_id=$CLIENT_ID \\\n  -d client_secret=$CLIENT_SECRET \\\n  -d scope=\"club.courts.read club.reservations.read club.reservations.write\"\n","bash","",[416,462,463,486,497,508,519],{"__ignoreMap":460},[464,465,468,472,476,479,482],"span",{"class":466,"line":467},"line",1,[464,469,471],{"class":470},"sBMFI","curl",[464,473,475],{"class":474},"sfazB"," -X",[464,477,478],{"class":474}," POST",[464,480,481],{"class":474}," https:\u002F\u002Fapi.sporty.plus\u002Foauth2\u002Ftoken",[464,483,485],{"class":484},"sTEyZ"," \\\n",[464,487,489,492,495],{"class":466,"line":488},2,[464,490,491],{"class":474},"  -d",[464,493,494],{"class":474}," grant_type=client_credentials",[464,496,485],{"class":484},[464,498,500,502,505],{"class":466,"line":499},3,[464,501,491],{"class":474},[464,503,504],{"class":474}," client_id=",[464,506,507],{"class":484},"$CLIENT_ID \\\n",[464,509,511,513,516],{"class":466,"line":510},4,[464,512,491],{"class":474},[464,514,515],{"class":474}," client_secret=",[464,517,518],{"class":484},"$CLIENT_SECRET \\\n",[464,520,522,524,527,531,534],{"class":466,"line":521},5,[464,523,491],{"class":474},[464,525,526],{"class":474}," scope=",[464,528,530],{"class":529},"sMK4o","\"",[464,532,533],{"class":474},"club.courts.read club.reservations.read club.reservations.write",[464,535,536],{"class":529},"\"\n",[318,538,539,540,543],{},"Si votre application agit pour plusieurs clubs, envoyez ",[416,541,542],{},"X-Club: \u003Cclub id>"," avec chacune des\nrequêtes ci-dessous. Les webhooks se configurent club par club.",[351,545,547],{"id":546},"catégories","Catégories",[318,549,550],{},"Une réservation peut porter l'une des catégories de réservation du club, les étiquettes que ses\nadministrateurs donnent aux créneaux bloqués (« Ligue », « École de tennis »). Le planning du\nclub l'affiche dans la couleur de la catégorie.",[455,552,554],{"className":457,"code":553,"language":459,"meta":460,"style":460},"curl https:\u002F\u002Fapi.sporty.plus\u002Fapi\u002Fpartner\u002Fv1\u002Freservation-categories \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\"\n",[416,555,556,565],{"__ignoreMap":460},[464,557,558,560,563],{"class":466,"line":467},[464,559,471],{"class":470},[464,561,562],{"class":474}," https:\u002F\u002Fapi.sporty.plus\u002Fapi\u002Fpartner\u002Fv1\u002Freservation-categories",[464,564,485],{"class":484},[464,566,567,570,573,576,579],{"class":466,"line":488},[464,568,569],{"class":474},"  -H",[464,571,572],{"class":529}," \"",[464,574,575],{"class":474},"Authorization: Bearer ",[464,577,578],{"class":484},"$ACCESS_TOKEN",[464,580,536],{"class":529},[455,582,586],{"className":583,"code":584,"language":585,"meta":460,"style":460},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{ \"data\": [ { \"id\": 3, \"name\": \"Liga\", \"color\": \"#ea47bc\" } ] }\n","json",[416,587,588],{"__ignoreMap":460},[464,589,590,593,595,599,601,604,607,610,612,615,617,619,623,626,628,631,633,635,637,640,642,644,646,649,651,653,655,658,660,663,666],{"class":466,"line":467},[464,591,592],{"class":529},"{",[464,594,572],{"class":529},[464,596,598],{"class":597},"spNyl","data",[464,600,530],{"class":529},[464,602,603],{"class":529},":",[464,605,606],{"class":529}," [",[464,608,609],{"class":529}," {",[464,611,572],{"class":529},[464,613,614],{"class":470},"id",[464,616,530],{"class":529},[464,618,603],{"class":529},[464,620,622],{"class":621},"sbssI"," 3",[464,624,625],{"class":529},",",[464,627,572],{"class":529},[464,629,630],{"class":470},"name",[464,632,530],{"class":529},[464,634,603],{"class":529},[464,636,572],{"class":529},[464,638,639],{"class":474},"Liga",[464,641,530],{"class":529},[464,643,625],{"class":529},[464,645,572],{"class":529},[464,647,648],{"class":470},"color",[464,650,530],{"class":529},[464,652,603],{"class":529},[464,654,572],{"class":529},[464,656,657],{"class":474},"#ea47bc",[464,659,530],{"class":529},[464,661,662],{"class":529}," }",[464,664,665],{"class":529}," ]",[464,667,668],{"class":529}," }\n",[318,670,671,672,674,675,678],{},"Cela nécessite ",[416,673,428],{},". Un club peut n'en avoir aucune ; ",[416,676,677],{},"category_id"," est\nfacultatif.",[351,680,682],{"id":681},"bloquer-un-court","Bloquer un court",[318,684,685,686,689,690,694,695,370],{},"Pour trouver d'abord un créneau libre, ",[416,687,688],{},"GET \u002Favailability?date=…"," liste les créneaux de chaque\ncourt, libres ou pris ; voir ",[346,691,693],{"href":692},"\u002Ffr\u002Foauth\u002Fpartner-api#get-availability","l'API partenaire",". Bloquer\nun court revérifie sa disponibilité, si bien qu'un créneau pris entre-temps renvoie quand même\n",[416,696,697],{},"409 slot_taken",[455,699,701],{"className":457,"code":700,"language":459,"meta":460,"style":460},"curl -X POST https:\u002F\u002Fapi.sporty.plus\u002Fapi\u002Fpartner\u002Fv1\u002Freservations \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"external_id\": \"bk_8f3a21\",\n    \"court_id\": 412,\n    \"from\": \"2026-10-06T17:00:00+02:00\",\n    \"to\": \"2026-10-06T18:30:00+02:00\",\n    \"name\": \"Online: Horvat\"\n  }'\n",[416,702,703,716,730,743,753,758,764,770,776,782],{"__ignoreMap":460},[464,704,705,707,709,711,714],{"class":466,"line":467},[464,706,471],{"class":470},[464,708,475],{"class":474},[464,710,478],{"class":474},[464,712,713],{"class":474}," https:\u002F\u002Fapi.sporty.plus\u002Fapi\u002Fpartner\u002Fv1\u002Freservations",[464,715,485],{"class":484},[464,717,718,720,722,724,726,728],{"class":466,"line":488},[464,719,569],{"class":474},[464,721,572],{"class":529},[464,723,575],{"class":474},[464,725,578],{"class":484},[464,727,530],{"class":529},[464,729,485],{"class":484},[464,731,732,734,736,739,741],{"class":466,"line":499},[464,733,569],{"class":474},[464,735,572],{"class":529},[464,737,738],{"class":474},"Content-Type: application\u002Fjson",[464,740,530],{"class":529},[464,742,485],{"class":484},[464,744,745,747,750],{"class":466,"line":510},[464,746,491],{"class":474},[464,748,749],{"class":529}," '",[464,751,752],{"class":474},"{\n",[464,754,755],{"class":466,"line":521},[464,756,757],{"class":474},"    \"external_id\": \"bk_8f3a21\",\n",[464,759,761],{"class":466,"line":760},6,[464,762,763],{"class":474},"    \"court_id\": 412,\n",[464,765,767],{"class":466,"line":766},7,[464,768,769],{"class":474},"    \"from\": \"2026-10-06T17:00:00+02:00\",\n",[464,771,773],{"class":466,"line":772},8,[464,774,775],{"class":474},"    \"to\": \"2026-10-06T18:30:00+02:00\",\n",[464,777,779],{"class":466,"line":778},9,[464,780,781],{"class":474},"    \"name\": \"Online: Horvat\"\n",[464,783,785,788],{"class":466,"line":784},10,[464,786,787],{"class":474},"  }",[464,789,790],{"class":529},"'\n",[392,792,793,804],{},[395,794,795],{},[398,796,797,800,802],{},[401,798,799],{},"Champ",[401,801],{},[401,803],{},[408,805,806,822,837,858,870],{},[398,807,808,813,816],{},[413,809,810],{},[416,811,812],{},"external_id",[413,814,815],{},"obligatoire",[413,817,818,821],{},[328,819,820],{},"Votre"," identifiant pour la réservation, jusqu'à 191 caractères.",[398,823,824,829,831],{},[413,825,826],{},[416,827,828],{},"court_id",[413,830,815],{},[413,832,833,834,370],{},"Un court issu de ",[416,835,836],{},"GET \u002Fcourts",[398,838,839,848,850],{},[413,840,841,844,845],{},[416,842,843],{},"from",", ",[416,846,847],{},"to",[413,849,815],{},[413,851,852,853,855,856,370],{},"ISO 8601 avec un décalage horaire. ",[416,854,847],{}," doit être postérieur à ",[416,857,843],{},[398,859,860,864,867],{},[413,861,862],{},[416,863,630],{},[413,865,866],{},"facultatif",[413,868,869],{},"Ce que le club voit dans son planning, jusqu'à 255 caractères.",[398,871,872,876,878],{},[413,873,874],{},[416,875,677],{},[413,877,866],{},[413,879,880,881,370],{},"L'une des catégories de réservation du club, issue de ",[416,882,883],{},"GET \u002Freservation-categories",[318,885,886,887,890],{},"La réponse est ",[416,888,889],{},"201"," avec la réservation :",[455,892,894],{"className":583,"code":893,"language":585,"meta":460,"style":460},"{\n  \"data\": {\n    \"id\": 918273,\n    \"court_id\": 412,\n    \"court_name\": \"Teren 3\",\n    \"from\": \"2026-10-06T15:00:00+00:00\",\n    \"to\": \"2026-10-06T16:30:00+00:00\",\n    \"category_id\": null,\n    \"approved\": false,\n    \"cancelled\": false,\n    \"source\": \"partner\",\n    \"external_id\": \"bk_8f3a21\",\n    \"name\": \"Online: Horvat\",\n    \"updated_at\": \"2026-09-29T11:20:04+00:00\"\n  }\n}\n",[416,895,896,900,914,931,946,966,985,1004,1017,1031,1044,1065,1085,1105,1124,1130],{"__ignoreMap":460},[464,897,898],{"class":466,"line":467},[464,899,752],{"class":529},[464,901,902,905,907,909,911],{"class":466,"line":488},[464,903,904],{"class":529},"  \"",[464,906,598],{"class":597},[464,908,530],{"class":529},[464,910,603],{"class":529},[464,912,913],{"class":529}," {\n",[464,915,916,919,921,923,925,928],{"class":466,"line":499},[464,917,918],{"class":529},"    \"",[464,920,614],{"class":470},[464,922,530],{"class":529},[464,924,603],{"class":529},[464,926,927],{"class":621}," 918273",[464,929,930],{"class":529},",\n",[464,932,933,935,937,939,941,944],{"class":466,"line":510},[464,934,918],{"class":529},[464,936,828],{"class":470},[464,938,530],{"class":529},[464,940,603],{"class":529},[464,942,943],{"class":621}," 412",[464,945,930],{"class":529},[464,947,948,950,953,955,957,959,962,964],{"class":466,"line":521},[464,949,918],{"class":529},[464,951,952],{"class":470},"court_name",[464,954,530],{"class":529},[464,956,603],{"class":529},[464,958,572],{"class":529},[464,960,961],{"class":474},"Teren 3",[464,963,530],{"class":529},[464,965,930],{"class":529},[464,967,968,970,972,974,976,978,981,983],{"class":466,"line":760},[464,969,918],{"class":529},[464,971,843],{"class":470},[464,973,530],{"class":529},[464,975,603],{"class":529},[464,977,572],{"class":529},[464,979,980],{"class":474},"2026-10-06T15:00:00+00:00",[464,982,530],{"class":529},[464,984,930],{"class":529},[464,986,987,989,991,993,995,997,1000,1002],{"class":466,"line":766},[464,988,918],{"class":529},[464,990,847],{"class":470},[464,992,530],{"class":529},[464,994,603],{"class":529},[464,996,572],{"class":529},[464,998,999],{"class":474},"2026-10-06T16:30:00+00:00",[464,1001,530],{"class":529},[464,1003,930],{"class":529},[464,1005,1006,1008,1010,1012,1014],{"class":466,"line":772},[464,1007,918],{"class":529},[464,1009,677],{"class":470},[464,1011,530],{"class":529},[464,1013,603],{"class":529},[464,1015,1016],{"class":529}," null,\n",[464,1018,1019,1021,1024,1026,1028],{"class":466,"line":778},[464,1020,918],{"class":529},[464,1022,1023],{"class":470},"approved",[464,1025,530],{"class":529},[464,1027,603],{"class":529},[464,1029,1030],{"class":529}," false,\n",[464,1032,1033,1035,1038,1040,1042],{"class":466,"line":784},[464,1034,918],{"class":529},[464,1036,1037],{"class":470},"cancelled",[464,1039,530],{"class":529},[464,1041,603],{"class":529},[464,1043,1030],{"class":529},[464,1045,1047,1049,1052,1054,1056,1058,1061,1063],{"class":466,"line":1046},11,[464,1048,918],{"class":529},[464,1050,1051],{"class":470},"source",[464,1053,530],{"class":529},[464,1055,603],{"class":529},[464,1057,572],{"class":529},[464,1059,1060],{"class":474},"partner",[464,1062,530],{"class":529},[464,1064,930],{"class":529},[464,1066,1068,1070,1072,1074,1076,1078,1081,1083],{"class":466,"line":1067},12,[464,1069,918],{"class":529},[464,1071,812],{"class":470},[464,1073,530],{"class":529},[464,1075,603],{"class":529},[464,1077,572],{"class":529},[464,1079,1080],{"class":474},"bk_8f3a21",[464,1082,530],{"class":529},[464,1084,930],{"class":529},[464,1086,1088,1090,1092,1094,1096,1098,1101,1103],{"class":466,"line":1087},13,[464,1089,918],{"class":529},[464,1091,630],{"class":470},[464,1093,530],{"class":529},[464,1095,603],{"class":529},[464,1097,572],{"class":529},[464,1099,1100],{"class":474},"Online: Horvat",[464,1102,530],{"class":529},[464,1104,930],{"class":529},[464,1106,1108,1110,1113,1115,1117,1119,1122],{"class":466,"line":1107},14,[464,1109,918],{"class":529},[464,1111,1112],{"class":470},"updated_at",[464,1114,530],{"class":529},[464,1116,603],{"class":529},[464,1118,572],{"class":529},[464,1120,1121],{"class":474},"2026-09-29T11:20:04+00:00",[464,1123,536],{"class":529},[464,1125,1127],{"class":466,"line":1126},15,[464,1128,1129],{"class":529},"  }\n",[464,1131,1133],{"class":466,"line":1132},16,[464,1134,1135],{"class":529},"}\n",[318,1137,1138,1139,1141],{},"Conservez ",[416,1140,614],{},". C'est ce qui vous permet de déplacer ou d'annuler la réservation. Les heures\nsont toujours renvoyées en UTC.",[1143,1144,1146],"h3",{"id":1145},"lenvoyer-deux-fois-est-sans-risque","L'envoyer deux fois est sans risque",[318,1148,1149,1151,1152,1154,1155,1158,1159,1162,1163,1166],{},[416,1150,812],{}," rend la requête idempotente. Renvoyer le même ",[416,1153,812],{}," tant que cette\nréservation existe répond ",[416,1156,1157],{},"200"," avec la réservation existante, ",[328,1160,1161],{},"inchangée",". Une nouvelle\ntentative après un délai dépassé ne bloque donc jamais un second court. Un nouvel envoi avec\nd'autres horaires ne déplace pas la réservation ; utilisez ",[416,1164,1165],{},"PATCH"," pour la déplacer.",[318,1168,1169,1170,1172],{},"Si la réservation a été annulée entre-temps, par vous ou par le club, renvoyer son\n",[416,1171,812],{}," la crée à nouveau.",[1143,1174,1176],{"id":1175},"lorsque-le-court-est-pris","Lorsque le court est pris",[455,1178,1180],{"className":583,"code":1179,"language":585,"meta":460,"style":460},"{\n  \"error\": \"slot_taken\",\n  \"error_description\": \"The court is already booked for some of that time.\",\n  \"conflicting_reservation_id\": 918102\n}\n",[416,1181,1182,1186,1206,1226,1240],{"__ignoreMap":460},[464,1183,1184],{"class":466,"line":467},[464,1185,752],{"class":529},[464,1187,1188,1190,1193,1195,1197,1199,1202,1204],{"class":466,"line":488},[464,1189,904],{"class":529},[464,1191,1192],{"class":597},"error",[464,1194,530],{"class":529},[464,1196,603],{"class":529},[464,1198,572],{"class":529},[464,1200,1201],{"class":474},"slot_taken",[464,1203,530],{"class":529},[464,1205,930],{"class":529},[464,1207,1208,1210,1213,1215,1217,1219,1222,1224],{"class":466,"line":499},[464,1209,904],{"class":529},[464,1211,1212],{"class":597},"error_description",[464,1214,530],{"class":529},[464,1216,603],{"class":529},[464,1218,572],{"class":529},[464,1220,1221],{"class":474},"The court is already booked for some of that time.",[464,1223,530],{"class":529},[464,1225,930],{"class":529},[464,1227,1228,1230,1233,1235,1237],{"class":466,"line":510},[464,1229,904],{"class":529},[464,1231,1232],{"class":597},"conflicting_reservation_id",[464,1234,530],{"class":529},[464,1236,603],{"class":529},[464,1238,1239],{"class":621}," 918102\n",[464,1241,1242],{"class":466,"line":521},[464,1243,1135],{"class":529},[318,1245,1246,1247,1250],{},"Statut ",[416,1248,1249],{},"409",". Une réservation peut commencer exactement quand une autre se termine ; tout\nchevauchement supérieur à zéro est un conflit.",[351,1252,1254],{"id":1253},"déplacer-une-réservation","Déplacer une réservation",[455,1256,1258],{"className":457,"code":1257,"language":459,"meta":460,"style":460},"curl -X PATCH https:\u002F\u002Fapi.sporty.plus\u002Fapi\u002Fpartner\u002Fv1\u002Freservations\u002F918273 \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"court_id\": 413, \"from\": \"2026-10-06T18:00:00+02:00\", \"to\": \"2026-10-06T19:30:00+02:00\"}'\n",[416,1259,1260,1274,1288,1300],{"__ignoreMap":460},[464,1261,1262,1264,1266,1269,1272],{"class":466,"line":467},[464,1263,471],{"class":470},[464,1265,475],{"class":474},[464,1267,1268],{"class":474}," PATCH",[464,1270,1271],{"class":474}," https:\u002F\u002Fapi.sporty.plus\u002Fapi\u002Fpartner\u002Fv1\u002Freservations\u002F918273",[464,1273,485],{"class":484},[464,1275,1276,1278,1280,1282,1284,1286],{"class":466,"line":488},[464,1277,569],{"class":474},[464,1279,572],{"class":529},[464,1281,575],{"class":474},[464,1283,578],{"class":484},[464,1285,530],{"class":529},[464,1287,485],{"class":484},[464,1289,1290,1292,1294,1296,1298],{"class":466,"line":499},[464,1291,569],{"class":474},[464,1293,572],{"class":529},[464,1295,738],{"class":474},[464,1297,530],{"class":529},[464,1299,485],{"class":484},[464,1301,1302,1304,1306,1309],{"class":466,"line":510},[464,1303,491],{"class":474},[464,1305,749],{"class":529},[464,1307,1308],{"class":474},"{\"court_id\": 413, \"from\": \"2026-10-06T18:00:00+02:00\", \"to\": \"2026-10-06T19:30:00+02:00\"}",[464,1310,790],{"class":529},[318,1312,1313,1314,844,1316,844,1318,844,1320,844,1322,1324,1325,1328,1329,370],{},"N'envoyez que ce qui change : ",[416,1315,828],{},[416,1317,630],{},[416,1319,677],{},[416,1321,843],{},[416,1323,847],{},". Chaque extrémité\nde l'horaire peut changer indépendamment, donc ",[416,1326,1327],{},"{\"to\": \"…\"}"," prolonge ou raccourcit une\nréservation. Le nouveau créneau est vérifié par rapport à toutes les autres réservations, et la\nréponse est la réservation mise à jour. Une modification qui ferait finir la réservation avant\nson début est refusée avec ",[416,1330,1331],{},"422 invalid_times",[318,1333,1334,1335,1338,1339,370],{},"Vous ne pouvez déplacer que les réservations ",[328,1336,1337],{},"envoyées par votre application",". Les\nréservations faites dans Sporty appartiennent aux membres et au club. Pour celles-ci, ainsi que\npour les réservations annulées, la réponse est ",[416,1340,1341],{},"404",[351,1343,1345],{"id":1344},"annuler-une-réservation","Annuler une réservation",[455,1347,1349],{"className":457,"code":1348,"language":459,"meta":460,"style":460},"curl -X DELETE https:\u002F\u002Fapi.sporty.plus\u002Fapi\u002Fpartner\u002Fv1\u002Freservations\u002F918273 \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\"\n",[416,1350,1351,1364],{"__ignoreMap":460},[464,1352,1353,1355,1357,1360,1362],{"class":466,"line":467},[464,1354,471],{"class":470},[464,1356,475],{"class":474},[464,1358,1359],{"class":474}," DELETE",[464,1361,1271],{"class":474},[464,1363,485],{"class":484},[464,1365,1366,1368,1370,1372,1374],{"class":466,"line":488},[464,1367,569],{"class":474},[464,1369,572],{"class":529},[464,1371,575],{"class":474},[464,1373,578],{"class":484},[464,1375,536],{"class":529},[318,1377,886,1378,1381],{},[416,1379,1380],{},"204",". Cela fonctionne pour n'importe quelle réservation du club, et se déroule\ncomme l'annulation par un administrateur du club. S'il s'agissait de la réservation d'un membre,\nil est remboursé sur le portefeuille de son club et averti de l'annulation.",[351,1383,1385],{"id":1384},"être-informé-des-réservations-faites-dans-sporty","Être informé des réservations faites dans Sporty",[1143,1387,1389],{"id":1388},"configurer-le-webhook","Configurer le webhook",[455,1391,1393],{"className":457,"code":1392,"language":459,"meta":460,"style":460},"curl -X PUT https:\u002F\u002Fapi.sporty.plus\u002Fapi\u002Fpartner\u002Fv1\u002Fwebhook \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"url\": \"https:\u002F\u002Fbookings.example.com\u002Fhooks\u002Fsporty\"}'\n",[416,1394,1395,1409,1423,1435],{"__ignoreMap":460},[464,1396,1397,1399,1401,1404,1407],{"class":466,"line":467},[464,1398,471],{"class":470},[464,1400,475],{"class":474},[464,1402,1403],{"class":474}," PUT",[464,1405,1406],{"class":474}," https:\u002F\u002Fapi.sporty.plus\u002Fapi\u002Fpartner\u002Fv1\u002Fwebhook",[464,1408,485],{"class":484},[464,1410,1411,1413,1415,1417,1419,1421],{"class":466,"line":488},[464,1412,569],{"class":474},[464,1414,572],{"class":529},[464,1416,575],{"class":474},[464,1418,578],{"class":484},[464,1420,530],{"class":529},[464,1422,485],{"class":484},[464,1424,1425,1427,1429,1431,1433],{"class":466,"line":499},[464,1426,569],{"class":474},[464,1428,572],{"class":529},[464,1430,738],{"class":474},[464,1432,530],{"class":529},[464,1434,485],{"class":484},[464,1436,1437,1439,1441,1444],{"class":466,"line":510},[464,1438,491],{"class":474},[464,1440,749],{"class":529},[464,1442,1443],{"class":474},"{\"url\": \"https:\u002F\u002Fbookings.example.com\u002Fhooks\u002Fsporty\"}",[464,1445,790],{"class":529},[455,1447,1449],{"className":583,"code":1448,"language":585,"meta":460,"style":460},"{\n  \"data\": {\n    \"url\": \"https:\u002F\u002Fbookings.example.com\u002Fhooks\u002Fsporty\",\n    \"delivered_up_to\": \"2026-09-29T11:25:00+00:00\",\n    \"last_delivered_at\": null,\n    \"last_failed_at\": null,\n    \"last_error\": null,\n    \"secret\": \"whsec_…\"\n  }\n}\n",[416,1450,1451,1455,1467,1487,1507,1520,1533,1546,1564,1568],{"__ignoreMap":460},[464,1452,1453],{"class":466,"line":467},[464,1454,752],{"class":529},[464,1456,1457,1459,1461,1463,1465],{"class":466,"line":488},[464,1458,904],{"class":529},[464,1460,598],{"class":597},[464,1462,530],{"class":529},[464,1464,603],{"class":529},[464,1466,913],{"class":529},[464,1468,1469,1471,1474,1476,1478,1480,1483,1485],{"class":466,"line":499},[464,1470,918],{"class":529},[464,1472,1473],{"class":470},"url",[464,1475,530],{"class":529},[464,1477,603],{"class":529},[464,1479,572],{"class":529},[464,1481,1482],{"class":474},"https:\u002F\u002Fbookings.example.com\u002Fhooks\u002Fsporty",[464,1484,530],{"class":529},[464,1486,930],{"class":529},[464,1488,1489,1491,1494,1496,1498,1500,1503,1505],{"class":466,"line":510},[464,1490,918],{"class":529},[464,1492,1493],{"class":470},"delivered_up_to",[464,1495,530],{"class":529},[464,1497,603],{"class":529},[464,1499,572],{"class":529},[464,1501,1502],{"class":474},"2026-09-29T11:25:00+00:00",[464,1504,530],{"class":529},[464,1506,930],{"class":529},[464,1508,1509,1511,1514,1516,1518],{"class":466,"line":521},[464,1510,918],{"class":529},[464,1512,1513],{"class":470},"last_delivered_at",[464,1515,530],{"class":529},[464,1517,603],{"class":529},[464,1519,1016],{"class":529},[464,1521,1522,1524,1527,1529,1531],{"class":466,"line":760},[464,1523,918],{"class":529},[464,1525,1526],{"class":470},"last_failed_at",[464,1528,530],{"class":529},[464,1530,603],{"class":529},[464,1532,1016],{"class":529},[464,1534,1535,1537,1540,1542,1544],{"class":466,"line":766},[464,1536,918],{"class":529},[464,1538,1539],{"class":470},"last_error",[464,1541,530],{"class":529},[464,1543,603],{"class":529},[464,1545,1016],{"class":529},[464,1547,1548,1550,1553,1555,1557,1559,1562],{"class":466,"line":772},[464,1549,918],{"class":529},[464,1551,1552],{"class":470},"secret",[464,1554,530],{"class":529},[464,1556,603],{"class":529},[464,1558,572],{"class":529},[464,1560,1561],{"class":474},"whsec_…",[464,1563,536],{"class":529},[464,1565,1566],{"class":466,"line":778},[464,1567,1129],{"class":529},[464,1569,1570],{"class":466,"line":784},[464,1571,1135],{"class":529},[1573,1574,1576,1581,1582,1585,1586,1589],"callout",{"icon":1575},"i-heroicons-key",[328,1577,1578,1580],{},[416,1579,1552],{}," n'est affiché qu'une fois",", dans cette réponse. Conservez-le. Pour le remplacer,\nenvoyez ",[416,1583,1584],{},"\"rotate_secret\": true"," avec le ",[416,1587,1588],{},"PUT"," suivant, et la réponse contiendra le nouveau.",[322,1591,1592,1606,1609,1616],{},[325,1593,1594,1595,1597,1598,1601,1602,1605],{},"Renvoyer un ",[416,1596,1588],{}," change l'URL. ",[416,1599,1600],{},"GET \u002Fwebhook"," affiche les paramètres actuels et l'état des\nlivraisons ; ",[416,1603,1604],{},"DELETE \u002Fwebhook"," arrête les livraisons.",[325,1607,1608],{},"Il y a un webhook par application et par club.",[325,1610,1611,1612,370],{},"Un nouveau webhook démarre au moment où vous le configurez. Pour tout ce qui précède, voir\n",[346,1613,1615],{"href":1614},"#rattraper-le-retard","rattraper le retard",[325,1617,1618,1619,1622,1623,370],{},"L'URL doit être en ",[416,1620,1621],{},"https",", ne contenir aucun identifiant et se résoudre vers une adresse\npublique. Tout le reste est refusé avec ",[416,1624,1625],{},"422",[1143,1627,1629],{"id":1628},"ce-qui-arrive","Ce qui arrive",[318,1631,1632,1633,1636],{},"Environ une fois par minute, tant que quelque chose a changé, vous recevez un ",[416,1634,1635],{},"POST"," comme\ncelui-ci :",[455,1638,1640],{"className":583,"code":1639,"language":585,"meta":460,"style":460},"{\n  \"id\": \"5d1c4e0a-4a59-4b8e-9a0e-2a7b8f6c9d12\",\n  \"club_id\": 57,\n  \"sent_at\": \"2026-09-29T11:31:07+00:00\",\n  \"events\": [\n    {\n      \"type\": \"reservation.created\",\n      \"reservation\": {\n        \"id\": 918301,\n        \"court_id\": 412,\n        \"court_name\": \"Teren 3\",\n        \"from\": \"2026-10-07T16:00:00+00:00\",\n        \"to\": \"2026-10-07T17:00:00+00:00\",\n        \"category_id\": null,\n        \"approved\": true,\n        \"cancelled\": false,\n        \"source\": \"sporty\",\n        \"external_id\": null,\n        \"name\": null,\n        \"updated_at\": \"2026-09-29T11:30:58+00:00\"\n      }\n    }\n  ]\n}\n",[416,1641,1642,1646,1665,1681,1701,1715,1720,1741,1754,1770,1784,1802,1821,1840,1852,1865,1877,1897,1910,1923,1941,1947,1953,1959],{"__ignoreMap":460},[464,1643,1644],{"class":466,"line":467},[464,1645,752],{"class":529},[464,1647,1648,1650,1652,1654,1656,1658,1661,1663],{"class":466,"line":488},[464,1649,904],{"class":529},[464,1651,614],{"class":597},[464,1653,530],{"class":529},[464,1655,603],{"class":529},[464,1657,572],{"class":529},[464,1659,1660],{"class":474},"5d1c4e0a-4a59-4b8e-9a0e-2a7b8f6c9d12",[464,1662,530],{"class":529},[464,1664,930],{"class":529},[464,1666,1667,1669,1672,1674,1676,1679],{"class":466,"line":499},[464,1668,904],{"class":529},[464,1670,1671],{"class":597},"club_id",[464,1673,530],{"class":529},[464,1675,603],{"class":529},[464,1677,1678],{"class":621}," 57",[464,1680,930],{"class":529},[464,1682,1683,1685,1688,1690,1692,1694,1697,1699],{"class":466,"line":510},[464,1684,904],{"class":529},[464,1686,1687],{"class":597},"sent_at",[464,1689,530],{"class":529},[464,1691,603],{"class":529},[464,1693,572],{"class":529},[464,1695,1696],{"class":474},"2026-09-29T11:31:07+00:00",[464,1698,530],{"class":529},[464,1700,930],{"class":529},[464,1702,1703,1705,1708,1710,1712],{"class":466,"line":521},[464,1704,904],{"class":529},[464,1706,1707],{"class":597},"events",[464,1709,530],{"class":529},[464,1711,603],{"class":529},[464,1713,1714],{"class":529}," [\n",[464,1716,1717],{"class":466,"line":760},[464,1718,1719],{"class":529},"    {\n",[464,1721,1722,1725,1728,1730,1732,1734,1737,1739],{"class":466,"line":766},[464,1723,1724],{"class":529},"      \"",[464,1726,1727],{"class":470},"type",[464,1729,530],{"class":529},[464,1731,603],{"class":529},[464,1733,572],{"class":529},[464,1735,1736],{"class":474},"reservation.created",[464,1738,530],{"class":529},[464,1740,930],{"class":529},[464,1742,1743,1745,1748,1750,1752],{"class":466,"line":772},[464,1744,1724],{"class":529},[464,1746,1747],{"class":470},"reservation",[464,1749,530],{"class":529},[464,1751,603],{"class":529},[464,1753,913],{"class":529},[464,1755,1756,1759,1761,1763,1765,1768],{"class":466,"line":778},[464,1757,1758],{"class":529},"        \"",[464,1760,614],{"class":621},[464,1762,530],{"class":529},[464,1764,603],{"class":529},[464,1766,1767],{"class":621}," 918301",[464,1769,930],{"class":529},[464,1771,1772,1774,1776,1778,1780,1782],{"class":466,"line":784},[464,1773,1758],{"class":529},[464,1775,828],{"class":621},[464,1777,530],{"class":529},[464,1779,603],{"class":529},[464,1781,943],{"class":621},[464,1783,930],{"class":529},[464,1785,1786,1788,1790,1792,1794,1796,1798,1800],{"class":466,"line":1046},[464,1787,1758],{"class":529},[464,1789,952],{"class":621},[464,1791,530],{"class":529},[464,1793,603],{"class":529},[464,1795,572],{"class":529},[464,1797,961],{"class":474},[464,1799,530],{"class":529},[464,1801,930],{"class":529},[464,1803,1804,1806,1808,1810,1812,1814,1817,1819],{"class":466,"line":1067},[464,1805,1758],{"class":529},[464,1807,843],{"class":621},[464,1809,530],{"class":529},[464,1811,603],{"class":529},[464,1813,572],{"class":529},[464,1815,1816],{"class":474},"2026-10-07T16:00:00+00:00",[464,1818,530],{"class":529},[464,1820,930],{"class":529},[464,1822,1823,1825,1827,1829,1831,1833,1836,1838],{"class":466,"line":1087},[464,1824,1758],{"class":529},[464,1826,847],{"class":621},[464,1828,530],{"class":529},[464,1830,603],{"class":529},[464,1832,572],{"class":529},[464,1834,1835],{"class":474},"2026-10-07T17:00:00+00:00",[464,1837,530],{"class":529},[464,1839,930],{"class":529},[464,1841,1842,1844,1846,1848,1850],{"class":466,"line":1107},[464,1843,1758],{"class":529},[464,1845,677],{"class":621},[464,1847,530],{"class":529},[464,1849,603],{"class":529},[464,1851,1016],{"class":529},[464,1853,1854,1856,1858,1860,1862],{"class":466,"line":1126},[464,1855,1758],{"class":529},[464,1857,1023],{"class":621},[464,1859,530],{"class":529},[464,1861,603],{"class":529},[464,1863,1864],{"class":529}," true,\n",[464,1866,1867,1869,1871,1873,1875],{"class":466,"line":1132},[464,1868,1758],{"class":529},[464,1870,1037],{"class":621},[464,1872,530],{"class":529},[464,1874,603],{"class":529},[464,1876,1030],{"class":529},[464,1878,1880,1882,1884,1886,1888,1890,1893,1895],{"class":466,"line":1879},17,[464,1881,1758],{"class":529},[464,1883,1051],{"class":621},[464,1885,530],{"class":529},[464,1887,603],{"class":529},[464,1889,572],{"class":529},[464,1891,1892],{"class":474},"sporty",[464,1894,530],{"class":529},[464,1896,930],{"class":529},[464,1898,1900,1902,1904,1906,1908],{"class":466,"line":1899},18,[464,1901,1758],{"class":529},[464,1903,812],{"class":621},[464,1905,530],{"class":529},[464,1907,603],{"class":529},[464,1909,1016],{"class":529},[464,1911,1913,1915,1917,1919,1921],{"class":466,"line":1912},19,[464,1914,1758],{"class":529},[464,1916,630],{"class":621},[464,1918,530],{"class":529},[464,1920,603],{"class":529},[464,1922,1016],{"class":529},[464,1924,1926,1928,1930,1932,1934,1936,1939],{"class":466,"line":1925},20,[464,1927,1758],{"class":529},[464,1929,1112],{"class":621},[464,1931,530],{"class":529},[464,1933,603],{"class":529},[464,1935,572],{"class":529},[464,1937,1938],{"class":474},"2026-09-29T11:30:58+00:00",[464,1940,536],{"class":529},[464,1942,1944],{"class":466,"line":1943},21,[464,1945,1946],{"class":529},"      }\n",[464,1948,1950],{"class":466,"line":1949},22,[464,1951,1952],{"class":529},"    }\n",[464,1954,1956],{"class":466,"line":1955},23,[464,1957,1958],{"class":529},"  ]\n",[464,1960,1962],{"class":466,"line":1961},24,[464,1963,1135],{"class":529},[322,1965,1966,1988,1993],{},[325,1967,1968,1970,1971],{},[416,1969,1727],{}," prend l'une des valeurs suivantes :\n",[322,1972,1973,1977,1983],{},[325,1974,1975],{},[416,1976,1736],{},[325,1978,1979,1982],{},[416,1980,1981],{},"reservation.updated",", lorsque la réservation a été déplacée, renommée ou modifiée d'une\nautre manière ;",[325,1984,1985,370],{},[416,1986,1987],{},"reservation.cancelled",[325,1989,1990,1992],{},[416,1991,1707],{}," contient jusqu'à environ 100 modifications, de la plus ancienne à la plus récente.",[325,1994,1995,1996,1998,1999,2002],{},"Les réservations des membres arrivent sans nom (",[416,1997,630],{}," vaut ",[416,2000,2001],{},"null",") et sans les personnes qui\ny participent. Vous voyez que le court est pris, et quand.",[318,2004,2005,2011,2012,2014,2015,2017,2018,2020,2021,2023,2024,2026,2027,370],{},[328,2006,2007,2008,2010],{},"Ne comptez pas sur ",[416,2009,1727],{}," pour être complet."," Les modifications sont regroupées entre deux\nlivraisons, si bien qu'une réservation créée puis annulée dans la même minute n'arrive que sous\nla forme ",[416,2013,1987],{},". Traitez ",[416,2016,1747],{}," comme l'état actuel de la réservation et\nappliquez-le : si ",[416,2019,1037],{}," vaut true, libérez le court ; sinon, bloquez-le sur ",[416,2022,828],{}," de\n",[416,2025,843],{}," à ",[416,2028,847],{},[318,2030,2031,2034,2035,2037],{},[328,2032,2033],{},"Vous n'êtes pas informé de vos propres modifications."," Une réservation que vous envoyez ou\ndéplacez ne vous est pas renvoyée. Lorsque vous annulez la réservation d'un membre, elle revient\nbien sous la forme ",[416,2036,1987],{},". Cet événement est sans conséquence, puisque le court\nest déjà libre dans votre copie.",[1143,2039,2041],{"id":2040},"répondre","Répondre",[318,2043,2044,2045,2048],{},"Répondez avec n'importe quel ",[416,2046,2047],{},"2xx"," dans les 10 secondes. Tout le reste compte comme un échec :\nun autre statut, un délai dépassé ou une redirection (nous ne suivons pas les redirections). Les\nmêmes modifications, plus tout ce qui est plus récent, sont alors renvoyées environ une minute\nplus tard, et ainsi de suite jusqu'à ce que vous les acceptiez. Rien n'est perdu, et l'ordre est\nconservé.",[318,2050,2051,2052,2055,2056,2059,2060,2062],{},"Cela signifie que ",[328,2053,2054],{},"vous recevrez parfois une modification deux fois",". Rendez le traitement\nidempotent : utilisez ",[416,2057,2058],{},"reservation.id"," comme clé, et ignorez une copie dont l'",[416,2061,1112],{}," n'est\npas plus récent que ce que vous avez déjà.",[318,2064,2065],{},"La livraison s'arrête dans chacun de ces cas :",[322,2067,2068,2071,2074,2077],{},[325,2069,2070],{},"le club retire son autorisation ;",[325,2072,2073],{},"votre application est révoquée ;",[325,2075,2076],{},"vous supprimez le webhook ;",[325,2078,2079,2080,370],{},"le club ",[346,2081,2083],{"href":2082},"#ce-que-voit-le-club","arrête le webhook",[318,2085,2086,2088,2089,2091],{},[416,2087,1600],{}," affiche ",[416,2090,1539],{}," si les livraisons échouent.",[1143,2093,2095],{"id":2094},"vérifier-la-signature","Vérifier la signature",[318,2097,2098],{},"Chaque livraison comporte :",[455,2100,2105],{"className":2101,"code":2103,"language":2104},[2102],"language-text","Sporty-Signature: t=1790680267,v1=6c4b1e9f…\n","text",[416,2106,2103],{"__ignoreMap":460},[318,2108,2109,2112,2113,2116,2117,2120],{},[416,2110,2111],{},"v1"," est le HMAC-SHA256 en hexadécimal de ",[416,2114,2115],{},"{t}.{raw body}",", avec votre secret de webhook comme\nclé. Vérifiez-le sur le corps ",[328,2118,2119],{},"brut"," de la requête avant de l'analyser, et rejetez les\nhorodatages anciens pour qu'une livraison interceptée ne puisse pas être rejouée.",[2122,2123,2124,2506],"code-group",{},[455,2125,2130],{"className":2126,"code":2127,"filename":2128,"language":2129,"meta":460,"style":460},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import crypto from 'node:crypto'\n\nexport function verifySporty(rawBody, header, secret, toleranceSeconds = 300) {\n  const parts = Object.fromEntries(header.split(',').map((kv) => kv.split('=')))\n  const expected = crypto.createHmac('sha256', secret).update(`${parts.t}.${rawBody}`).digest('hex')\n  const fresh = Math.abs(Date.now() \u002F 1000 - Number(parts.t)) \u003C= toleranceSeconds\n\n  return fresh && parts.v1?.length === expected.length\n    && crypto.timingSafeEqual(Buffer.from(parts.v1), Buffer.from(expected))\n}\n","Node.js","js",[416,2131,2132,2150,2156,2201,2277,2359,2418,2422,2454,2502],{"__ignoreMap":460},[464,2133,2134,2138,2141,2143,2145,2148],{"class":466,"line":467},[464,2135,2137],{"class":2136},"s7zQu","import",[464,2139,2140],{"class":484}," crypto ",[464,2142,843],{"class":2136},[464,2144,749],{"class":529},[464,2146,2147],{"class":474},"node:crypto",[464,2149,790],{"class":529},[464,2151,2152],{"class":466,"line":488},[464,2153,2155],{"emptyLinePlaceholder":2154},true,"\n",[464,2157,2158,2161,2164,2168,2171,2175,2177,2180,2182,2185,2187,2190,2193,2196,2199],{"class":466,"line":499},[464,2159,2160],{"class":2136},"export",[464,2162,2163],{"class":597}," function",[464,2165,2167],{"class":2166},"s2Zo4"," verifySporty",[464,2169,2170],{"class":529},"(",[464,2172,2174],{"class":2173},"sHdIc","rawBody",[464,2176,625],{"class":529},[464,2178,2179],{"class":2173}," header",[464,2181,625],{"class":529},[464,2183,2184],{"class":2173}," secret",[464,2186,625],{"class":529},[464,2188,2189],{"class":2173}," toleranceSeconds",[464,2191,2192],{"class":529}," =",[464,2194,2195],{"class":621}," 300",[464,2197,2198],{"class":529},")",[464,2200,913],{"class":529},[464,2202,2203,2206,2209,2211,2214,2216,2219,2222,2225,2227,2230,2232,2235,2237,2239,2241,2243,2246,2248,2250,2253,2255,2258,2261,2263,2265,2267,2269,2272,2274],{"class":466,"line":510},[464,2204,2205],{"class":597},"  const",[464,2207,2208],{"class":484}," parts",[464,2210,2192],{"class":529},[464,2212,2213],{"class":484}," Object",[464,2215,370],{"class":529},[464,2217,2218],{"class":2166},"fromEntries",[464,2220,2170],{"class":2221},"swJcz",[464,2223,2224],{"class":484},"header",[464,2226,370],{"class":529},[464,2228,2229],{"class":2166},"split",[464,2231,2170],{"class":2221},[464,2233,2234],{"class":529},"'",[464,2236,625],{"class":474},[464,2238,2234],{"class":529},[464,2240,2198],{"class":2221},[464,2242,370],{"class":529},[464,2244,2245],{"class":2166},"map",[464,2247,2170],{"class":2221},[464,2249,2170],{"class":529},[464,2251,2252],{"class":2173},"kv",[464,2254,2198],{"class":529},[464,2256,2257],{"class":597}," =>",[464,2259,2260],{"class":484}," kv",[464,2262,370],{"class":529},[464,2264,2229],{"class":2166},[464,2266,2170],{"class":2221},[464,2268,2234],{"class":529},[464,2270,2271],{"class":474},"=",[464,2273,2234],{"class":529},[464,2275,2276],{"class":2221},")))\n",[464,2278,2279,2281,2284,2286,2289,2291,2294,2296,2298,2301,2303,2305,2307,2309,2311,2314,2316,2319,2322,2324,2327,2330,2332,2335,2337,2340,2342,2344,2347,2349,2351,2354,2356],{"class":466,"line":521},[464,2280,2205],{"class":597},[464,2282,2283],{"class":484}," expected",[464,2285,2192],{"class":529},[464,2287,2288],{"class":484}," crypto",[464,2290,370],{"class":529},[464,2292,2293],{"class":2166},"createHmac",[464,2295,2170],{"class":2221},[464,2297,2234],{"class":529},[464,2299,2300],{"class":474},"sha256",[464,2302,2234],{"class":529},[464,2304,625],{"class":529},[464,2306,2184],{"class":484},[464,2308,2198],{"class":2221},[464,2310,370],{"class":529},[464,2312,2313],{"class":2166},"update",[464,2315,2170],{"class":2221},[464,2317,2318],{"class":529},"`${",[464,2320,2321],{"class":484},"parts",[464,2323,370],{"class":529},[464,2325,2326],{"class":484},"t",[464,2328,2329],{"class":529},"}",[464,2331,370],{"class":474},[464,2333,2334],{"class":529},"${",[464,2336,2174],{"class":484},[464,2338,2339],{"class":529},"}`",[464,2341,2198],{"class":2221},[464,2343,370],{"class":529},[464,2345,2346],{"class":2166},"digest",[464,2348,2170],{"class":2221},[464,2350,2234],{"class":529},[464,2352,2353],{"class":474},"hex",[464,2355,2234],{"class":529},[464,2357,2358],{"class":2221},")\n",[464,2360,2361,2363,2366,2368,2371,2373,2376,2378,2381,2383,2386,2389,2392,2395,2398,2401,2403,2405,2407,2409,2412,2415],{"class":466,"line":760},[464,2362,2205],{"class":597},[464,2364,2365],{"class":484}," fresh",[464,2367,2192],{"class":529},[464,2369,2370],{"class":484}," Math",[464,2372,370],{"class":529},[464,2374,2375],{"class":2166},"abs",[464,2377,2170],{"class":2221},[464,2379,2380],{"class":484},"Date",[464,2382,370],{"class":529},[464,2384,2385],{"class":2166},"now",[464,2387,2388],{"class":2221},"() ",[464,2390,2391],{"class":529},"\u002F",[464,2393,2394],{"class":621}," 1000",[464,2396,2397],{"class":529}," -",[464,2399,2400],{"class":2166}," Number",[464,2402,2170],{"class":2221},[464,2404,2321],{"class":484},[464,2406,370],{"class":529},[464,2408,2326],{"class":484},[464,2410,2411],{"class":2221},")) ",[464,2413,2414],{"class":529},"\u003C=",[464,2416,2417],{"class":484}," toleranceSeconds\n",[464,2419,2420],{"class":466,"line":766},[464,2421,2155],{"emptyLinePlaceholder":2154},[464,2423,2424,2427,2429,2432,2434,2436,2438,2441,2444,2447,2449,2451],{"class":466,"line":772},[464,2425,2426],{"class":2136},"  return",[464,2428,2365],{"class":484},[464,2430,2431],{"class":529}," &&",[464,2433,2208],{"class":484},[464,2435,370],{"class":529},[464,2437,2111],{"class":484},[464,2439,2440],{"class":529},"?.",[464,2442,2443],{"class":484},"length",[464,2445,2446],{"class":529}," ===",[464,2448,2283],{"class":484},[464,2450,370],{"class":529},[464,2452,2453],{"class":484},"length\n",[464,2455,2456,2459,2461,2463,2466,2468,2471,2473,2475,2477,2479,2481,2483,2485,2487,2490,2492,2494,2496,2499],{"class":466,"line":778},[464,2457,2458],{"class":529},"    &&",[464,2460,2288],{"class":484},[464,2462,370],{"class":529},[464,2464,2465],{"class":2166},"timingSafeEqual",[464,2467,2170],{"class":2221},[464,2469,2470],{"class":484},"Buffer",[464,2472,370],{"class":529},[464,2474,843],{"class":2166},[464,2476,2170],{"class":2221},[464,2478,2321],{"class":484},[464,2480,370],{"class":529},[464,2482,2111],{"class":484},[464,2484,2198],{"class":2221},[464,2486,625],{"class":529},[464,2488,2489],{"class":484}," Buffer",[464,2491,370],{"class":529},[464,2493,843],{"class":2166},[464,2495,2170],{"class":2221},[464,2497,2498],{"class":484},"expected",[464,2500,2501],{"class":2221},"))\n",[464,2503,2504],{"class":466,"line":784},[464,2505,1135],{"class":529},[455,2507,2512],{"className":2508,"code":2509,"filename":2510,"language":2511,"meta":460,"style":460},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","function verifySporty(string $rawBody, string $header, string $secret, int $tolerance = 300): bool\n{\n    parse_str(str_replace(',', '&', $header), $parts);\n    $expected = hash_hmac('sha256', $parts['t'].'.'.$rawBody, $secret);\n\n    return abs(time() - (int) $parts['t']) \u003C= $tolerance\n        && hash_equals($expected, $parts['v1'] ?? '');\n}\n","PHP","php",[416,2513,2514,2519,2523,2528,2533,2537,2542,2547],{"__ignoreMap":460},[464,2515,2516],{"class":466,"line":467},[464,2517,2518],{},"function verifySporty(string $rawBody, string $header, string $secret, int $tolerance = 300): bool\n",[464,2520,2521],{"class":466,"line":488},[464,2522,752],{},[464,2524,2525],{"class":466,"line":499},[464,2526,2527],{},"    parse_str(str_replace(',', '&', $header), $parts);\n",[464,2529,2530],{"class":466,"line":510},[464,2531,2532],{},"    $expected = hash_hmac('sha256', $parts['t'].'.'.$rawBody, $secret);\n",[464,2534,2535],{"class":466,"line":521},[464,2536,2155],{"emptyLinePlaceholder":2154},[464,2538,2539],{"class":466,"line":760},[464,2540,2541],{},"    return abs(time() - (int) $parts['t']) \u003C= $tolerance\n",[464,2543,2544],{"class":466,"line":766},[464,2545,2546],{},"        && hash_equals($expected, $parts['v1'] ?? '');\n",[464,2548,2549],{"class":466,"line":772},[464,2550,1135],{},[318,2552,2553],{},"Prévoyez qu'une livraison arrive avec plusieurs minutes de retard : elle est renvoyée jusqu'à ce\nque vous l'acceptiez, mais elle est signée à nouveau à chaque fois, donc la tolérance n'a qu'à\ncouvrir le décalage d'horloge.",[351,2555,2557],{"id":2556},"rattraper-le-retard","Rattraper le retard",[318,2559,2560],{},"Les mêmes modifications sont disponibles sur demande. Utilisez-les après une panne de votre\ncôté, lors de votre première connexion, ou comme vérification nocturne que les deux plannings\nconcordent :",[455,2562,2564],{"className":457,"code":2563,"language":459,"meta":460,"style":460},"curl \"https:\u002F\u002Fapi.sporty.plus\u002Fapi\u002Fpartner\u002Fv1\u002Freservations?updated_since=2026-09-28T00:00:00Z\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\"\n",[416,2565,2566,2579],{"__ignoreMap":460},[464,2567,2568,2570,2572,2575,2577],{"class":466,"line":467},[464,2569,471],{"class":470},[464,2571,572],{"class":529},[464,2573,2574],{"class":474},"https:\u002F\u002Fapi.sporty.plus\u002Fapi\u002Fpartner\u002Fv1\u002Freservations?updated_since=2026-09-28T00:00:00Z",[464,2576,530],{"class":529},[464,2578,485],{"class":484},[464,2580,2581,2583,2585,2587,2589],{"class":466,"line":488},[464,2582,569],{"class":474},[464,2584,572],{"class":529},[464,2586,575],{"class":474},[464,2588,578],{"class":484},[464,2590,536],{"class":529},[318,2592,2593,2594,2597,2598,2601,2602,2605,2606,2609,2610,2612],{},"Avec ",[416,2595,2596],{},"updated_since",", la liste contient toutes les réservations modifiées à cet instant ou\naprès, de la modification la plus ancienne à la plus récente, ",[328,2599,2600],{},"annulations comprises",".\nParcourez les pages avec ",[416,2603,2604],{},"per_page"," (jusqu'à 100) et ",[416,2607,2608],{},"page",". Pour reprendre plus tard, repartez\ndu dernier ",[416,2611,1112],{}," que vous avez vu ; vous reverrez peut-être cette réservation, ce qui est\nsans conséquence.",[318,2614,2615,2618],{},[416,2616,2617],{},"GET \u002Freservations\u002F{id}"," lit une seule réservation, annulée ou non.",[351,2620,2622],{"id":2621},"erreurs","Erreurs",[392,2624,2625,2639],{},[395,2626,2627],{},[398,2628,2629,2632,2636],{},[401,2630,2631],{},"Statut",[401,2633,2634],{},[416,2635,1192],{},[401,2637,2638],{},"Signification",[408,2640,2641,2657,2671,2685,2699,2716,2733,2747],{},[398,2642,2643,2647,2651],{},[413,2644,2645],{},[416,2646,1249],{},[413,2648,2649],{},[416,2650,1201],{},[413,2652,2653,2654,2656],{},"Le court est réservé sur une partie de cet horaire. ",[416,2655,1232],{}," indique par quelle réservation.",[398,2658,2659,2663,2668],{},[413,2660,2661],{},[416,2662,1625],{},[413,2664,2665],{},[416,2666,2667],{},"unknown_court",[413,2669,2670],{},"Le club n'a pas de court de ce type.",[398,2672,2673,2677,2682],{},[413,2674,2675],{},[416,2676,1625],{},[413,2678,2679],{},[416,2680,2681],{},"unknown_category",[413,2683,2684],{},"Le club n'a pas de catégorie de réservation de ce type.",[398,2686,2687,2691,2696],{},[413,2688,2689],{},[416,2690,1625],{},[413,2692,2693],{},[416,2694,2695],{},"invalid_times",[413,2697,2698],{},"La réservation finirait avant de commencer.",[398,2700,2701,2705,2710],{},[413,2702,2703],{},[416,2704,1341],{},[413,2706,2707],{},[416,2708,2709],{},"not_found",[413,2711,2712,2713,2715],{},"Aucune réservation de ce type dans ce club ; pour ",[416,2714,1165],{},", aucune envoyée par votre application.",[398,2717,2718,2722,2727],{},[413,2719,2720],{},[416,2721,1249],{},[413,2723,2724],{},[416,2725,2726],{},"not_cancelable",[413,2728,2729,2730,2732],{},"La réservation n'a pas pu être annulée ; ",[416,2731,1212],{}," indique pourquoi.",[398,2734,2735,2739,2744],{},[413,2736,2737],{},[416,2738,1249],{},[413,2740,2741],{},[416,2742,2743],{},"no_acting_admin",[413,2745,2746],{},"Aucun administrateur du club n'est enregistré comme ayant accordé l'accès à votre application. Demandez au club de l'accorder à nouveau.",[398,2748,2749,2753,2758],{},[413,2750,2751],{},[416,2752,1249],{},[413,2754,2755],{},[416,2756,2757],{},"no_courts",[413,2759,2760],{},"Le club n'a aucun court à réserver.",[318,2762,2763,2764,844,2767,844,2770,2773,2774,370],{},"Les erreurs générales (",[416,2765,2766],{},"401",[416,2768,2769],{},"403 insufficient_scope",[416,2771,2772],{},"429",", etc.) sont listées sur la page de\nl'",[346,2775,2777],{"href":2776},"\u002Ffr\u002Foauth\u002Fpartner-api#erreurs","API partenaire",[351,2779,2781],{"id":2780},"ce-que-voit-le-club","Ce que voit le club",[318,2783,2784],{},"Chaque réservation que vous bloquez, déplacez ou annulez est enregistrée au nom de\nl'administrateur du club qui a accordé l'accès à votre application. Si le club a enregistré\nl'application lui-même, elle est enregistrée au nom de l'administrateur qui l'a enregistrée.\nLorsque vous annulez la réservation d'un membre, c'est le nom de cet administrateur qui figure\ndans la notification du membre. Prévenez le club, pour que personne ne soit surpris.",[318,2786,2787,2788,2791],{},"Le club voit aussi votre webhook. Sous ",[328,2789,2790],{},"Paramètres → Clients API",", un administrateur du club\nvoit :",[322,2793,2794,2797,2800],{},[325,2795,2796],{},"son URL ;",[325,2798,2799],{},"s'il livre, s'il échoue ou s'il n'a encore rien envoyé ;",[325,2801,2802],{},"la date de sa dernière livraison, et la dernière erreur tant qu'il échoue.",[318,2804,2805,2806,2809],{},"Le secret n'y est jamais affiché. ",[328,2807,2808],{},"Faites en sorte que votre point de terminaison continue de\nrépondre."," Un webhook qui échoue pendant des jours, c'est ce qu'un club remarque, et ce qu'il\narrête.",[318,2811,2812],{},"L'administrateur peut arrêter votre webhook sans retirer votre accès. Ensuite :",[322,2814,2815,2823,2826],{},[325,2816,2817,2819,2820,2822],{},[416,2818,1600],{}," répond ",[416,2821,1341],{}," ;",[325,2824,2825],{},"votre jeton fonctionne toujours ;",[325,2827,2828,2829,2831],{},"un ",[416,2830,1588],{}," configure un nouveau webhook, avec un nouveau secret, qui est informé des\nmodifications à partir de ce moment.",[318,2833,2834,2835,2838],{},"Appelez ",[416,2836,2837],{},"GET \u002Freservations?updated_since=…"," à partir de votre dernière livraison reçue, pour\nrécupérer ce qui s'est passé pendant que le webhook était arrêté.",[2840,2841,2842],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}",{"title":460,"searchDepth":488,"depth":488,"links":2844},[2845,2846,2847,2848,2852,2853,2854,2860,2861,2862],{"id":353,"depth":488,"text":354},{"id":386,"depth":488,"text":387},{"id":546,"depth":488,"text":547},{"id":681,"depth":488,"text":682,"children":2849},[2850,2851],{"id":1145,"depth":499,"text":1146},{"id":1175,"depth":499,"text":1176},{"id":1253,"depth":488,"text":1254},{"id":1344,"depth":488,"text":1345},{"id":1384,"depth":488,"text":1385,"children":2855},[2856,2857,2858,2859],{"id":1388,"depth":499,"text":1389},{"id":1628,"depth":499,"text":1629},{"id":2040,"depth":499,"text":2041},{"id":2094,"depth":499,"text":2095},{"id":2556,"depth":488,"text":2557},{"id":2621,"depth":488,"text":2622},{"id":2780,"depth":488,"text":2781},"Gardez votre système de réservation et le planning Sporty d'un club en accord, dans les deux sens.","md",null,{},{"icon":278},{"title":2869,"description":2870},"Synchronisation bidirectionnelle des réservations de courts avec l'API partenaire Sporty","Bloquez les courts pour les réservations prises dans votre système, et recevez des webhooks signés pour les réservations prises dans Sporty.","tLIdwRLUNmRlzt1pKIHzmgrhAoWjkoEUi3TVWgXYEqE",[2873,2875],{"title":296,"path":297,"stem":298,"description":2874,"icon":278,"children":-1},"Ce qu'un jeton d'accès peut réellement lire et écrire, et ce qu'il ne peut délibérément pas faire.",{"title":304,"path":305,"stem":306,"description":2876,"icon":278,"children":-1},"L'enregistrement dynamique des clients, et ce qu'un client auto-enregistré peut et ne peut pas faire.",1792420862376]