[{"data":1,"prerenderedAt":861},["ShallowReactive",2],{"navigation_docs_en":3,"-en-oauth-scopes":312,"-en-oauth-scopes-surround":856},[4,17,210,237,272],{"title":5,"path":6,"stem":7,"children":8,"icon":11},"Getting started","\u002Fen\u002Fgetting-started","en\u002F0.getting-started\u002F1.index",[9,12],{"title":10,"path":6,"stem":7,"icon":11},"Tour of the admin","sporty-toggle-large-on",{"title":13,"path":14,"stem":15,"icon":16},"First-week setup","\u002Fen\u002Fgetting-started\u002Ffirst-week-setup","en\u002F0.getting-started\u002F2.first-week-setup","sporty-calendar-check",{"title":18,"path":19,"stem":20,"children":21,"page":209},"Interface","\u002Fen\u002Finterface","en\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","\u002Fen\u002Finterface\u002Fcourts","en\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},"Access control and lights","\u002Fen\u002Finterface\u002Fcourts\u002Fintegrations","en\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","\u002Fen\u002Finterface\u002Fcourts\u002Fintegrations\u002Fweblock","en\u002F1.interface\u002F01.courts\u002F5.integrations\u002F2.weblock","sporty-door-open",{"title":41,"path":42,"stem":43,"icon":44},"Shelly","\u002Fen\u002Finterface\u002Fcourts\u002Fintegrations\u002Fshelly","en\u002F1.interface\u002F01.courts\u002F5.integrations\u002F3.shelly","sporty-bolt",{"title":46,"path":47,"stem":48,"children":49,"icon":39},"UniFi Access","\u002Fen\u002Finterface\u002Fcourts\u002Fintegrations\u002Funifi-access","en\u002F1.interface\u002F01.courts\u002F5.integrations\u002F4.unifi-access\u002F1.index",[50,52,56,61],{"title":51,"path":47,"stem":48,"icon":39},"Overview",{"title":53,"path":54,"stem":55,"icon":11},"Connect the VPN","\u002Fen\u002Finterface\u002Fcourts\u002Fintegrations\u002Funifi-access\u002Fvpn","en\u002F1.interface\u002F01.courts\u002F5.integrations\u002F4.unifi-access\u002F2.vpn",{"title":57,"path":58,"stem":59,"icon":60},"Create an API token","\u002Fen\u002Finterface\u002Fcourts\u002Fintegrations\u002Funifi-access\u002Fapi-token","en\u002F1.interface\u002F01.courts\u002F5.integrations\u002F4.unifi-access\u002F3.api-token","sporty-gear",{"title":62,"path":63,"stem":64,"icon":28},"Set it up in Club Admin","\u002Fen\u002Finterface\u002Fcourts\u002Fintegrations\u002Funifi-access\u002Fclub-admin","en\u002F1.interface\u002F01.courts\u002F5.integrations\u002F4.unifi-access\u002F4.club-admin",{"title":66,"path":67,"stem":68,"children":69,"icon":71},"Members","\u002Fen\u002Finterface\u002Fmembers","en\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},"Memberships","\u002Fen\u002Finterface\u002Fmemberships","en\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},"Leagues","\u002Fen\u002Finterface\u002Fleagues","en\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},"Planned competitions","\u002Fen\u002Finterface\u002Fleagues\u002Fplanned-competitions","en\u002F1.interface\u002F04.leagues\u002F2.planned-competitions",{"title":91,"path":92,"stem":93,"children":94,"icon":96},"Tournaments","\u002Fen\u002Finterface\u002Ftournaments","en\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},"Payments and subscriptions","\u002Fen\u002Finterface\u002Fpayments","en\u002F1.interface\u002F06.payments\u002F1.index",[102],{"title":103,"path":99,"stem":100,"icon":104},"Payments","sporty-credit-card",{"title":106,"path":107,"stem":108,"children":109,"icon":111},"Shop","\u002Fen\u002Finterface\u002Fshop","en\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},"Schools and coaches","\u002Fen\u002Finterface\u002Fschools","en\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},"Emails","\u002Fen\u002Finterface\u002Femails","en\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},"Video and cameras","\u002Fen\u002Finterface\u002Fvideo","en\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},"Dahua cameras","\u002Fen\u002Finterface\u002Fvideo\u002Fdahua","en\u002F1.interface\u002F10.video\u002F2.dahua",{"title":138,"path":139,"stem":140,"icon":141},"Other RTMP cameras","\u002Fen\u002Finterface\u002Fvideo\u002Frtmp","en\u002F1.interface\u002F10.video\u002F3.rtmp","sporty-video",{"title":143,"path":144,"stem":145,"icon":146},"Match analytics","\u002Fen\u002Finterface\u002Fvideo\u002Fanalytics","en\u002F1.interface\u002F10.video\u002F4.analytics","sporty-chart-simple",{"title":148,"path":149,"stem":150,"children":151,"icon":153},"Reports","\u002Fen\u002Finterface\u002Freports","en\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},"Settings","\u002Fen\u002Finterface\u002Fsettings","en\u002F1.interface\u002F12.settings\u002F1.index",[159,161,165,169],{"title":160,"path":156,"stem":157,"icon":60},"Club settings",{"title":162,"path":163,"stem":164,"icon":16},"Booking rules and price list","\u002Fen\u002Finterface\u002Fsettings\u002Fbooking-rules","en\u002F1.interface\u002F12.settings\u002F2.booking-rules",{"title":166,"path":167,"stem":168,"icon":78},"Sign-up and legal pages","\u002Fen\u002Finterface\u002Fsettings\u002Fsignup-and-legal","en\u002F1.interface\u002F12.settings\u002F3.signup-and-legal",{"title":170,"path":171,"stem":172,"icon":173},"Administrators and roles","\u002Fen\u002Finterface\u002Fsettings\u002Fadministrators-and-roles","en\u002F1.interface\u002F12.settings\u002F4.administrators-and-roles","sporty-user",{"title":175,"path":176,"stem":177,"children":178,"icon":180},"Social publishing","\u002Fen\u002Finterface\u002Fsocial","en\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},"Connecting channels","\u002Fen\u002Finterface\u002Fsocial\u002Fchannels","en\u002F1.interface\u002F13.social\u002F2.channels",{"title":186,"path":187,"stem":188,"children":189,"icon":28},"Seated events","\u002Fen\u002Finterface\u002Fseated-events","en\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},"Seating plans","\u002Fen\u002Finterface\u002Fseated-events\u002Fseating-plans","en\u002F1.interface\u002F14.seated-events\u002F2.seating-plans",{"title":196,"path":197,"stem":198,"icon":16},"Selling seats","\u002Fen\u002Finterface\u002Fseated-events\u002Fselling-seats","en\u002F1.interface\u002F14.seated-events\u002F3.selling-seats",{"title":200,"path":201,"stem":202,"icon":39},"On sale and at the door","\u002Fen\u002Finterface\u002Fseated-events\u002Fon-sale","en\u002F1.interface\u002F14.seated-events\u002F4.on-sale",{"title":204,"path":205,"stem":206,"children":207,"icon":16},"Season tickets","\u002Fen\u002Finterface\u002Fseason-tickets","en\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},"Website","\u002Fen\u002Fwebsite","en\u002F2.website\u002F1.index",[215,218,223,227,232],{"title":216,"path":212,"stem":213,"icon":217},"Website builder","sporty-browser",{"title":219,"path":220,"stem":221,"icon":222},"Pages, hero and footer","\u002Fen\u002Fwebsite\u002Fpages","en\u002F2.website\u002F2.pages","sporty-file-lines",{"title":224,"path":225,"stem":226,"icon":180},"News and events","\u002Fen\u002Fwebsite\u002Fnews-and-events","en\u002F2.website\u002F3.news-and-events",{"title":228,"path":229,"stem":230,"icon":231},"Coaches and gallery","\u002Fen\u002Fwebsite\u002Fcoaches-and-gallery","en\u002F2.website\u002F4.coaches-and-gallery","sporty-images",{"title":233,"path":234,"stem":235,"icon":236},"FAQ and sponsors","\u002Fen\u002Fwebsite\u002Ffaq-and-sponsors","en\u002F2.website\u002F5.faq-and-sponsors","sporty-circle-question",{"title":238,"path":239,"stem":240,"children":241,"icon":173},"For members","\u002Fen\u002Fmembers","en\u002F3.members\u002F1.index",[242,244,248,252,256,260,264,268],{"title":243,"path":239,"stem":240,"icon":173},"Using the member app",{"title":245,"path":246,"stem":247,"icon":16},"Booking a court","\u002Fen\u002Fmembers\u002Fbooking","en\u002F3.members\u002F2.booking",{"title":249,"path":250,"stem":251,"icon":104},"Memberships and payments","\u002Fen\u002Fmembers\u002Fpayments","en\u002F3.members\u002F3.payments",{"title":253,"path":254,"stem":255,"icon":85},"How competitions work","\u002Fen\u002Fmembers\u002Fhow-competitions-work","en\u002F3.members\u002F4.how-competitions-work",{"title":257,"path":258,"stem":259,"icon":96},"Leagues, tournaments and results","\u002Fen\u002Fmembers\u002Fcompetitions","en\u002F3.members\u002F5.competitions",{"title":261,"path":262,"stem":263,"icon":71},"Family and children","\u002Fen\u002Fmembers\u002Ffamily","en\u002F3.members\u002F6.family",{"title":265,"path":266,"stem":267,"icon":78},"Your account","\u002Fen\u002Fmembers\u002Faccount","en\u002F3.members\u002F7.account",{"title":269,"path":270,"stem":271,"icon":236},"Getting help","\u002Fen\u002Fmembers\u002Fhelp","en\u002F3.members\u002F8.help",{"title":273,"path":274,"stem":275,"children":276,"icon":278},"OAuth & Sign in with Sporty","\u002Fen\u002Foauth","en\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},"Registering an application","\u002Fen\u002Foauth\u002Fclients","en\u002F4.oauth\u002F2.clients",{"title":284,"path":285,"stem":286,"icon":278},"The authorization code flow","\u002Fen\u002Foauth\u002Fauthorization-code","en\u002F4.oauth\u002F3.authorization-code",{"title":288,"path":289,"stem":290,"icon":278},"Scopes","\u002Fen\u002Foauth\u002Fscopes","en\u002F4.oauth\u002F4.scopes",{"title":292,"path":293,"stem":294,"icon":278},"Sign in with Sporty","\u002Fen\u002Foauth\u002Fsign-in-with-sporty","en\u002F4.oauth\u002F5.sign-in-with-sporty",{"title":296,"path":297,"stem":298,"icon":278},"The partner API","\u002Fen\u002Foauth\u002Fpartner-api","en\u002F4.oauth\u002F6.partner-api",{"title":300,"path":301,"stem":302,"icon":278},"Syncing bookings","\u002Fen\u002Foauth\u002Fbooking-sync","en\u002F4.oauth\u002F7.booking-sync",{"title":304,"path":305,"stem":306,"icon":278},"MCP and AI clients","\u002Fen\u002Foauth\u002Fmcp-and-ai-clients","en\u002F4.oauth\u002F8.mcp-and-ai-clients",{"title":308,"path":309,"stem":310,"icon":311},"Agent checkout","\u002Fen\u002Foauth\u002Fagent-checkout","en\u002F4.oauth\u002F9.agent-checkout","sporty-cart-shopping",{"id":313,"title":288,"body":314,"description":847,"extension":848,"links":849,"meta":850,"navigation":851,"path":289,"seo":852,"stem":290,"__hash__":855},"docs_en\u002Fen\u002F4.oauth\u002F4.scopes.md",{"type":315,"value":316,"toc":835},"minimark",[317,321,329,355,360,419,423,514,518,642,646,649,688,692,758,764,770,776,798,805,809,812,829],[318,319,320],"p",{},"Ask for the least you need. The consent screen shows the member the description below, word\nfor word, so a long list of scopes is a long list of reasons to decline.",[318,322,323,324,328],{},"Anything not on this list is refused with ",[325,326,327],"code",{},"invalid_scope",".",[330,331,333,337,338,342,343,346,347,350,351,354],"callout",{"icon":332},"i-heroicons-information-circle",[334,335,336],"strong",{},"Some scopes are named ahead of the API."," A scope marked ",[339,340,341],"em",{},"Not yet"," can be requested, and a\nmember can approve it, but no endpoint answers to it yet, so a token holding it reaches nothing\nmore. Build against the scopes marked ",[339,344,345],{},"Yes",". The discovery documents\n(",[325,348,349],{},"\u002F.well-known\u002Foauth-authorization-server"," and the others) advertise exactly those in\n",[325,352,353],{},"scopes_supported",", and a scope appears there the day an endpoint starts serving it.",[356,357,359],"h2",{"id":358},"identity","Identity",[361,362,363,379],"table",{},[364,365,366],"thead",{},[367,368,369,373,376],"tr",{},[370,371,372],"th",{},"Scope",[370,374,375],{},"What the member is told",[370,377,378],{},"Available",[380,381,382,395,407],"tbody",{},[367,383,384,390,393],{},[385,386,387],"td",{},[325,388,389],{},"openid",[385,391,392],{},"Confirm who you are",[385,394,345],{},[367,396,397,402,405],{},[385,398,399],{},[325,400,401],{},"profile",[385,403,404],{},"See your name and profile picture",[385,406,345],{},[367,408,409,414,417],{},[385,410,411],{},[325,412,413],{},"email",[385,415,416],{},"See your email address",[385,418,345],{},[356,420,422],{"id":421},"the-members-own-data","The member's own data",[361,424,425,435],{},[364,426,427],{},[367,428,429,431,433],{},[370,430,372],{},[370,432,375],{},[370,434,378],{},[380,436,437,449,461,473,490,502],{},[367,438,439,444,447],{},[385,440,441],{},[325,442,443],{},"me.read",[385,445,446],{},"See your basic profile",[385,448,345],{},[367,450,451,456,459],{},[385,452,453],{},[325,454,455],{},"me.reservations.read",[385,457,458],{},"See your court bookings",[385,460,345],{},[367,462,463,468,471],{},[385,464,465],{},[325,466,467],{},"me.reservations.write",[385,469,470],{},"Book and cancel courts for you",[385,472,345],{},[367,474,475,480,483],{},[385,476,477],{},[325,478,479],{},"me.purchases.write",[385,481,482],{},"Buy court time for you, with a card you give the application",[385,484,485,486],{},"Yes, ",[487,488,489],"a",{"href":309},"agent checkout",[367,491,492,497,500],{},[385,493,494],{},[325,495,496],{},"me.results.read",[385,498,499],{},"See your match results",[385,501,345],{},[367,503,504,509,512],{},[385,505,506],{},[325,507,508],{},"me.memberships.read",[385,510,511],{},"See which clubs you belong to",[385,513,345],{},[356,515,517],{"id":516},"a-clubs-data","A club's data",[361,519,520,530],{},[364,521,522],{},[367,523,524,526,528],{},[370,525,372],{},[370,527,375],{},[370,529,378],{},[380,531,532,544,556,568,580,592,604,618,630],{},[367,533,534,539,542],{},[385,535,536],{},[325,537,538],{},"club.read",[385,540,541],{},"See the club's public details",[385,543,345],{},[367,545,546,551,554],{},[385,547,548],{},[325,549,550],{},"club.members.read",[385,552,553],{},"See the club's members",[385,555,345],{},[367,557,558,563,566],{},[385,559,560],{},[325,561,562],{},"club.members.write",[385,564,565],{},"Add and update the club's members",[385,567,345],{},[367,569,570,575,578],{},[385,571,572],{},[325,573,574],{},"club.courts.read",[385,576,577],{},"See the club's courts",[385,579,345],{},[367,581,582,587,590],{},[385,583,584],{},[325,585,586],{},"club.reservations.read",[385,588,589],{},"See the club's bookings",[385,591,345],{},[367,593,594,599,602],{},[385,595,596],{},[325,597,598],{},"club.reservations.write",[385,600,601],{},"Make and cancel the club's bookings",[385,603,345],{},[367,605,606,611,614],{},[385,607,608],{},[325,609,610],{},"club.checkout.write",[385,612,613],{},"Sell the club's court time to guests the application brings",[385,615,485,616],{},[487,617,489],{"href":309},[367,619,620,625,628],{},[385,621,622],{},[325,623,624],{},"club.events.read",[385,626,627],{},"See the club's events",[385,629,341],{},[367,631,632,637,640],{},[385,633,634],{},[325,635,636],{},"club.shop.orders.read",[385,638,639],{},"See the club's shop orders",[385,641,341],{},[356,643,645],{"id":644},"partner","Partner",[318,647,648],{},"Client credentials only — these describe an application acting with no member present.",[361,650,651,662],{},[364,652,653],{},[367,654,655,657,660],{},[370,656,372],{},[370,658,659],{},"Meaning",[370,661,378],{},[380,663,664,676],{},[367,665,666,671,674],{},[385,667,668],{},[325,669,670],{},"partner.members.provision",[385,672,673],{},"Create members on behalf of a partner",[385,675,341],{},[367,677,678,683,686],{},[385,679,680],{},[325,681,682],{},"partner.login.handoff",[385,684,685],{},"Sign a member in from a partner app",[385,687,345],{},[356,689,691],{"id":690},"who-may-ask-for-what","Who may ask for what",[361,693,694,704],{},[364,695,696],{},[367,697,698,701],{},[370,699,700],{},"Client",[370,702,703],{},"May request",[380,705,706,726,742],{},[367,707,708,711],{},[385,709,710],{},"Registered by a club administrator, or by us",[385,712,713,715,716,715,718,715,720,715,723],{},[325,714,389],{},", ",[325,717,401],{},[325,719,413],{},[325,721,722],{},"me.*",[325,724,725],{},"club.*",[367,727,728,731],{},[385,729,730],{},"Self-registered (dynamic)",[385,732,733,715,735,715,737,715,739,741],{},[325,734,389],{},[325,736,401],{},[325,738,413],{},[325,740,722],{}," — never a club's data",[367,743,744,747],{},[385,745,746],{},"Client credentials",[385,748,749,715,752,754,755,757],{},[325,750,751],{},"partner.*",[325,753,725],{}," — ",[325,756,722],{}," means nothing without a member",[356,759,761,763],{"id":760},"club-needs-the-clubs-permission-too",[325,762,725],{}," needs the club's permission too",[318,765,766,767,769],{},"Holding a ",[325,768,725],{}," scope is not the same as being allowed to use it.",[318,771,772,773,775],{},"Before a ",[325,774,725],{}," scope does anything, three separate parties must have agreed:",[777,778,779,786,792],"ol",{},[780,781,782,785],"li",{},[334,783,784],{},"Sporty"," approved your application;",[780,787,788,791],{},[334,789,790],{},"the club's administrator"," granted your application that club, and that scope;",[780,793,794,797],{},[334,795,796],{},"the member"," (where there is one) authorised your application for that club.",[318,799,800,801,804],{},"Any of the three can withdraw on their own, at any time, and your access ends at that moment.\nIf a club has not granted you, calls answer ",[325,802,803],{},"403 access_denied"," with a message saying an\nadministrator must approve you first — not an error to retry, but one to go and ask about.",[356,806,808],{"id":807},"which-club-a-token-acts-for","Which club a token acts for",[318,810,811],{},"You never tell us in the request body; we work it out from your client.",[813,814,815,818],"ul",{},[780,816,817],{},"A client belonging to one club always acts for that club.",[780,819,820,821,824,825,828],{},"A client granted several clubs must name one with the ",[325,822,823],{},"X-Club"," header. Without it you get\n",[325,826,827],{},"400 club_required",". The header chooses among clubs you have already been granted — it\ncannot give you one.",[318,830,831,834],{},[325,832,833],{},"GET \u002Fapi\u002Fpartner\u002Fv1\u002Fclubs\u002Fme"," tells you which club a token ended up acting for.",{"title":836,"searchDepth":837,"depth":837,"links":838},"",2,[839,840,841,842,843,844,846],{"id":358,"depth":837,"text":359},{"id":421,"depth":837,"text":422},{"id":516,"depth":837,"text":517},{"id":644,"depth":837,"text":645},{"id":690,"depth":837,"text":691},{"id":760,"depth":837,"text":845},"club.* needs the club's permission too",{"id":807,"depth":837,"text":808},"Every scope, what the member is told it means, and which kinds of client may ask for it.","md",null,{},{"icon":278},{"title":853,"description":854},"Sporty OAuth scopes","The full scope catalogue and the rules about who may request what.","RRyMW_Acv-4IdeGt1PoDGnaU5NKHeesbpF9FMGe_cic",[857,859],{"title":284,"path":285,"stem":286,"description":858,"icon":278,"children":-1},"The whole flow with real requests, from sending someone to Sporty to refreshing a token.",{"title":292,"path":293,"stem":294,"description":860,"icon":278,"children":-1},"OpenID Connect — the id_token, its claims, \u002Fuserinfo and verifying a signature.",1792420865764]