[{"data":1,"prerenderedAt":1126},["ShallowReactive",2],{"navigation_docs_hr":3,"-hr-oauth-authorization-code":312,"-hr-oauth-authorization-code-surround":1121},[4,17,210,237,272],{"title":5,"path":6,"stem":7,"children":8,"icon":11},"Prvi koraci","\u002Fhr\u002Fgetting-started","hr\u002F0.getting-started\u002F1.index",[9,12],{"title":10,"path":6,"stem":7,"icon":11},"Obilazak administracije","sporty-toggle-large-on",{"title":13,"path":14,"stem":15,"icon":16},"Postavljanje u prvom tjednu","\u002Fhr\u002Fgetting-started\u002Ffirst-week-setup","hr\u002F0.getting-started\u002F2.first-week-setup","sporty-calendar-check",{"title":18,"path":19,"stem":20,"children":21,"page":209},"Interface","\u002Fhr\u002Finterface","hr\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},"Tereni","\u002Fhr\u002Finterface\u002Fcourts","hr\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},"Kontrola pristupa i rasvjeta","\u002Fhr\u002Finterface\u002Fcourts\u002Fintegrations","hr\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","\u002Fhr\u002Finterface\u002Fcourts\u002Fintegrations\u002Fweblock","hr\u002F1.interface\u002F01.courts\u002F5.integrations\u002F2.weblock","sporty-door-open",{"title":41,"path":42,"stem":43,"icon":44},"Shelly","\u002Fhr\u002Finterface\u002Fcourts\u002Fintegrations\u002Fshelly","hr\u002F1.interface\u002F01.courts\u002F5.integrations\u002F3.shelly","sporty-bolt",{"title":46,"path":47,"stem":48,"children":49,"icon":39},"UniFi Access","\u002Fhr\u002Finterface\u002Fcourts\u002Fintegrations\u002Funifi-access","hr\u002F1.interface\u002F01.courts\u002F5.integrations\u002F4.unifi-access\u002F1.index",[50,52,56,61],{"title":51,"path":47,"stem":48,"icon":39},"Pregled",{"title":53,"path":54,"stem":55,"icon":11},"Povežite VPN","\u002Fhr\u002Finterface\u002Fcourts\u002Fintegrations\u002Funifi-access\u002Fvpn","hr\u002F1.interface\u002F01.courts\u002F5.integrations\u002F4.unifi-access\u002F2.vpn",{"title":57,"path":58,"stem":59,"icon":60},"Izradite API token","\u002Fhr\u002Finterface\u002Fcourts\u002Fintegrations\u002Funifi-access\u002Fapi-token","hr\u002F1.interface\u002F01.courts\u002F5.integrations\u002F4.unifi-access\u002F3.api-token","sporty-gear",{"title":62,"path":63,"stem":64,"icon":28},"Postavite integraciju u Club Adminu","\u002Fhr\u002Finterface\u002Fcourts\u002Fintegrations\u002Funifi-access\u002Fclub-admin","hr\u002F1.interface\u002F01.courts\u002F5.integrations\u002F4.unifi-access\u002F4.club-admin",{"title":66,"path":67,"stem":68,"children":69,"icon":71},"Članovi","\u002Fhr\u002Finterface\u002Fmembers","hr\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},"Članstva","\u002Fhr\u002Finterface\u002Fmemberships","hr\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},"Lige","\u002Fhr\u002Finterface\u002Fleagues","hr\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},"Planirana natjecanja","\u002Fhr\u002Finterface\u002Fleagues\u002Fplanned-competitions","hr\u002F1.interface\u002F04.leagues\u002F2.planned-competitions",{"title":91,"path":92,"stem":93,"children":94,"icon":96},"Turniri","\u002Fhr\u002Finterface\u002Ftournaments","hr\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},"Plaćanja i pretplate","\u002Fhr\u002Finterface\u002Fpayments","hr\u002F1.interface\u002F06.payments\u002F1.index",[102],{"title":103,"path":99,"stem":100,"icon":104},"Plaćanja","sporty-credit-card",{"title":106,"path":107,"stem":108,"children":109,"icon":111},"Dućan","\u002Fhr\u002Finterface\u002Fshop","hr\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},"Škole i treneri","\u002Fhr\u002Finterface\u002Fschools","hr\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-poruke","\u002Fhr\u002Finterface\u002Femails","hr\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 i kamere","\u002Fhr\u002Finterface\u002Fvideo","hr\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 kamere","\u002Fhr\u002Finterface\u002Fvideo\u002Fdahua","hr\u002F1.interface\u002F10.video\u002F2.dahua",{"title":138,"path":139,"stem":140,"icon":141},"Ostale RTMP kamere","\u002Fhr\u002Finterface\u002Fvideo\u002Frtmp","hr\u002F1.interface\u002F10.video\u002F3.rtmp","sporty-video",{"title":143,"path":144,"stem":145,"icon":146},"Analitika meča","\u002Fhr\u002Finterface\u002Fvideo\u002Fanalytics","hr\u002F1.interface\u002F10.video\u002F4.analytics","sporty-chart-simple",{"title":148,"path":149,"stem":150,"children":151,"icon":153},"Izvješća","\u002Fhr\u002Finterface\u002Freports","hr\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},"Postavke","\u002Fhr\u002Finterface\u002Fsettings","hr\u002F1.interface\u002F12.settings\u002F1.index",[159,161,165,169],{"title":160,"path":156,"stem":157,"icon":60},"Postavke kluba",{"title":162,"path":163,"stem":164,"icon":16},"Pravila rezervacija i cjenik","\u002Fhr\u002Finterface\u002Fsettings\u002Fbooking-rules","hr\u002F1.interface\u002F12.settings\u002F2.booking-rules",{"title":166,"path":167,"stem":168,"icon":78},"Registracija i pravne stranice","\u002Fhr\u002Finterface\u002Fsettings\u002Fsignup-and-legal","hr\u002F1.interface\u002F12.settings\u002F3.signup-and-legal",{"title":170,"path":171,"stem":172,"icon":173},"Administratori i uloge","\u002Fhr\u002Finterface\u002Fsettings\u002Fadministrators-and-roles","hr\u002F1.interface\u002F12.settings\u002F4.administrators-and-roles","sporty-user",{"title":175,"path":176,"stem":177,"children":178,"icon":180},"Objave na društvenim mrežama","\u002Fhr\u002Finterface\u002Fsocial","hr\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},"Povezivanje kanala","\u002Fhr\u002Finterface\u002Fsocial\u002Fchannels","hr\u002F1.interface\u002F13.social\u002F2.channels",{"title":186,"path":187,"stem":188,"children":189,"icon":28},"Događaji s numeriranim mjestima","\u002Fhr\u002Finterface\u002Fseated-events","hr\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},"Planovi sjedenja","\u002Fhr\u002Finterface\u002Fseated-events\u002Fseating-plans","hr\u002F1.interface\u002F14.seated-events\u002F2.seating-plans",{"title":196,"path":197,"stem":198,"icon":16},"Prodaja mjesta","\u002Fhr\u002Finterface\u002Fseated-events\u002Fselling-seats","hr\u002F1.interface\u002F14.seated-events\u002F3.selling-seats",{"title":200,"path":201,"stem":202,"icon":39},"U prodaji i na ulazu","\u002Fhr\u002Finterface\u002Fseated-events\u002Fon-sale","hr\u002F1.interface\u002F14.seated-events\u002F4.on-sale",{"title":204,"path":205,"stem":206,"children":207,"icon":16},"Sezonske ulaznice","\u002Fhr\u002Finterface\u002Fseason-tickets","hr\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},"Web stranica","\u002Fhr\u002Fwebsite","hr\u002F2.website\u002F1.index",[215,218,223,227,232],{"title":216,"path":212,"stem":213,"icon":217},"Izrada web stranice","sporty-browser",{"title":219,"path":220,"stem":221,"icon":222},"Stranice, hero i podnožje","\u002Fhr\u002Fwebsite\u002Fpages","hr\u002F2.website\u002F2.pages","sporty-file-lines",{"title":224,"path":225,"stem":226,"icon":180},"Novosti i događaji","\u002Fhr\u002Fwebsite\u002Fnews-and-events","hr\u002F2.website\u002F3.news-and-events",{"title":228,"path":229,"stem":230,"icon":231},"Treneri i galerija","\u002Fhr\u002Fwebsite\u002Fcoaches-and-gallery","hr\u002F2.website\u002F4.coaches-and-gallery","sporty-images",{"title":233,"path":234,"stem":235,"icon":236},"FAQ i sponzori","\u002Fhr\u002Fwebsite\u002Ffaq-and-sponsors","hr\u002F2.website\u002F5.faq-and-sponsors","sporty-circle-question",{"title":238,"path":239,"stem":240,"children":241,"icon":173},"Za članove","\u002Fhr\u002Fmembers","hr\u002F3.members\u002F1.index",[242,244,248,252,256,260,264,268],{"title":243,"path":239,"stem":240,"icon":173},"Korištenje aplikacije za članove",{"title":245,"path":246,"stem":247,"icon":16},"Rezervacija terena","\u002Fhr\u002Fmembers\u002Fbooking","hr\u002F3.members\u002F2.booking",{"title":249,"path":250,"stem":251,"icon":104},"Članstva i plaćanja","\u002Fhr\u002Fmembers\u002Fpayments","hr\u002F3.members\u002F3.payments",{"title":253,"path":254,"stem":255,"icon":85},"Kako funkcioniraju natjecanja","\u002Fhr\u002Fmembers\u002Fhow-competitions-work","hr\u002F3.members\u002F4.how-competitions-work",{"title":257,"path":258,"stem":259,"icon":96},"Lige, turniri i rezultati","\u002Fhr\u002Fmembers\u002Fcompetitions","hr\u002F3.members\u002F5.competitions",{"title":261,"path":262,"stem":263,"icon":71},"Obitelj i djeca","\u002Fhr\u002Fmembers\u002Ffamily","hr\u002F3.members\u002F6.family",{"title":265,"path":266,"stem":267,"icon":78},"Vaš račun","\u002Fhr\u002Fmembers\u002Faccount","hr\u002F3.members\u002F7.account",{"title":269,"path":270,"stem":271,"icon":236},"Pomoć","\u002Fhr\u002Fmembers\u002Fhelp","hr\u002F3.members\u002F8.help",{"title":273,"path":274,"stem":275,"children":276,"icon":278},"OAuth i prijava putem Sportyja","\u002Fhr\u002Foauth","hr\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},"Registracija aplikacije","\u002Fhr\u002Foauth\u002Fclients","hr\u002F4.oauth\u002F2.clients",{"title":284,"path":285,"stem":286,"icon":278},"Tok authorization code","\u002Fhr\u002Foauth\u002Fauthorization-code","hr\u002F4.oauth\u002F3.authorization-code",{"title":288,"path":289,"stem":290,"icon":278},"Opsezi","\u002Fhr\u002Foauth\u002Fscopes","hr\u002F4.oauth\u002F4.scopes",{"title":292,"path":293,"stem":294,"icon":278},"Prijava putem Sportyja","\u002Fhr\u002Foauth\u002Fsign-in-with-sporty","hr\u002F4.oauth\u002F5.sign-in-with-sporty",{"title":296,"path":297,"stem":298,"icon":278},"Partnerski API","\u002Fhr\u002Foauth\u002Fpartner-api","hr\u002F4.oauth\u002F6.partner-api",{"title":300,"path":301,"stem":302,"icon":278},"Sinkronizacija rezervacija","\u002Fhr\u002Foauth\u002Fbooking-sync","hr\u002F4.oauth\u002F7.booking-sync",{"title":304,"path":305,"stem":306,"icon":278},"MCP i AI klijenti","\u002Fhr\u002Foauth\u002Fmcp-and-ai-clients","hr\u002F4.oauth\u002F8.mcp-and-ai-clients",{"title":308,"path":309,"stem":310,"icon":311},"Kupnja putem agenta","\u002Fhr\u002Foauth\u002Fagent-checkout","hr\u002F4.oauth\u002F9.agent-checkout","sporty-cart-shopping",{"id":313,"title":284,"body":314,"description":1112,"extension":1113,"links":1114,"meta":1115,"navigation":1116,"path":285,"seo":1117,"stem":286,"__hash__":1120},"docs_hr\u002Fhr\u002F4.oauth\u002F3.authorization-code.md",{"type":315,"value":316,"toc":1102},"minimark",[317,321,326,343,491,494,498,506,560,567,571,577,580,586,592,596,599,700,707,821,833,837,865,869,872,933,937,978,992,1000,1007,1011,1091,1098],[318,319,320],"p",{},"Authorization code s PKCE-om tok je za svaku aplikaciju koja djeluje u ime osobe. Svaki primjer\nu nastavku stvarni je zahtjev.",[322,323,325],"h2",{"id":324},"_1-napravite-pkce-verifier-i-challenge","1. Napravite PKCE verifier i challenge",[318,327,328,329,333,334,338,339,342],{},"PKCE je ",[330,331,332],"strong",{},"obavezan",", i za povjerljive klijente, a prihvaća se samo ",[335,336,337],"code",{},"S256"," — ",[335,340,341],{},"plain"," se odbija.",[344,345,350],"pre",{"className":346,"code":347,"language":348,"meta":349,"style":349},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","VERIFIER=$(openssl rand -base64 60 | tr -d '\\n=+\u002F' | cut -c1-64)\nCHALLENGE=$(printf '%s' \"$VERIFIER\" | openssl dgst -sha256 -binary | openssl base64 | tr '+\u002F' '-_' | tr -d '=')\n","bash","",[335,351,352,409],{"__ignoreMap":349},[353,354,357,361,365,369,373,376,380,383,386,389,392,395,398,400,403,406],"span",{"class":355,"line":356},"line",1,[353,358,360],{"class":359},"sTEyZ","VERIFIER",[353,362,364],{"class":363},"sMK4o","=$(",[353,366,368],{"class":367},"sBMFI","openssl",[353,370,372],{"class":371},"sfazB"," rand",[353,374,375],{"class":371}," -base64",[353,377,379],{"class":378},"sbssI"," 60",[353,381,382],{"class":363}," |",[353,384,385],{"class":367}," tr",[353,387,388],{"class":371}," -d",[353,390,391],{"class":363}," '",[353,393,394],{"class":371},"\\n=+\u002F",[353,396,397],{"class":363},"'",[353,399,382],{"class":363},[353,401,402],{"class":367}," cut",[353,404,405],{"class":371}," -c1-64",[353,407,408],{"class":363},")\n",[353,410,412,415,417,421,423,426,428,431,434,437,439,442,445,448,451,453,455,458,460,462,464,467,469,471,474,476,478,480,482,484,487,489],{"class":355,"line":411},2,[353,413,414],{"class":359},"CHALLENGE",[353,416,364],{"class":363},[353,418,420],{"class":419},"s2Zo4","printf",[353,422,391],{"class":363},[353,424,425],{"class":371},"%s",[353,427,397],{"class":363},[353,429,430],{"class":363}," \"",[353,432,433],{"class":359},"$VERIFIER",[353,435,436],{"class":363},"\"",[353,438,382],{"class":363},[353,440,441],{"class":367}," openssl",[353,443,444],{"class":371}," dgst",[353,446,447],{"class":371}," -sha256",[353,449,450],{"class":371}," -binary",[353,452,382],{"class":363},[353,454,441],{"class":367},[353,456,457],{"class":371}," base64",[353,459,382],{"class":363},[353,461,385],{"class":367},[353,463,391],{"class":363},[353,465,466],{"class":371},"+\u002F",[353,468,397],{"class":363},[353,470,391],{"class":363},[353,472,473],{"class":371},"-_",[353,475,397],{"class":363},[353,477,382],{"class":363},[353,479,385],{"class":367},[353,481,388],{"class":371},[353,483,391],{"class":363},[353,485,486],{"class":371},"=",[353,488,397],{"class":363},[353,490,408],{"class":363},[318,492,493],{},"Sačuvajte verifier; trebat će vam u 4. koraku.",[322,495,497],{"id":496},"_2-pošaljite-člana-na-sporty","2. Pošaljite člana na Sporty",[344,499,504],{"className":500,"code":502,"language":503},[501],"language-text","https:\u002F\u002Fapi.sporty.plus\u002Foauth2\u002Fauthorize\n  ?response_type=code\n  &client_id=YOUR_CLIENT_ID\n  &redirect_uri=https:\u002F\u002Fyourapp.example\u002Fcallback\n  &scope=openid%20profile%20email%20club.courts.read\n  &state=RANDOM_PER_REQUEST\n  &code_challenge=CHALLENGE\n  &code_challenge_method=S256\n","text",[335,505,502],{"__ignoreMap":349},[507,508,509,522],"table",{},[510,511,512],"thead",{},[513,514,515,519],"tr",{},[516,517,518],"th",{},"Parametar",[516,520,521],{},"Napomene",[523,524,525,536,550],"tbody",{},[513,526,527,533],{},[528,529,530],"td",{},[335,531,532],{},"state",[528,534,535],{},"Nasumičan, nepogodiv, zaseban za svaki zahtjev. Provjerite ga pri povratku — upravo to jamči da je povratni poziv vaš.",[513,537,538,543],{},[528,539,540],{},[335,541,542],{},"nonce",[528,544,545,546,549],{},"Neobavezan. Ako ga pošaljete, vraća se u ",[335,547,548],{},"id_token",". Koristite ga ako vam treba.",[513,551,552,557],{},[528,553,554],{},[335,555,556],{},"club_id",[528,558,559],{},"Neobavezan. Ima smisla samo za klijenta s pristupom više klubova, da kaže o kojem je riječ.",[318,561,562,563,566],{},"Član na ",[335,564,565],{},"my.sporty.plus"," vidi zaslon za privolu koji jednostavnim riječima navodi točno ono što\nste zatražili. Može odobriti i manje od toga; zatraženo se nikad ne proširuje.",[322,568,570],{"id":569},"_3-član-se-vraća-na-vaš-redirect-uri","3. Član se vraća na vaš redirect URI",[344,572,575],{"className":573,"code":574,"language":503},[501],"https:\u002F\u002Fyourapp.example\u002Fcallback?code=...&state=...\n",[335,576,574],{"__ignoreMap":349},[318,578,579],{},"Ako je odbio, ili je nešto bilo pogrešno:",[344,581,584],{"className":582,"code":583,"language":503},[501],"https:\u002F\u002Fyourapp.example\u002Fcallback?error=access_denied&error_description=...&state=...\n",[335,585,583],{"__ignoreMap":349},[318,587,588,589,591],{},"Prije bilo čega drugog usporedite ",[335,590,532],{}," s onim što ste poslali.",[322,593,595],{"id":594},"_4-zamijenite-kod-za-token","4. Zamijenite kod za token",[318,597,598],{},"Unutar nekoliko minuta i samo jednom. Kod je jednokratan.",[344,600,602],{"className":346,"code":601,"language":348,"meta":349,"style":349},"curl -X POST https:\u002F\u002Fapi.sporty.plus\u002Foauth2\u002Ftoken \\\n  -H 'Accept: application\u002Fjson' \\\n  -d grant_type=authorization_code \\\n  -d client_id=YOUR_CLIENT_ID \\\n  -d client_secret=YOUR_SECRET \\\n  -d redirect_uri=https:\u002F\u002Fyourapp.example\u002Fcallback \\\n  -d code_verifier=\"$VERIFIER\" \\\n  -d code=THE_CODE\n",[335,603,604,621,635,646,656,666,676,692],{"__ignoreMap":349},[353,605,606,609,612,615,618],{"class":355,"line":356},[353,607,608],{"class":367},"curl",[353,610,611],{"class":371}," -X",[353,613,614],{"class":371}," POST",[353,616,617],{"class":371}," https:\u002F\u002Fapi.sporty.plus\u002Foauth2\u002Ftoken",[353,619,620],{"class":359}," \\\n",[353,622,623,626,628,631,633],{"class":355,"line":411},[353,624,625],{"class":371},"  -H",[353,627,391],{"class":363},[353,629,630],{"class":371},"Accept: application\u002Fjson",[353,632,397],{"class":363},[353,634,620],{"class":359},[353,636,638,641,644],{"class":355,"line":637},3,[353,639,640],{"class":371},"  -d",[353,642,643],{"class":371}," grant_type=authorization_code",[353,645,620],{"class":359},[353,647,649,651,654],{"class":355,"line":648},4,[353,650,640],{"class":371},[353,652,653],{"class":371}," client_id=YOUR_CLIENT_ID",[353,655,620],{"class":359},[353,657,659,661,664],{"class":355,"line":658},5,[353,660,640],{"class":371},[353,662,663],{"class":371}," client_secret=YOUR_SECRET",[353,665,620],{"class":359},[353,667,669,671,674],{"class":355,"line":668},6,[353,670,640],{"class":371},[353,672,673],{"class":371}," redirect_uri=https:\u002F\u002Fyourapp.example\u002Fcallback",[353,675,620],{"class":359},[353,677,679,681,684,686,688,690],{"class":355,"line":678},7,[353,680,640],{"class":371},[353,682,683],{"class":371}," code_verifier=",[353,685,436],{"class":363},[353,687,433],{"class":359},[353,689,436],{"class":363},[353,691,620],{"class":359},[353,693,695,697],{"class":355,"line":694},8,[353,696,640],{"class":371},[353,698,699],{"class":371}," code=THE_CODE\n",[318,701,702,703,706],{},"Za javnog klijenta izostavite ",[335,704,705],{},"client_secret",".",[344,708,712],{"className":709,"code":710,"language":711,"meta":349,"style":349},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"token_type\": \"Bearer\",\n  \"expires_in\": 3600,\n  \"access_token\": \"eyJ0eXAiOiJKV1Qi...\",\n  \"refresh_token\": \"def5020089ab...\",\n  \"id_token\": \"eyJ0eXAiOiJKV1Qi...\"\n}\n","json",[335,713,714,719,743,759,779,799,816],{"__ignoreMap":349},[353,715,716],{"class":355,"line":356},[353,717,718],{"class":363},"{\n",[353,720,721,724,728,730,733,735,738,740],{"class":355,"line":411},[353,722,723],{"class":363},"  \"",[353,725,727],{"class":726},"spNyl","token_type",[353,729,436],{"class":363},[353,731,732],{"class":363},":",[353,734,430],{"class":363},[353,736,737],{"class":371},"Bearer",[353,739,436],{"class":363},[353,741,742],{"class":363},",\n",[353,744,745,747,750,752,754,757],{"class":355,"line":637},[353,746,723],{"class":363},[353,748,749],{"class":726},"expires_in",[353,751,436],{"class":363},[353,753,732],{"class":363},[353,755,756],{"class":378}," 3600",[353,758,742],{"class":363},[353,760,761,763,766,768,770,772,775,777],{"class":355,"line":648},[353,762,723],{"class":363},[353,764,765],{"class":726},"access_token",[353,767,436],{"class":363},[353,769,732],{"class":363},[353,771,430],{"class":363},[353,773,774],{"class":371},"eyJ0eXAiOiJKV1Qi...",[353,776,436],{"class":363},[353,778,742],{"class":363},[353,780,781,783,786,788,790,792,795,797],{"class":355,"line":658},[353,782,723],{"class":363},[353,784,785],{"class":726},"refresh_token",[353,787,436],{"class":363},[353,789,732],{"class":363},[353,791,430],{"class":363},[353,793,794],{"class":371},"def5020089ab...",[353,796,436],{"class":363},[353,798,742],{"class":363},[353,800,801,803,805,807,809,811,813],{"class":355,"line":668},[353,802,723],{"class":363},[353,804,548],{"class":726},[353,806,436],{"class":363},[353,808,732],{"class":363},[353,810,430],{"class":363},[353,812,774],{"class":371},[353,814,815],{"class":363},"\"\n",[353,817,818],{"class":355,"line":678},[353,819,820],{"class":363},"}\n",[318,822,823,825,826,829,830,706],{},[335,824,548],{}," je prisutan samo ako ste zatražili ",[335,827,828],{},"openid",". Pogledajte\n",[831,832,292],"a",{"href":293},[322,834,836],{"id":835},"_5-koristite-ga","5. Koristite ga",[344,838,840],{"className":346,"code":839,"language":348,"meta":349,"style":349},"curl https:\u002F\u002Fapi.sporty.plus\u002Fapi\u002Fpartner\u002Fv1\u002Fclubs\u002Fme \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\"\n",[335,841,842,851],{"__ignoreMap":349},[353,843,844,846,849],{"class":355,"line":356},[353,845,608],{"class":367},[353,847,848],{"class":371}," https:\u002F\u002Fapi.sporty.plus\u002Fapi\u002Fpartner\u002Fv1\u002Fclubs\u002Fme",[353,850,620],{"class":359},[353,852,853,855,857,860,863],{"class":355,"line":411},[353,854,625],{"class":371},[353,856,430],{"class":363},[353,858,859],{"class":371},"Authorization: Bearer ",[353,861,862],{"class":359},"$ACCESS_TOKEN",[353,864,815],{"class":363},[322,866,868],{"id":867},"_6-osvježite-ga","6. Osvježite ga",[318,870,871],{},"Pristupni tokeni traju sat vremena, a refresh tokeni trideset dana (dan za klijenta koji se\nregistrirao sam).",[344,873,875],{"className":346,"code":874,"language":348,"meta":349,"style":349},"curl -X POST https:\u002F\u002Fapi.sporty.plus\u002Foauth2\u002Ftoken \\\n  -H 'Accept: application\u002Fjson' \\\n  -d grant_type=refresh_token \\\n  -d client_id=YOUR_CLIENT_ID \\\n  -d client_secret=YOUR_SECRET \\\n  -d refresh_token=THE_REFRESH_TOKEN\n",[335,876,877,889,901,910,918,926],{"__ignoreMap":349},[353,878,879,881,883,885,887],{"class":355,"line":356},[353,880,608],{"class":367},[353,882,611],{"class":371},[353,884,614],{"class":371},[353,886,617],{"class":371},[353,888,620],{"class":359},[353,890,891,893,895,897,899],{"class":355,"line":411},[353,892,625],{"class":371},[353,894,391],{"class":363},[353,896,630],{"class":371},[353,898,397],{"class":363},[353,900,620],{"class":359},[353,902,903,905,908],{"class":355,"line":637},[353,904,640],{"class":371},[353,906,907],{"class":371}," grant_type=refresh_token",[353,909,620],{"class":359},[353,911,912,914,916],{"class":355,"line":648},[353,913,640],{"class":371},[353,915,653],{"class":371},[353,917,620],{"class":359},[353,919,920,922,924],{"class":355,"line":658},[353,921,640],{"class":371},[353,923,663],{"class":371},[353,925,620],{"class":359},[353,927,928,930],{"class":355,"line":668},[353,929,640],{"class":371},[353,931,932],{"class":371}," refresh_token=THE_REFRESH_TOKEN\n",[322,934,936],{"id":935},"_7-opozovite-ga-kad-završite","7. Opozovite ga kad završite",[344,938,940],{"className":346,"code":939,"language":348,"meta":349,"style":349},"curl -X POST https:\u002F\u002Fapi.sporty.plus\u002Foauth2\u002Ftoken\u002Frevoke \\\n  -d client_id=YOUR_CLIENT_ID \\\n  -d client_secret=YOUR_SECRET \\\n  -d token=THE_ACCESS_TOKEN\n",[335,941,942,955,963,971],{"__ignoreMap":349},[353,943,944,946,948,950,953],{"class":355,"line":356},[353,945,608],{"class":367},[353,947,611],{"class":371},[353,949,614],{"class":371},[353,951,952],{"class":371}," https:\u002F\u002Fapi.sporty.plus\u002Foauth2\u002Ftoken\u002Frevoke",[353,954,620],{"class":359},[353,956,957,959,961],{"class":355,"line":411},[353,958,640],{"class":371},[353,960,653],{"class":371},[353,962,620],{"class":359},[353,964,965,967,969],{"class":355,"line":637},[353,966,640],{"class":371},[353,968,663],{"class":371},[353,970,620],{"class":359},[353,972,973,975],{"class":355,"line":648},[353,974,640],{"class":371},[353,976,977],{"class":371}," token=THE_ACCESS_TOKEN\n",[318,979,980,981,984,985,991],{},"Ovo uvijek odgovara ",[335,982,983],{},"200",", što god poslali — tako nalaže\n",[831,986,990],{"href":987,"rel":988},"https:\u002F\u002Fwww.rfc-editor.org\u002Frfc\u002Frfc7009",[989],"nofollow","RFC 7009",", pa se krajnja točka ne može koristiti za\nprovjeru je li token valjan.",[993,994,996,999],"callout",{"icon":995},"i-heroicons-exclamation-triangle",[330,997,998],{},"Navedite pristupni token, ne refresh token."," Opoziv pristupnog tokena opoziva i refresh\ntokene izdane uz njega, što u praksi znači „završi ovu sesiju”. Sam refresh token ovdje se\nzasad ne može navesti.",[318,1001,1002,1003,1006],{},"Član vas također može opozvati u bilo kojem trenutku, putem ",[330,1004,1005],{},"Autorizirane aplikacije"," u svojem\nprofilu. Kad se to dogodi, svaki token koji imate odmah prestaje raditi, a člana biste trebali\nponovno provesti kroz tok umjesto da pokušavate iznova.",[322,1008,1010],{"id":1009},"pogreške-koje-možete-očekivati","Pogreške koje možete očekivati",[507,1012,1013,1023],{},[510,1014,1015],{},[513,1016,1017,1020],{},[516,1018,1019],{},"Pogreška",[516,1021,1022],{},"Što se dogodilo",[523,1024,1025,1042,1052,1066,1076],{},[513,1026,1027,1032],{},[528,1028,1029],{},[335,1030,1031],{},"invalid_request",[528,1033,1034,1035,1038,1039,1041],{},"Obično nedostaje ",[335,1036,1037],{},"code_challenge"," ili je ",[335,1040,341],{},". Obavezan je PKCE sa S256.",[513,1043,1044,1049],{},[528,1045,1046],{},[335,1047,1048],{},"invalid_scope",[528,1050,1051],{},"Opseg koji ne postoji ili koji ova vrsta klijenta ne smije tražiti.",[513,1053,1054,1059],{},[528,1055,1056],{},[335,1057,1058],{},"invalid_grant",[528,1060,1061,1062,1065],{},"Kod je već iskorišten ili je istekao, ili se ",[335,1063,1064],{},"code_verifier"," ne podudara.",[513,1067,1068,1073],{},[528,1069,1070],{},[335,1071,1072],{},"access_denied",[528,1074,1075],{},"Član je odbio, ili je aplikacija suspendirana.",[513,1077,1078,1084],{},[528,1079,1080,1083],{},[335,1081,1082],{},"insufficient_scope"," (403)",[528,1085,1086,1087,1090],{},"Token je valjan, ali ovaj mu opseg nije odobren. Zaglavlje ",[335,1088,1089],{},"WWW-Authenticate"," navodi što je potrebno.",[318,1092,1093,1094,1097],{},"Na neregistrirani ",[335,1095,1096],{},"redirect_uri"," nikad se ne preusmjerava. Pogrešku ćete umjesto toga vidjeti\nna Sportyju — i upravo je to svrha.",[1099,1100,1101],"style",{},"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 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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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}",{"title":349,"searchDepth":411,"depth":411,"links":1103},[1104,1105,1106,1107,1108,1109,1110,1111],{"id":324,"depth":411,"text":325},{"id":496,"depth":411,"text":497},{"id":569,"depth":411,"text":570},{"id":594,"depth":411,"text":595},{"id":835,"depth":411,"text":836},{"id":867,"depth":411,"text":868},{"id":935,"depth":411,"text":936},{"id":1009,"depth":411,"text":1010},"Cijeli tok sa stvarnim zahtjevima, od slanja osobe na Sporty do osvježavanja tokena.","md",null,{},{"icon":278},{"title":1118,"description":1119},"Sporty OAuth tok authorization code s PKCE-om","Vodič korak po korak uz curl, uključujući PKCE, osvježavanje i opoziv.","OsRhrDa5huFrRw5EU38usQHOCieXQqTqI21RDpRJ9pg",[1122,1124],{"title":280,"path":281,"stem":282,"description":1123,"icon":278,"children":-1},"Kako dobiti client id, kako smije izgledati redirect URI i što znači „čeka pregled”.",{"title":288,"path":289,"stem":290,"description":1125,"icon":278,"children":-1},"Svaki opseg, kako se njegovo značenje opisuje članu i koje ga vrste klijenata smiju tražiti.",1792420868820]