{"openapi":"3.1.0","info":{"title":"Quko Data API","version":"1.0.0","description":"Read-only OAuth 2.1 API for everything the web UI shows one's own account."},"servers":[{"url":"https://cloud.quko.es/api/v1","description":"Data API v1"}],"security":[{"oauth":[]}],"tags":[{"name":"Identity"},{"name":"Athlete"},{"name":"Sessions"},{"name":"Trainings"},{"name":"Workouts"},{"name":"Equipment"},{"name":"Catalogues"},{"name":"Records"},{"name":"Health"},{"name":"Roster"},{"name":"Devices"},{"name":"QukoSim"},{"name":"Exports"}],"paths":{"/me":{"get":{"tags":["Identity"],"summary":"Current authorized subject","x-quko-surfaces":["data","partner","session"],"security":[{"oauth":["openid"]}],"responses":{"200":{"$ref":"#/components/responses/Envelope"},"401":{"$ref":"#/components/responses/OAuthError"}}}},"/authorization":{"get":{"tags":["Identity"],"summary":"Current consent and effective scopes","x-quko-surfaces":["data","partner","session"],"security":[{"oauth":["openid"]}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}},"delete":{"tags":["Identity"],"summary":"Revoke this application's authorization","description":"Revokes this application's authorization. It never deletes user data.","x-quko-surfaces":["data","partner","session"],"security":[{"oauth":["openid"]}],"responses":{"204":{"description":"Revoked"}}}},"/athlete":{"get":{"tags":["Athlete"],"summary":"Athlete profile associated with the subject","security":[{"oauth":["athlete:read"]}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/sessions":{"get":{"tags":["Sessions"],"summary":"List accessible sessions","description":"On the Session API this lists only the sessions the calling application created in its owner's account.","x-quko-surfaces":["data","partner","session"],"security":[{"oauth":["sessions:read"]}],"parameters":[{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/Limit"},{"in":"query","name":"date_from","schema":{"type":"string","format":"date"}},{"in":"query","name":"date_to","schema":{"type":"string","format":"date"}},{"in":"query","name":"track_id","schema":{"type":"integer"}},{"in":"query","name":"category_id","schema":{"type":"integer"}},{"in":"query","name":"pace_id","schema":{"type":"integer"}},{"in":"query","name":"distance_m","schema":{"type":"integer","minimum":1}},{"in":"query","name":"boat_class_id","schema":{"type":"integer"}},{"in":"query","name":"vessel_id","schema":{"type":"integer"}},{"in":"query","name":"athlete_id","description":"Data API only","schema":{"type":"integer"}},{"in":"query","name":"competition","schema":{"type":"string"}},{"in":"query","name":"description","schema":{"type":"string"}},{"in":"query","name":"important","schema":{"type":"boolean"}},{"in":"query","name":"sort","schema":{"type":"string","enum":["date","distance","duration","created"],"default":"date"}},{"in":"query","name":"order","schema":{"type":"string","enum":["asc","desc"],"default":"desc"}}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/sessions/{session_id}":{"parameters":[{"in":"path","name":"session_id","required":true,"schema":{"type":"integer"}}],"get":{"tags":["Sessions"],"summary":"Session metadata, subject seat, equipment and permitted health fields","description":"On the Session API this returns only a session the calling application created.","x-quko-surfaces":["data","partner","session"],"security":[{"oauth":["sessions:read"]}],"responses":{"200":{"$ref":"#/components/responses/Envelope"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/sessions/{session_id}/summary":{"get":{"tags":["Sessions"],"summary":"Derived summary and data-quality report","security":[{"oauth":["sessions:read"]}],"parameters":[{"in":"path","name":"session_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/sessions/{session_id}/series":{"get":{"tags":["Sessions"],"summary":"Allowlisted processed series capped at 1,000 points","security":[{"oauth":["sessions:read"]}],"parameters":[{"in":"path","name":"session_id","required":true,"schema":{"type":"integer"}},{"in":"query","name":"fields","schema":{"type":"string"}},{"in":"query","name":"max_points","schema":{"type":"integer","maximum":1000}}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/sessions/{session_id}/strokes":{"get":{"tags":["Sessions"],"summary":"Cursor-paginated processed stroke metrics","security":[{"oauth":["sessions:read"]}],"parameters":[{"in":"path","name":"session_id","required":true,"schema":{"type":"integer"}},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/Limit"}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/sessions/{session_id}/splits":{"get":{"tags":["Sessions"],"summary":"Derived equal-distance split metrics","security":[{"oauth":["sessions:read"]}],"parameters":[{"in":"path","name":"session_id","required":true,"schema":{"type":"integer"}},{"in":"query","name":"count","schema":{"type":"integer","minimum":1,"maximum":20}}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/sessions/{session_id}/analytics/{analysis}":{"get":{"tags":["Sessions"],"summary":"Run an allowlisted derived analysis","description":"Supports data-quality, anomalies, side-balance, metric-relationships, pacing, progression, stroke-phases, consistency, start, finish, and split-motion.","security":[{"oauth":["sessions:read"]}],"parameters":[{"in":"path","name":"session_id","required":true,"schema":{"type":"integer"}},{"in":"path","name":"analysis","required":true,"schema":{"type":"string"}},{"in":"query","name":"segments","schema":{"type":"integer","minimum":2,"maximum":20}},{"in":"query","name":"sensitivity","schema":{"type":"number","minimum":0.5,"maximum":10}},{"in":"query","name":"metrics","schema":{"type":"string"}}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/analytics/comparable-sessions":{"get":{"tags":["Sessions"],"summary":"Find sessions comparable by boat, distance, athlete, and track","security":[{"oauth":["sessions:read"]}],"parameters":[{"in":"query","name":"session_id","required":true,"schema":{"type":"integer"}},{"in":"query","name":"limit","schema":{"type":"integer","minimum":1,"maximum":25}}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/analytics/progression":{"get":{"tags":["Sessions"],"summary":"Progression for the same athlete, boat, and distance cohort","security":[{"oauth":["sessions:read"]}],"parameters":[{"in":"query","name":"session_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/analytics/personal-bests":{"get":{"tags":["Sessions"],"summary":"Best times grouped by boat and distance","security":[{"oauth":["sessions:read"]}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/analytics/benchmarks":{"get":{"tags":["Sessions"],"summary":"Aggregate same-boat and same-distance benchmark percentiles","security":[{"oauth":["sessions:read"]}],"parameters":[{"in":"query","name":"session_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/sessions/compare":{"post":{"tags":["Sessions"],"summary":"Compare two to nine accessible sessions","security":[{"oauth":["sessions:read"]}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/sessions/{session_id}/exports":{"post":{"tags":["Exports"],"summary":"Queue a session export using the web application's exporter","description":"The generated JSON, PDF, full PDF, XLSX, FIT, or TCX uses the same export implementation as Quko Cloud's web download.","security":[{"oauth":["sessions:read","exports:create"]}],"parameters":[{"in":"path","name":"session_id","required":true,"schema":{"type":"integer"}},{"in":"header","name":"Idempotency-Key","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportRequest"}}}},"responses":{"202":{"$ref":"#/components/responses/Envelope"}}}},"/trainings":{"get":{"tags":["Trainings"],"summary":"List trainings owned by the subject","description":"On the Session API this lists only the trainings the calling application created in its owner's account.","x-quko-surfaces":["data","partner","session"],"security":[{"oauth":["trainings:read"]}],"parameters":[{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/Limit"},{"in":"query","name":"title","schema":{"type":"string"}},{"in":"query","name":"date_from","schema":{"type":"string","format":"date"}},{"in":"query","name":"date_to","schema":{"type":"string","format":"date"}}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/trainings/{training_id}":{"parameters":[{"in":"path","name":"training_id","required":true,"schema":{"type":"integer"}}],"get":{"tags":["Trainings"],"summary":"Training structure and sets","description":"On the Session API this returns only a training the calling application created.","x-quko-surfaces":["data","partner","session"],"security":[{"oauth":["trainings:read"]}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/trainings/{training_id}/summary":{"get":{"tags":["Trainings"],"summary":"Derived per-set summaries","security":[{"oauth":["trainings:read"]}],"parameters":[{"in":"path","name":"training_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/trainings/{training_id}/timeline":{"get":{"tags":["Trainings"],"summary":"Privacy-projected workout occurrence timeline","security":[{"oauth":["trainings:read"]}],"parameters":[{"in":"path","name":"training_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/trainings/{training_id}/sets/{set_id}/series":{"get":{"tags":["Trainings"],"summary":"Bounded processed series for one active set","security":[{"oauth":["trainings:read"]}],"parameters":[{"in":"path","name":"training_id","required":true,"schema":{"type":"integer"}},{"in":"path","name":"set_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/trainings/{training_id}/sets/{set_id}/strokes":{"get":{"tags":["Trainings"],"summary":"Cursor-paginated processed strokes for one active set","security":[{"oauth":["trainings:read"]}],"parameters":[{"in":"path","name":"training_id","required":true,"schema":{"type":"integer"}},{"in":"path","name":"set_id","required":true,"schema":{"type":"integer"}},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/Limit"}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/trainings/{training_id}/sets/{set_id}/splits":{"get":{"tags":["Trainings"],"summary":"Derived equal-distance split metrics for one active set","security":[{"oauth":["trainings:read"]}],"parameters":[{"in":"path","name":"training_id","required":true,"schema":{"type":"integer"}},{"in":"path","name":"set_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/trainings/{training_id}/compare":{"post":{"tags":["Trainings"],"summary":"Compare two to nine active sets from one training","security":[{"oauth":["trainings:read"]}],"parameters":[{"in":"path","name":"training_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/trainings/{training_id}/exports":{"post":{"tags":["Exports"],"summary":"Queue a training export using the web application's exporter","security":[{"oauth":["trainings:read","exports:create"]}],"parameters":[{"in":"path","name":"training_id","required":true,"schema":{"type":"integer"}},{"in":"header","name":"Idempotency-Key","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportRequest"}}}},"responses":{"202":{"$ref":"#/components/responses/Envelope"}}}},"/exports/{job_id}":{"get":{"tags":["Exports"],"summary":"Poll an asynchronous export job","security":[{"oauth":["exports:create"]}],"parameters":[{"in":"path","name":"job_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"$ref":"#/components/responses/Envelope"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/exports/{job_id}/download":{"get":{"tags":["Exports"],"summary":"Download a completed export","security":[{"oauth":["exports:create"]}],"parameters":[{"in":"path","name":"job_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Web-equivalent export file"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/workout-templates":{"get":{"tags":["Workouts"],"summary":"List workout templates","security":[{"oauth":["workouts:read"]}],"parameters":[{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/Limit"}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/workout-templates/{template_id}":{"parameters":[{"in":"path","name":"template_id","required":true,"schema":{"type":"integer"}}],"get":{"tags":["Workouts"],"summary":"Read one workout template","security":[{"oauth":["workouts:read"]}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/workout-templates/import":{"post":{"tags":["Workouts"],"summary":"Validate and inspect a shared version-1 workout","security":[{"oauth":["workouts:read"]}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/equipment/{kind}":{"get":{"tags":["Equipment"],"summary":"List owned vessels or paddles","security":[{"oauth":["equipment:read"]}],"parameters":[{"in":"path","name":"kind","required":true,"schema":{"type":"string","enum":["vessels","paddles"]}},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/Limit"}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/equipment/{kind}/{item_id}":{"parameters":[{"in":"path","name":"kind","required":true,"schema":{"type":"string","enum":["vessels","paddles"]}},{"in":"path","name":"item_id","required":true,"schema":{"type":"integer"}}],"get":{"tags":["Equipment"],"summary":"Read one owned equipment item","security":[{"oauth":["equipment:read"]}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/records":{"get":{"tags":["Records"],"summary":"Quko performance-record history for the subject","security":[{"oauth":["records:read"]}],"parameters":[{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/Limit"}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/health/weights":{"get":{"tags":["Health"],"x-quko-surfaces":["data","partner"],"summary":"Weight history after independent health consent","security":[{"oauth":["health:read"]}],"parameters":[{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/Limit"}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/health/lactate":{"get":{"tags":["Health"],"x-quko-surfaces":["data","partner"],"summary":"Subject lactate readings for one session or training","security":[{"oauth":["health:read"]}],"parameters":[{"in":"query","name":"session_id","schema":{"type":"integer"}},{"in":"query","name":"training_id","schema":{"type":"integer"}},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/Limit"}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/catalogues/{kind}":{"get":{"tags":["Catalogues"],"summary":"Boat or paddle catalogue","security":[{"oauth":["catalog:read"]}],"parameters":[{"in":"path","name":"kind","required":true,"schema":{"type":"string","enum":["boats","paddles","session-options"]}}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/tracks":{"get":{"tags":["Roster"],"summary":"Read-only Data API track list","x-quko-surfaces":["data"],"security":[{"oauth":["sessions:read"]}],"parameters":[{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/Limit"}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/tracks/{track_id}":{"get":{"tags":["Roster"],"summary":"Read one accessible track","x-quko-surfaces":["data"],"security":[{"oauth":["sessions:read"]}],"parameters":[{"in":"path","name":"track_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/roster/athletes":{"get":{"tags":["Roster"],"summary":"Read-only Data API accessible-athlete list","x-quko-surfaces":["data"],"security":[{"oauth":["athlete:read"]}],"parameters":[{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/Limit"}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/roster/athletes/{athlete_id}":{"get":{"tags":["Roster"],"summary":"Read one accessible athlete","x-quko-surfaces":["data"],"security":[{"oauth":["athlete:read"]}],"parameters":[{"in":"path","name":"athlete_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/teams":{"get":{"tags":["Roster"],"summary":"Read-only Data API team list","x-quko-surfaces":["data"],"security":[{"oauth":["athlete:read"]}],"parameters":[{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/Limit"}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/teams/{team_id}":{"get":{"tags":["Roster"],"summary":"Read one accessible team without role or licence controls","x-quko-surfaces":["data"],"security":[{"oauth":["athlete:read"]}],"parameters":[{"in":"path","name":"team_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/devices":{"get":{"tags":["Devices"],"summary":"Sanitized Data API device list","x-quko-surfaces":["data"],"security":[{"oauth":["devices:read"]}],"parameters":[{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/Limit"}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/devices/{device_id}":{"get":{"tags":["Devices"],"summary":"Read sanitized status for one accessible device","x-quko-surfaces":["data"],"security":[{"oauth":["devices:read"]}],"parameters":[{"in":"path","name":"device_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"$ref":"#/components/responses/Envelope"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/devices/{device_id}/files":{"get":{"tags":["Devices"],"summary":"Sanitized file manifest","x-quko-surfaces":["data"],"security":[{"oauth":["devices:files"]}],"parameters":[{"in":"path","name":"device_id","required":true,"schema":{"type":"integer"}},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/Limit"}],"responses":{"200":{"$ref":"#/components/responses/Envelope"}}}},"/devices/{device_id}/files/{filename}/fetch":{"post":{"tags":["Devices"],"summary":"Queue retrieval of an original encrypted QK file","description":"The job copies the original encrypted bytes and never decodes sensor data.","x-quko-surfaces":["data"],"security":[{"oauth":["devices:files"]}],"parameters":[{"in":"path","name":"device_id","required":true,"schema":{"type":"integer"}},{"in":"path","name":"filename","required":true,"schema":{"type":"string"}}],"responses":{"202":{"$ref":"#/components/responses/Envelope"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/devices/jobs/{job_id}":{"get":{"tags":["Devices"],"summary":"Poll a device fetch or delete job","x-quko-surfaces":["data"],"security":[{"oauth":["devices:files"]}],"parameters":[{"in":"path","name":"job_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"$ref":"#/components/responses/Envelope"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/devices/jobs/{job_id}/download":{"post":{"tags":["Devices"],"summary":"Download the original encrypted QK file once","description":"Successful retrieval consumes the private temporary file; later attempts return 404.","x-quko-surfaces":["data"],"security":[{"oauth":["devices:files"]}],"parameters":[{"in":"path","name":"job_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Original encrypted QK file"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/qukosim/embeds":{"post":{"tags":["QukoSim"],"summary":"Create a two-minute single-use privacy-reduced replay launch","description":"The exact HTTPS origin must already be approved: by Quko when it reviewed a Partner\napplication, or by the owner when registering a Data application.\nEach source session must have an immutable replay artifact produced by\nthe processing worker. The artifact contains quantized synthetic-frame\nvisual transforms, not sensor, GPS, stroke, identity, health, equipment,\ndevice, timestamp, metric, or source-index arrays. An authorized viewer\ncan inspect or retain the approximate visible transforms, just as they\ncould analyze a screen recording; revocation prevents new access but\ncannot recall information already received.\n","x-quko-surfaces":["data","partner"],"security":[{"oauth":["sessions:read","qukosim:embed"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["session_ids","origin"],"properties":{"session_ids":{"type":"array","minItems":1,"maxItems":9,"uniqueItems":true,"items":{"type":"integer"}},"origin":{"type":"string","format":"uri"}}}}}},"responses":{"201":{"$ref":"#/components/responses/Envelope"},"409":{"description":"Replay artifact missing or invalid"}}}},"/qukosim/launch/{token}":{"get":{"tags":["QukoSim"],"summary":"Consume a two-minute single-use embed launch","description":"Internal iframe navigation URL returned by the embed operation. It contains no OAuth token.","x-quko-surfaces":["data","partner"],"security":[],"parameters":[{"in":"path","name":"token","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Origin-restricted local Three.js player"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/qukosim/artifacts/{token}":{"get":{"tags":["QukoSim"],"summary":"Retrieve a launch-bound privacy-reduced replay artifact","description":"Internal short-lived signed URL used once by the local player.","x-quko-surfaces":["data","partner"],"security":[],"parameters":[{"in":"path","name":"token","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Compressed schema-1 replay artifact"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/qukosim/leases":{"post":{"tags":["QukoSim"],"summary":"Renew a revocable ten-minute embed authorization lease","description":"Internal player operation; accepts only the opaque lease credential issued at launch.","x-quko-surfaces":["data","partner"],"security":[],"responses":{"200":{"$ref":"#/components/responses/Envelope"},"401":{"$ref":"#/components/responses/OAuthError"}}}},"/health":{"get":{"tags":["Identity"],"summary":"Unauthenticated service health check","x-quko-surfaces":["data"],"security":[],"responses":{"200":{"description":"Service healthy"}}}}},"components":{"parameters":{"Cursor":{"in":"query","name":"cursor","description":"Opaque cursor returned in `meta.next_cursor`; expires after 24 hours and is bound to this list and subject.","schema":{"type":"string"}},"Limit":{"in":"query","name":"limit","description":"Maximum page size. The server may return fewer entries.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}}},"responses":{"Envelope":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{},"meta":{"type":"object","additionalProperties":true}}}}}},"OAuthError":{"description":"OAuth bearer error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"Resource absent or outside the token's subject boundary","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"ExportRequest":{"type":"object","required":["format"],"properties":{"format":{"type":"string","enum":["json","pdf","pdf-full","xlsx","fit","tcx"]},"athlete":{"type":"integer","minimum":1,"maximum":4,"default":1},"splits":{"type":"integer","minimum":1,"maximum":20,"default":4},"lang":{"type":"string","enum":["en","es"],"default":"en"}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"},"error_description":{"type":"string"},"scope":{"type":"string"}}}},"securitySchemes":{"oauth":{"type":"oauth2","flows":{"authorizationCode":{"authorizationUrl":"https://cloud.quko.es/api/oauth/authorize","tokenUrl":"https://cloud.quko.es/api/oauth/token","refreshUrl":"https://cloud.quko.es/api/oauth/token","scopes":{"openid":"Pairwise Quko identity","profile":"Display name, username, avatar and locale","email":"Verified email address","offline_access":"Rotating refresh token","catalog:read":"Reference catalogues","athlete:read":"Athlete profile and, on the Data API, the roster","sessions:read":"Sessions of the subject; on the Session API, the sessions the application created","trainings:read":"Trainings of the subject; on the Session API, the trainings the application created","workouts:read":"Workout templates","equipment:read":"Equipment","records:read":"Quko performance records","exports:create":"Generate exports","health:read":"Separately consented Quko-originated health data","devices:read":"Data API only. Sanitized devices","devices:files":"Data API only. Manifests and encrypted QK portability","qukosim:embed":"Privacy-reduced replay embeds"}}}}}}}