[{"data":1,"prerenderedAt":773},["ShallowReactive",2],{"navigation_docs":3,"-oauth-scopes":224,"-oauth-scopes-surround":768},[4,157,184],{"title":5,"path":6,"stem":7,"children":8,"page":156},"Interface","\u002Finterface","1.interface",[9,53,61,68,75,82,90,97,104,111,132,139,145],{"title":10,"path":11,"stem":12,"children":13,"icon":15},"Courts","\u002Finterface\u002Fcourts","1.interface\u002F01.courts\u002F1.index",[14,16],{"title":10,"path":11,"stem":12,"icon":15},"sporty-court-sport",{"title":17,"path":18,"stem":19,"children":20,"icon":22},"Access control and lights","\u002Finterface\u002Fcourts\u002Fintegrations","1.interface\u002F01.courts\u002F5.integrations\u002F1.index",[21,23,28,33],{"title":17,"path":18,"stem":19,"icon":22},"sporty-toggle-large-on",{"title":24,"path":25,"stem":26,"icon":27},"Weblock","\u002Finterface\u002Fcourts\u002Fintegrations\u002Fweblock","1.interface\u002F01.courts\u002F5.integrations\u002F2.weblock","sporty-door-open",{"title":29,"path":30,"stem":31,"icon":32},"Shelly","\u002Finterface\u002Fcourts\u002Fintegrations\u002Fshelly","1.interface\u002F01.courts\u002F5.integrations\u002F3.shelly","sporty-bolt",{"title":34,"path":35,"stem":36,"children":37,"icon":27},"UniFi Access","\u002Finterface\u002Fcourts\u002Fintegrations\u002Funifi-access","1.interface\u002F01.courts\u002F5.integrations\u002F4.unifi-access\u002F1.index",[38,40,44,49],{"title":39,"path":35,"stem":36,"icon":27},"Overview",{"title":41,"path":42,"stem":43,"icon":22},"Connect the VPN","\u002Finterface\u002Fcourts\u002Fintegrations\u002Funifi-access\u002Fvpn","1.interface\u002F01.courts\u002F5.integrations\u002F4.unifi-access\u002F2.vpn",{"title":45,"path":46,"stem":47,"icon":48},"Create an API token","\u002Finterface\u002Fcourts\u002Fintegrations\u002Funifi-access\u002Fapi-token","1.interface\u002F01.courts\u002F5.integrations\u002F4.unifi-access\u002F3.api-token","sporty-gear",{"title":50,"path":51,"stem":52,"icon":15},"Set it up in Club Admin","\u002Finterface\u002Fcourts\u002Fintegrations\u002Funifi-access\u002Fclub-admin","1.interface\u002F01.courts\u002F5.integrations\u002F4.unifi-access\u002F4.club-admin",{"title":54,"path":55,"stem":56,"children":57,"icon":60},"Members","\u002Finterface\u002Fmembers","1.interface\u002F02.members\u002F1.index",[58],{"title":59,"path":55,"stem":56,"icon":60},"Member management","sporty-user-group",{"title":62,"path":63,"stem":64,"children":65,"icon":67},"Memberships","\u002Finterface\u002Fmemberships","1.interface\u002F03.memberships\u002F1.index",[66],{"title":62,"path":63,"stem":64,"icon":67},"sporty-id-card",{"title":69,"path":70,"stem":71,"children":72,"icon":74},"Leagues","\u002Finterface\u002Fleagues","1.interface\u002F04.leagues\u002F1.index",[73],{"title":69,"path":70,"stem":71,"icon":74},"sporty-ranking-star",{"title":76,"path":77,"stem":78,"children":79,"icon":81},"Tournaments","\u002Finterface\u002Ftournaments","1.interface\u002F05.tournaments\u002F1.index",[80],{"title":76,"path":77,"stem":78,"icon":81},"sporty-trophy",{"title":83,"path":84,"stem":85,"children":86,"icon":89},"Payments and subscriptions","\u002Finterface\u002Fpayments","1.interface\u002F06.payments\u002F1.index",[87],{"title":88,"path":84,"stem":85,"icon":89},"Payments","sporty-credit-card",{"title":91,"path":92,"stem":93,"children":94,"icon":96},"Shop","\u002Finterface\u002Fshop","1.interface\u002F07.shop\u002F1.index",[95],{"title":91,"path":92,"stem":93,"icon":96},"sporty-bag-shopping",{"title":98,"path":99,"stem":100,"children":101,"icon":103},"Schools and coaches","\u002Finterface\u002Fschools","1.interface\u002F08.schools\u002F1.index",[102],{"title":98,"path":99,"stem":100,"icon":103},"sporty-graduation-cap",{"title":105,"path":106,"stem":107,"children":108,"icon":110},"Emails","\u002Finterface\u002Femails","1.interface\u002F09.emails\u002F1.index",[109],{"title":105,"path":106,"stem":107,"icon":110},"sporty-envelope",{"title":112,"path":113,"stem":114,"children":115,"icon":117},"Video and cameras","\u002Finterface\u002Fvideo","1.interface\u002F10.video\u002F1.index",[116,118,122,127],{"title":112,"path":113,"stem":114,"icon":117},"sporty-camera-cctv",{"title":119,"path":120,"stem":121,"icon":117},"Dahua cameras","\u002Finterface\u002Fvideo\u002Fdahua","1.interface\u002F10.video\u002F2.dahua",{"title":123,"path":124,"stem":125,"icon":126},"Other RTMP cameras","\u002Finterface\u002Fvideo\u002Frtmp","1.interface\u002F10.video\u002F3.rtmp","sporty-video",{"title":128,"path":129,"stem":130,"icon":131},"Match analytics","\u002Finterface\u002Fvideo\u002Fanalytics","1.interface\u002F10.video\u002F4.analytics","sporty-chart-simple",{"title":133,"path":134,"stem":135,"children":136,"icon":138},"Reports","\u002Finterface\u002Freports","1.interface\u002F11.reports\u002F1.index",[137],{"title":133,"path":134,"stem":135,"icon":138},"sporty-chart-mixed",{"title":140,"path":141,"stem":142,"children":143,"icon":48},"Settings","\u002Finterface\u002Fsettings","1.interface\u002F12.settings\u002F1.index",[144],{"title":140,"path":141,"stem":142,"icon":48},{"title":146,"path":147,"stem":148,"children":149,"icon":151},"Social publishing","\u002Finterface\u002Fsocial","1.interface\u002F13.social\u002F1.index",[150,152],{"title":146,"path":147,"stem":148,"icon":151},"sporty-newspaper",{"title":153,"path":154,"stem":155,"icon":22},"Connecting channels","\u002Finterface\u002Fsocial\u002Fchannels","1.interface\u002F13.social\u002F2.channels",false,{"title":158,"path":159,"stem":160,"children":161,"icon":164},"Website","\u002Fwebsite","2.website\u002F1.index",[162,165,170,174,179],{"title":163,"path":159,"stem":160,"icon":164},"Website builder","sporty-browser",{"title":166,"path":167,"stem":168,"icon":169},"Pages, hero and footer","\u002Fwebsite\u002Fpages","2.website\u002F2.pages","sporty-file-lines",{"title":171,"path":172,"stem":173,"icon":151},"News and events","\u002Fwebsite\u002Fnews-and-events","2.website\u002F3.news-and-events",{"title":175,"path":176,"stem":177,"icon":178},"Coaches and gallery","\u002Fwebsite\u002Fcoaches-and-gallery","2.website\u002F4.coaches-and-gallery","sporty-images",{"title":180,"path":181,"stem":182,"icon":183},"FAQ and sponsors","\u002Fwebsite\u002Ffaq-and-sponsors","2.website\u002F5.faq-and-sponsors","sporty-circle-question",{"title":185,"path":186,"stem":187,"children":188,"icon":190},"OAuth & Sign in with Sporty","\u002Foauth","4.oauth\u002F1.index",[189,191,195,199,203,207,211,215,219],{"title":185,"path":186,"stem":187,"icon":190},"sporty-brackets-curly",{"title":192,"path":193,"stem":194,"icon":190},"Registering an application","\u002Foauth\u002Fclients","4.oauth\u002F2.clients",{"title":196,"path":197,"stem":198,"icon":190},"The authorization code flow","\u002Foauth\u002Fauthorization-code","4.oauth\u002F3.authorization-code",{"title":200,"path":201,"stem":202,"icon":190},"Scopes","\u002Foauth\u002Fscopes","4.oauth\u002F4.scopes",{"title":204,"path":205,"stem":206,"icon":190},"Sign in with Sporty","\u002Foauth\u002Fsign-in-with-sporty","4.oauth\u002F5.sign-in-with-sporty",{"title":208,"path":209,"stem":210,"icon":190},"The partner API","\u002Foauth\u002Fpartner-api","4.oauth\u002F6.partner-api",{"title":212,"path":213,"stem":214,"icon":190},"Syncing bookings","\u002Foauth\u002Fbooking-sync","4.oauth\u002F7.booking-sync",{"title":216,"path":217,"stem":218,"icon":190},"MCP and AI clients","\u002Foauth\u002Fmcp-and-ai-clients","4.oauth\u002F8.mcp-and-ai-clients",{"title":220,"path":221,"stem":222,"icon":223},"Agent checkout","\u002Foauth\u002Fagent-checkout","4.oauth\u002F9.agent-checkout","sporty-cart-shopping",{"id":225,"title":200,"body":226,"description":759,"extension":760,"links":761,"meta":762,"navigation":763,"path":201,"seo":764,"stem":202,"__hash__":767},"docs\u002F4.oauth\u002F4.scopes.md",{"type":227,"value":228,"toc":747},"minimark",[229,233,241,267,272,331,335,426,430,554,558,561,600,604,670,676,682,688,710,717,721,724,741],[230,231,232],"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.",[230,234,235,236,240],{},"Anything not on this list is refused with ",[237,238,239],"code",{},"invalid_scope",".",[242,243,245,249,250,254,255,258,259,262,263,266],"callout",{"icon":244},"i-heroicons-information-circle",[246,247,248],"strong",{},"Some scopes are named ahead of the API."," A scope marked ",[251,252,253],"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 ",[251,256,257],{},"Yes",". The discovery documents\n(",[237,260,261],{},"\u002F.well-known\u002Foauth-authorization-server"," and the others) advertise exactly those in\n",[237,264,265],{},"scopes_supported",", and a scope appears there the day an endpoint starts serving it.",[268,269,271],"h2",{"id":270},"identity","Identity",[273,274,275,291],"table",{},[276,277,278],"thead",{},[279,280,281,285,288],"tr",{},[282,283,284],"th",{},"Scope",[282,286,287],{},"What the member is told",[282,289,290],{},"Available",[292,293,294,307,319],"tbody",{},[279,295,296,302,305],{},[297,298,299],"td",{},[237,300,301],{},"openid",[297,303,304],{},"Confirm who you are",[297,306,257],{},[279,308,309,314,317],{},[297,310,311],{},[237,312,313],{},"profile",[297,315,316],{},"See your name and profile picture",[297,318,257],{},[279,320,321,326,329],{},[297,322,323],{},[237,324,325],{},"email",[297,327,328],{},"See your email address",[297,330,257],{},[268,332,334],{"id":333},"the-members-own-data","The member's own data",[273,336,337,347],{},[276,338,339],{},[279,340,341,343,345],{},[282,342,284],{},[282,344,287],{},[282,346,290],{},[292,348,349,361,373,385,402,414],{},[279,350,351,356,359],{},[297,352,353],{},[237,354,355],{},"me.read",[297,357,358],{},"See your basic profile",[297,360,257],{},[279,362,363,368,371],{},[297,364,365],{},[237,366,367],{},"me.reservations.read",[297,369,370],{},"See your court bookings",[297,372,257],{},[279,374,375,380,383],{},[297,376,377],{},[237,378,379],{},"me.reservations.write",[297,381,382],{},"Book and cancel courts for you",[297,384,257],{},[279,386,387,392,395],{},[297,388,389],{},[237,390,391],{},"me.purchases.write",[297,393,394],{},"Buy court time for you, with a card you give the application",[297,396,397,398],{},"Yes, ",[399,400,401],"a",{"href":221},"agent checkout",[279,403,404,409,412],{},[297,405,406],{},[237,407,408],{},"me.results.read",[297,410,411],{},"See your match results",[297,413,257],{},[279,415,416,421,424],{},[297,417,418],{},[237,419,420],{},"me.memberships.read",[297,422,423],{},"See which clubs you belong to",[297,425,257],{},[268,427,429],{"id":428},"a-clubs-data","A club's data",[273,431,432,442],{},[276,433,434],{},[279,435,436,438,440],{},[282,437,284],{},[282,439,287],{},[282,441,290],{},[292,443,444,456,468,480,492,504,516,530,542],{},[279,445,446,451,454],{},[297,447,448],{},[237,449,450],{},"club.read",[297,452,453],{},"See the club's public details",[297,455,257],{},[279,457,458,463,466],{},[297,459,460],{},[237,461,462],{},"club.members.read",[297,464,465],{},"See the club's members",[297,467,257],{},[279,469,470,475,478],{},[297,471,472],{},[237,473,474],{},"club.members.write",[297,476,477],{},"Add and update the club's members",[297,479,257],{},[279,481,482,487,490],{},[297,483,484],{},[237,485,486],{},"club.courts.read",[297,488,489],{},"See the club's courts",[297,491,257],{},[279,493,494,499,502],{},[297,495,496],{},[237,497,498],{},"club.reservations.read",[297,500,501],{},"See the club's bookings",[297,503,257],{},[279,505,506,511,514],{},[297,507,508],{},[237,509,510],{},"club.reservations.write",[297,512,513],{},"Make and cancel the club's bookings",[297,515,257],{},[279,517,518,523,526],{},[297,519,520],{},[237,521,522],{},"club.checkout.write",[297,524,525],{},"Sell the club's court time to guests the application brings",[297,527,397,528],{},[399,529,401],{"href":221},[279,531,532,537,540],{},[297,533,534],{},[237,535,536],{},"club.events.read",[297,538,539],{},"See the club's events",[297,541,253],{},[279,543,544,549,552],{},[297,545,546],{},[237,547,548],{},"club.shop.orders.read",[297,550,551],{},"See the club's shop orders",[297,553,253],{},[268,555,557],{"id":556},"partner","Partner",[230,559,560],{},"Client credentials only — these describe an application acting with no member present.",[273,562,563,574],{},[276,564,565],{},[279,566,567,569,572],{},[282,568,284],{},[282,570,571],{},"Meaning",[282,573,290],{},[292,575,576,588],{},[279,577,578,583,586],{},[297,579,580],{},[237,581,582],{},"partner.members.provision",[297,584,585],{},"Create members on behalf of a partner",[297,587,253],{},[279,589,590,595,598],{},[297,591,592],{},[237,593,594],{},"partner.login.handoff",[297,596,597],{},"Sign a member in from a partner app",[297,599,257],{},[268,601,603],{"id":602},"who-may-ask-for-what","Who may ask for what",[273,605,606,616],{},[276,607,608],{},[279,609,610,613],{},[282,611,612],{},"Client",[282,614,615],{},"May request",[292,617,618,638,654],{},[279,619,620,623],{},[297,621,622],{},"Registered by a club administrator, or by us",[297,624,625,627,628,627,630,627,632,627,635],{},[237,626,301],{},", ",[237,629,313],{},[237,631,325],{},[237,633,634],{},"me.*",[237,636,637],{},"club.*",[279,639,640,643],{},[297,641,642],{},"Self-registered (dynamic)",[297,644,645,627,647,627,649,627,651,653],{},[237,646,301],{},[237,648,313],{},[237,650,325],{},[237,652,634],{}," — never a club's data",[279,655,656,659],{},[297,657,658],{},"Client credentials",[297,660,661,627,664,666,667,669],{},[237,662,663],{},"partner.*",[237,665,637],{}," — ",[237,668,634],{}," means nothing without a member",[268,671,673,675],{"id":672},"club-needs-the-clubs-permission-too",[237,674,637],{}," needs the club's permission too",[230,677,678,679,681],{},"Holding a ",[237,680,637],{}," scope is not the same as being allowed to use it.",[230,683,684,685,687],{},"Before a ",[237,686,637],{}," scope does anything, three separate parties must have agreed:",[689,690,691,698,704],"ol",{},[692,693,694,697],"li",{},[246,695,696],{},"Sporty"," approved your application;",[692,699,700,703],{},[246,701,702],{},"the club's administrator"," granted your application that club, and that scope;",[692,705,706,709],{},[246,707,708],{},"the member"," (where there is one) authorised your application for that club.",[230,711,712,713,716],{},"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 ",[237,714,715],{},"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.",[268,718,720],{"id":719},"which-club-a-token-acts-for","Which club a token acts for",[230,722,723],{},"You never tell us in the request body; we work it out from your client.",[725,726,727,730],"ul",{},[692,728,729],{},"A client belonging to one club always acts for that club.",[692,731,732,733,736,737,740],{},"A client granted several clubs must name one with the ",[237,734,735],{},"X-Club"," header. Without it you get\n",[237,738,739],{},"400 club_required",". The header chooses among clubs you have already been granted — it\ncannot give you one.",[230,742,743,746],{},[237,744,745],{},"GET \u002Fapi\u002Fpartner\u002Fv1\u002Fclubs\u002Fme"," tells you which club a token ended up acting for.",{"title":748,"searchDepth":749,"depth":749,"links":750},"",2,[751,752,753,754,755,756,758],{"id":270,"depth":749,"text":271},{"id":333,"depth":749,"text":334},{"id":428,"depth":749,"text":429},{"id":556,"depth":749,"text":557},{"id":602,"depth":749,"text":603},{"id":672,"depth":749,"text":757},"club.* needs the club's permission too",{"id":719,"depth":749,"text":720},"Every scope, what the member is told it means, and which kinds of client may ask for it.","md",null,{},{"icon":190},{"title":765,"description":766},"Sporty OAuth scopes","The full scope catalogue and the rules about who may request what.","e8STcwYWLo6KBztFUD85gDYDJZBNmch8uHk9KcJWXMw",[769,771],{"title":196,"path":197,"stem":198,"description":770,"icon":190,"children":-1},"The whole flow with real requests, from sending someone to Sporty to refreshing a token.",{"title":204,"path":205,"stem":206,"description":772,"icon":190,"children":-1},"OpenID Connect — the id_token, its claims, \u002Fuserinfo and verifying a signature.",1790691909306]