{"openapi":"3.1.0","info":{"title":"Metaverse player API","license":{"name":"Proprietary"},"version":"1","description":"The API behind the player app on the web (`/play`), Android and Windows. All three are the same client, so everything here is available to every platform.\n\n**Auth.** Sign in with `/player/otp/request` → `/player/otp/verify`, then send `Authorization: Player <token>` on every call. 401 means sign in again.\n**Identify the install.** Send `X-Client: <platform>/<version>`, platform one of `web`, `android`, `windows` (the web client and its shells) or `ue-windows`, `ue-android` (the Unreal Engine 5 apps), e.g. `ue-windows/1.0.0`. Installs older than the server's minimum get **426** with an update link on any call; call `GET /app/version` on start-up.\n**Versioning.** Within an API version (`X-API-Version` on every response) changes are additive only: new routes and new optional fields. Ignore fields you don't know. A breaking change gets a new route alongside the old one.\n**Money.** Prices and balances are whole **coins**. Anything that charges takes an `idempotencyKey`: retry with the same key after a network error and you won't be charged twice.\n**Files.** URLs like `/asset-files/...` and audio links are server-relative: prefix them with the API base.\n**Errors.** Non-2xx responses are `{ \"error\": \"…\" }`, written to be shown to the player.\n**CORS.** Allowed for app shells (`https://localhost`, `http://localhost`, `capacitor://localhost`, `tauri://localhost`, `http(s)://tauri.localhost`, `app://metaverse`) plus `APP_ORIGINS`."},"servers":[{"url":"/","description":"this server"}],"tags":[{"name":"App","description":"Start-up handshake: API version and whether this install must update."},{"name":"Sign-in","description":"Phone number + SMS code. Returns the session token."},{"name":"Account & wallet","description":"The signed-in player, coin balance and ledger, people search."},{"name":"Worlds","description":"Live 3D worlds: join, poll, walk, chat, emote. The server decides; the app draws."},{"name":"Store & items","description":"3D items bought with coins, and everything the player owns."},{"name":"Avatar","description":"The player's look. Premium options need owning."},{"name":"Spaces","description":"The player's personal 3D space and visiting others'."},{"name":"Shops","description":"Artist stores, R-Merch, orders, stand receipts."},{"name":"Live","description":"R-Auditorium: tickets, the door, shoppable cards and drops."},{"name":"Fan clubs & bundles","description":"Membership tiers (30 days, coins, no auto-renew) and bundles."},{"name":"Collection & twins","description":"Numbered items, their digital twins, authenticity and transfers."},{"name":"Aurai","description":"The concierge. Finds and navigates; never pays."},{"name":"Create","description":"R-Write Camp: creator profile, camps, rooms, songs, splits, audio."},{"name":"Groups","description":"R-Write Groups: communities and their moderated board."},{"name":"Studio","description":"For artists and managers: dashboard and payouts."},{"name":"Files","description":"Models, thumbnails and private audio."}],"security":[{"player":[]}],"components":{"securitySchemes":{"player":{"type":"apiKey","in":"header","name":"Authorization","description":"`Player <token>` from /player/otp/verify"}},"parameters":{},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A sentence you can show the player"}}},"UpdateRequired":{"type":"object","properties":{"error":{"type":"string"},"update":{"type":"object","properties":{"required":{"type":"boolean"},"minVersion":{"type":"string"},"latestVersion":{"type":"string"},"downloadUrl":{"type":["string","null"]}}}}},"AppVersion":{"type":"object","properties":{"apiVersion":{"type":"integer","example":1},"platform":{"type":"string","enum":["web","android","windows","ue-windows","ue-android"]},"minVersion":{"type":"string"},"latestVersion":{"type":"string"},"downloadUrl":{"type":["string","null"]},"updateRequired":{"type":"boolean"},"updateAvailable":{"type":"boolean"}}},"Workspace":{"type":"object","properties":{"tenantId":{"type":"string","format":"uuid"},"slug":{"type":"string"},"name":{"type":"string"}}},"Session":{"type":"object","properties":{"token":{"type":"string","description":"Send as `Authorization: Player <token>`"},"isNew":{"type":"boolean"},"user":{"type":"object"}}},"Me":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"displayName":{"type":"string"},"balance":{"type":"integer","description":"coins"}}},"Wallet":{"type":"object","properties":{"balance":{"type":"integer"},"entries":{"type":"array","items":{"type":"object","description":"{ id, delta, balance_after, kind, reason, created_at }"}}}},"Shipping":{"type":"object","required":["name","line1","city","postcode","country"],"properties":{"name":{"type":"string"},"line1":{"type":"string"},"city":{"type":"string"},"postcode":{"type":"string"},"country":{"type":"string"}}},"Product":{"type":"object","description":"A merch product as buyers see it.","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":"string"},"category":{"type":"string"},"price_coins":{"type":"integer"},"image_url":{"type":["string","null"],"description":"server-relative; resolve against the API base"},"artist_slug":{"type":"string"},"artist_name":{"type":"string"},"artist_accent":{"type":"string"},"limited":{"type":"boolean"},"edition_size":{"type":["integer","null"]},"editions_left":{"type":["integer","null"]},"sold_out":{"type":"boolean"},"variants":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"stock":{"type":"integer"}}}},"members_until":{"type":["string","null"],"format":"date-time","description":"members-only (early access) until then"},"twin_title":{"type":["string","null"],"description":"the digital twin avatar item, if any"}}},"Show":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"artist_slug":{"type":"string"},"artist_name":{"type":"string"},"venue":{"type":"string"},"starts_at":{"type":"string","format":"date-time"},"ends_at":{"type":"string","format":"date-time"},"status":{"type":"string","enum":["upcoming","live","ended","cancelled"]},"ticket_price_coins":{"type":"integer"},"tickets_left":{"type":"integer"},"has_ticket":{"type":"boolean"},"members_until":{"type":["string","null"],"format":"date-time"}}},"Membership":{"type":"object","properties":{"tier_id":{"type":"string"},"tier_name":{"type":"string"},"artist_slug":{"type":"string"},"discount_pct":{"type":"integer"},"early_access":{"type":"boolean"},"expires_at":{"type":"string","format":"date-time"}}},"Bundle":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"price_coins":{"type":"integer"},"value_coins":{"type":"integer"},"saving_coins":{"type":"integer"},"show":{"type":["object","null"]},"products":{"type":"array","items":{"$ref":"#/components/schemas/Product"}},"left":{"type":"integer"},"unavailable":{"type":["string","null"]}}},"StoreItem":{"type":"object","properties":{"asset_id":{"type":"string","format":"uuid"},"asset_ref":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"kind":{"type":"string","enum":["world_object","environment","avatar_slot"]},"slot":{"type":["string","null"],"description":"avatar slot for avatar items"},"price_coins":{"type":"integer"},"featured":{"type":"boolean"},"owned":{"type":"boolean","description":"only when signed in"},"model_url":{"type":["string","null"],"description":"GLB, server-relative"},"thumbnail_url":{"type":["string","null"]}}},"AssetManifest":{"type":"object","properties":{"version":{"type":"string","description":"changes when anything below does (also the ETag)"},"units":{"type":"object","description":"{ length: metre, rotation: degree }"},"assets":{"type":"array","items":{"type":"object","properties":{"asset_id":{"type":"string","format":"uuid"},"asset_ref":{"type":"string","description":"stable key; name your packaged asset after it"},"kind":{"type":"string","enum":["world_object","environment","avatar_slot"]},"slot":{"type":["string","null"]},"title":{"type":"string"},"for_sale":{"type":"boolean"},"price_coins":{"type":["integer","null"]},"premium":{"type":"boolean"},"twin":{"type":"boolean"},"owned":{"type":"boolean"},"model":{"type":["object","null"],"properties":{"url":{"type":"string"},"sha256":{"type":"string"},"bytes":{"type":"integer"},"format":{"type":"string","enum":["glb"]}}},"thumbnail_url":{"type":["string","null"]}}}}}},"WorldView":{"type":"object","description":"{ you, entities: [{ id, kind, name, pos, avatar }], chat: [...], objects: [{ id, asset, pos, rotY, modelUrl }] }"}}},"paths":{"/app/version":{"get":{"tags":["App"],"summary":"Version handshake","description":"Call on start-up. Tells an installed app whether it must or may update, and which API version the server speaks.","operationId":"getAppVersion","security":[],"parameters":[{"name":"platform","in":"query","required":false,"schema":{"type":"string","description":"web | android | windows | ue-windows | ue-android (default: from X-Client)"},"description":"web | android | windows | ue-windows | ue-android (default: from X-Client)"},{"name":"version","in":"query","required":false,"schema":{"type":"string","description":"the install's version, e.g. 1.2.0"},"description":"the install's version, e.g. 1.2.0"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppVersion"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/workspace":{"get":{"tags":["Sign-in"],"summary":"Resolve the workspace (world) to sign in to","operationId":"getPlayerWorkspace","security":[],"parameters":[{"name":"slug","in":"query","required":false,"schema":{"type":"string","description":"workspace slug; default is the server's PLAY_WORKSPACE"},"description":"workspace slug; default is the server's PLAY_WORKSPACE"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workspace"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/otp/request":{"post":{"tags":["Sign-in"],"summary":"Send a sign-in code by SMS","description":"Rate limited per phone and IP. On demo numbers the response includes `demoCode`.","operationId":"postPlayerOtpRequest","security":[],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tenantId":{"type":"string","format":"uuid","description":"from /player/workspace"},"phone":{"type":"string","description":"E.164, e.g. +919876543210"}},"required":["tenantId","phone"]}}}},"responses":{"202":{"description":"OTP sent; `{ demoCode? }`","content":{"application/json":{"schema":{"type":["object","array"]}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/otp/verify":{"post":{"tags":["Sign-in"],"summary":"Verify the code and get a session token","description":"New numbers must include `displayName`. Keep the returned `token` and send it as `Authorization: Player <token>`.","operationId":"postPlayerOtpVerify","security":[],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tenantId":{"type":"string","format":"uuid"},"phone":{"type":"string"},"code":{"type":"string","description":"6 digits"},"displayName":{"type":"string","description":"required for a new player"},"deviceClass":{"type":"string","description":"desktop | mobile"}},"required":["tenantId","phone","code"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Session"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/me":{"get":{"tags":["Account & wallet"],"summary":"The signed-in player and coin balance","operationId":"getPlayerMe","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/logout":{"post":{"tags":["Account & wallet"],"summary":"End this session","operationId":"postPlayerLogout","parameters":[],"responses":{"204":{"description":"Done (no body)"},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/wallet":{"get":{"tags":["Account & wallet"],"summary":"Coin balance and recent ledger entries","operationId":"getPlayerWallet","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Wallet"}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/people":{"get":{"tags":["Account & wallet"],"summary":"Find players by name (to invite, transfer to, …)","operationId":"getPlayerPeople","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"2+ characters"},"description":"2+ characters"}],"responses":{"200":{"description":"`[{ id, displayName }]`, blocked people excluded","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/worlds":{"get":{"tags":["Worlds"],"summary":"Live worlds you can enter","operationId":"getPlayerWorlds","parameters":[],"responses":{"200":{"description":"`[{ instanceId, slug, name, environment, players, agents }]`","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/worlds/{instanceId}/join":{"post":{"tags":["Worlds"],"summary":"Enter a world (one at a time)","description":"Refused with 400 and a message if the world is full or not running, or the player is kicked, suspended or banned, or a show is live there and they have no ticket.","operationId":"postPlayerWorldsByInstanceIdJoin","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"the world view","content":{"application/json":{"schema":{"type":["object","array"]}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/worlds/{instanceId}":{"get":{"tags":["Worlds"],"summary":"Poll the world","description":"Poll every ~700 ms while inside; players idle for 45 s are dropped. Returns entities, chat and objects to draw.","operationId":"getPlayerWorldsByInstanceId","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorldView"}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/worlds/{instanceId}/move":{"post":{"tags":["Worlds"],"summary":"Ask to walk somewhere","description":"The server clamps the step and the bounds; draw what the next poll says. 600/min.","operationId":"postPlayerWorldsByInstanceIdMove","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"to":{"type":"array","items":{"type":"number"},"minItems":2,"maxItems":2,"description":"[x, y] in metres"}},"required":["to"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/worlds/{instanceId}/say":{"post":{"tags":["Worlds"],"summary":"Say something (moderated)","description":"30/min. `{ blocked: true }` means it broke the rules and wasn't sent.","operationId":"postPlayerWorldsByInstanceIdSay","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"max 280"}},"required":["text"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/worlds/{instanceId}/emote":{"post":{"tags":["Worlds"],"summary":"Play an emote","operationId":"postPlayerWorldsByInstanceIdEmote","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"wave | cheer | dance | nod | point | sit"}},"required":["name"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/worlds/{instanceId}/stream":{"get":{"tags":["Worlds"],"summary":"Real-time world stream (WebSocket) for native clients","description":"Upgrade with `Authorization: Player <token>` (and `X-Client`). Join first with `POST /join`.\n\nServer sends `{type:\"hello\", you, tickMs, apiVersion}`, then `{type:\"view\", ...}` every `tickMs` (same body as `GET /player/worlds/{instanceId}`).\n\nClient sends `{type:\"move\", to:[x,y], id?}`, `{type:\"say\", text, id?}`, `{type:\"emote\", name, id?}`, `{type:\"ping\", t?}`; replies are `{type:\"ack\", id, result}` or `{type:\"error\", id?, error}`.\n\nLimits per connection: move 20/s, say 30/min, emote 60/min; messages up to 4 KB. Close 4403 = not in this world (kicked, banned, never joined); 4400 = flooding.\n\nEntities carry `from`, `to`, `t0` (ms) and `speed` (m/s): interpolate between ticks.","operationId":"getPlayerWorldsByInstanceIdStream","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"101":{"description":"Switching Protocols: the WebSocket is open"},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Not allowed (not a ticket holder, members only, not a manager, …)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/worlds/{instanceId}/leave":{"post":{"tags":["Worlds"],"summary":"Leave the world","operationId":"postPlayerWorldsByInstanceIdLeave","parameters":[{"name":"instanceId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Done (no body)"},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/store":{"get":{"tags":["Store & items"],"summary":"3D items for sale (with your ownership if signed in)","operationId":"getStore","security":[],"parameters":[{"name":"tenantId","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StoreItem"}}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/store/purchase":{"post":{"tags":["Store & items"],"summary":"Buy a 3D item with coins (201; 200 when replayed with the same key)","operationId":"postStorePurchase","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"assetId":{"type":"string","format":"uuid"},"idempotencyKey":{"type":"string","description":"Idempotency key, 8-100 chars. Retrying with the same key never charges twice."}},"required":["assetId","idempotencyKey"]}}}},"responses":{"201":{"description":"`{ purchase, balance }`","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough coins","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict (sold out, already owned, wrong state)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/assets":{"get":{"tags":["Store & items"],"summary":"Asset manifest: every asset's stable asset_ref and model file","description":"For apps that ship their own high-detail models (UE5): map `asset_ref` to a packaged asset, and fall back to the GLB in `model.url` (verify `model.sha256`). Send `If-None-Match` with the last ETag to get 304 when nothing changed.","operationId":"getPlayerAssets","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetManifest"}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/inventory":{"get":{"tags":["Store & items"],"summary":"Items you own (bought, granted, digital twins)","operationId":"getPlayerInventory","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/avatar":{"get":{"tags":["Avatar"],"summary":"Your look, every option per slot (locked premium ones marked) and presets","operationId":"getPlayerAvatar","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Avatar"],"summary":"Save your look","description":"Premium options you don't own are refused.","operationId":"putPlayerAvatar","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"config":{"type":"object","description":"{ slots, colors, height }"}},"required":["config"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Not allowed (not a ticket holder, members only, not a manager, …)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/space":{"get":{"tags":["Spaces"],"summary":"Your personal space (created on first call)","operationId":"getPlayerSpace","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Spaces"],"summary":"Rename, change visibility or environment","operationId":"patchPlayerSpace","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"visibility":{"type":"string","description":"private | invited | public"},"environmentAssetId":{"type":"string","format":"uuid","description":"an environment you own, or null"}},"required":[]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/space/objects":{"post":{"tags":["Spaces"],"summary":"Place an owned item","operationId":"postPlayerSpaceObjects","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"assetId":{"type":"string","format":"uuid"},"x":{"type":"number"},"y":{"type":"number"},"rotation":{"type":"number","description":"degrees"}},"required":["assetId","x","y"]}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/space/objects/{id}":{"patch":{"tags":["Spaces"],"summary":"Move or rotate a placed item","operationId":"patchPlayerSpaceObjectsById","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"},"rotation":{"type":"number"}},"required":["x","y"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Spaces"],"summary":"Remove a placed item","operationId":"deletePlayerSpaceObjectsById","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Done (no body)"},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/space/invites":{"post":{"tags":["Spaces"],"summary":"Invite someone to your space","operationId":"postPlayerSpaceInvites","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","format":"uuid"}},"required":["userId"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/space/invites/{userId}":{"delete":{"tags":["Spaces"],"summary":"Remove an invite","operationId":"deletePlayerSpaceInvitesByUserId","parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Done (no body)"},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/spaces":{"get":{"tags":["Spaces"],"summary":"Spaces you can visit (public, or you're invited)","operationId":"getPlayerSpaces","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/spaces/{id}":{"get":{"tags":["Spaces"],"summary":"Visit a space (objects with model URLs)","operationId":"getSpacesById","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Not allowed (not a ticket holder, members only, not a manager, …)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/artists":{"get":{"tags":["Shops"],"summary":"Artists with stores","operationId":"getArtists","security":[],"parameters":[{"name":"tenantId","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/artists/{slug}":{"get":{"tags":["Shops"],"summary":"One artist's store","operationId":"getArtistsBySlug","security":[],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"tenantId","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"`{ artist, products: [Product] }`","content":{"application/json":{"schema":{"type":["object","array"]}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/merch":{"get":{"tags":["Shops"],"summary":"R-Merch marketplace","operationId":"getMerch","security":[],"parameters":[{"name":"tenantId","in":"query","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"artist","in":"query","required":false,"schema":{"type":"string","description":"artist slug"},"description":"artist slug"},{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"apparel | accessories | physical_music | signed | tour | collectible | bundle"},"description":"apparel | accessories | physical_music | signed | tour | collectible | bundle"},{"name":"genre","in":"query","required":false,"schema":{"type":"string"}},{"name":"maxPrice","in":"query","required":false,"schema":{"type":"integer","description":"coins"},"description":"coins"},{"name":"limited","in":"query","required":false,"schema":{"type":"string","description":"1 = numbered editions only"},"description":"1 = numbered editions only"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"search"},"description":"search"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Product"}}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/merch/orders":{"post":{"tags":["Shops"],"summary":"Order merch with coins","description":"Fan-club members get their discount automatically; members-only products refuse non-members with 403. `dropId` buys from a live show drop.","operationId":"postMerchOrders","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"variantId":{"type":"string","format":"uuid","description":"the size"},"quantity":{"type":"integer","description":"1-5"},"shipping":{"$ref":"#/components/schemas/Shipping"},"dropId":{"type":"string","format":"uuid","description":"show drop"},"idempotencyKey":{"type":"string","description":"Idempotency key, 8-100 chars. Retrying with the same key never charges twice."}},"required":["variantId","shipping","idempotencyKey"]}}}},"responses":{"201":{"description":"`{ order, balance }`; numbered items include edition_numbers","content":{"application/json":{"schema":{"type":["object","array"]}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough coins","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Not allowed (not a ticket holder, members only, not a manager, …)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict (sold out, already owned, wrong state)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/merch-orders":{"get":{"tags":["Shops"],"summary":"Your online orders","operationId":"getPlayerMerchOrders","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/receipts":{"get":{"tags":["Shops"],"summary":"What you bought at stands (R-POS)","operationId":"getPlayerReceipts","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/pos-code":{"get":{"tags":["Shops"],"summary":"A short-lived code to show at a stand so the sale joins your account","operationId":"getPlayerPosCode","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/authenticity":{"get":{"tags":["Collection & twins"],"summary":"Certificates for numbered items you own","operationId":"getPlayerAuthenticity","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/authenticity/{code}":{"get":{"tags":["Collection & twins"],"summary":"Public authenticity record (what a QR/NFC tag opens)","description":"Edition, current owner, digital twin and recorded transfers. Not an inspection of the physical item.","operationId":"getAuthenticityByCode","security":[],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/collection":{"get":{"tags":["Collection & twins"],"summary":"Numbered items you own (with digital twins) and transfers offered to you","operationId":"getPlayerCollection","parameters":[],"responses":{"200":{"description":"`{ owned: [...], incoming: [...] }`","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/collection/{code}/transfer":{"post":{"tags":["Collection & twins"],"summary":"Offer an item to another player","description":"Gift (0) or resale in coins, capped at what it first sold for. Online items only once delivered. Expires after 7 days.","operationId":"postPlayerCollectionByCodeTransfer","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"toUserId":{"type":"string","format":"uuid"},"priceCoins":{"type":"integer","description":"0 = gift"}},"required":["toUserId"]}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict (sold out, already owned, wrong state)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/transfers/{id}/cancel":{"post":{"tags":["Collection & twins"],"summary":"Withdraw your offer","operationId":"postPlayerTransfersByIdCancel","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/transfers/{id}/respond":{"post":{"tags":["Collection & twins"],"summary":"Accept (pays the seller if priced) or decline","operationId":"postPlayerTransfersByIdRespond","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accept":{"type":"boolean"}},"required":["accept"]}}}},"responses":{"200":{"description":"`{ accepted, balance? }`","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough coins","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict (sold out, already owned, wrong state)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/shows":{"get":{"tags":["Live"],"summary":"Upcoming and live shows (has_ticket when signed in)","operationId":"getShows","security":[],"parameters":[{"name":"tenantId","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Show"}}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/shows/{id}/tickets":{"post":{"tags":["Live"],"summary":"Buy a ticket (one per fan per show)","operationId":"postShowsByIdTickets","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"idempotencyKey":{"type":"string","description":"Idempotency key, 8-100 chars. Retrying with the same key never charges twice."}},"required":["idempotencyKey"]}}}},"responses":{"201":{"description":"`{ ticket, balance }`","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough coins","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Not allowed (not a ticket holder, members only, not a manager, …)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict (sold out, already owned, wrong state)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/shows/{id}/enter":{"post":{"tags":["Live"],"summary":"Ticket check at the door; returns the world instance to join","operationId":"postShowsByIdEnter","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"`{ instanceId, title }`","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Not allowed (not a ticket holder, members only, not a manager, …)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict (sold out, already owned, wrong state)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/shows/{id}/live":{"get":{"tags":["Live"],"summary":"Shoppable cards and timed drops during the show (ticket holders; poll ~3 s)","operationId":"getShowsByIdLive","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Not allowed (not a ticket holder, members only, not a manager, …)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/clubs":{"get":{"tags":["Fan clubs & bundles"],"summary":"Your active memberships","operationId":"getPlayerClubs","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Membership"}}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/clubs/{slug}":{"get":{"tags":["Fan clubs & bundles"],"summary":"An artist's tiers and your membership","operationId":"getPlayerClubsBySlug","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"`{ tiers, membership, periodDays }`","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/clubs/tiers/{tierId}/join":{"post":{"tags":["Fan clubs & bundles"],"summary":"Join, renew or switch tier (30 days, coins, no auto-renew)","operationId":"postPlayerClubsTiersByTierIdJoin","parameters":[{"name":"tierId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"idempotencyKey":{"type":"string","description":"Idempotency key, 8-100 chars. Retrying with the same key never charges twice."}},"required":["idempotencyKey"]}}}},"responses":{"201":{"description":"`{ membership, action, paid, credit, balance }`","content":{"application/json":{"schema":{"type":["object","array"]}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough coins","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/bundles":{"get":{"tags":["Fan clubs & bundles"],"summary":"Bundles on sale","operationId":"getPlayerBundles","parameters":[{"name":"artist","in":"query","required":false,"schema":{"type":"string","description":"artist slug"},"description":"artist slug"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Bundle"}}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/bundles/{id}/buy":{"post":{"tags":["Fan clubs & bundles"],"summary":"Buy a bundle: one charge, every part or nothing","operationId":"postPlayerBundlesByIdBuy","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"variants":{"type":"object","additionalProperties":{"type":"string"},"description":"productId -> variantId, one per product"},"shipping":{"$ref":"#/components/schemas/Shipping"},"idempotencyKey":{"type":"string","description":"Idempotency key, 8-100 chars. Retrying with the same key never charges twice."}},"required":["idempotencyKey"]}}}},"responses":{"201":{"description":"`{ purchase: { tickets, orders }, balance }`","content":{"application/json":{"schema":{"type":["object","array"]}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough coins","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Not allowed (not a ticket holder, members only, not a manager, …)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict (sold out, already owned, wrong state)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/aurai":{"post":{"tags":["Aurai"],"summary":"Ask the concierge","description":"Answers from real data; never buys. A basket comes back as `proposal` for the player to confirm through the normal endpoints. Messages aren't stored. 30/min.","operationId":"postPlayerAurai","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"max 500"},"context":{"type":"object","description":"{ showId?, lastProductId?, artist? }: what's on screen"}},"required":["message"]}}}},"responses":{"200":{"description":"`{ reply, products?, shows?, action?, proposal?, suggestions, usedHistory }`","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/aurai/prefs":{"get":{"tags":["Aurai"],"summary":"Whether Aurai may use your purchase history","operationId":"getPlayerAuraiPrefs","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Aurai"],"summary":"Opt in or out of personalisation","operationId":"putPlayerAuraiPrefs","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"useHistory":{"type":"boolean"}},"required":["useHistory"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/creator":{"get":{"tags":["Create"],"summary":"Your creator profile","operationId":"getPlayerCreator","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Create"],"summary":"Save your creator profile","operationId":"putPlayerCreator","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"roles":{"type":"array","items":{"type":"string"}},"genres":{"type":"array","items":{"type":"string"}},"languages":{"type":"array","items":{"type":"string"}},"location":{"type":"string"},"bio":{"type":"string"},"openToCollaborate":{"type":"boolean"}},"required":["roles"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/collaborators":{"get":{"tags":["Create"],"summary":"Find collaborators","operationId":"getPlayerCollaborators","parameters":[{"name":"role","in":"query","required":false,"schema":{"type":"string"}},{"name":"genre","in":"query","required":false,"schema":{"type":"string"}},{"name":"language","in":"query","required":false,"schema":{"type":"string"}},{"name":"q","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/camps":{"get":{"tags":["Create"],"summary":"Camps you're in or invited to, and open ones","operationId":"getPlayerCamps","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/camps/{id}/respond":{"post":{"tags":["Create"],"summary":"Accept or decline a camp invite","operationId":"postPlayerCampsByIdRespond","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accept":{"type":"boolean"}},"required":[]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/camps/{id}/rooms":{"get":{"tags":["Create"],"summary":"Writing rooms in a camp","operationId":"getPlayerCampsByIdRooms","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/camps/{id}/review":{"get":{"tags":["Create"],"summary":"Songs up for review (reviewers)","operationId":"getPlayerCampsByIdReview","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/rooms/{id}/members":{"post":{"tags":["Create"],"summary":"Add someone to a writing room","operationId":"postPlayerRoomsByIdMembers","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","format":"uuid"}},"required":["userId"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/rooms/{id}/songs":{"get":{"tags":["Create"],"summary":"Songs in a room","operationId":"getPlayerRoomsByIdSongs","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Create"],"summary":"Start a song","operationId":"postPlayerRoomsByIdSongs","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"notes":{"type":"string"}},"required":["title"]}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/songs/{id}":{"get":{"tags":["Create"],"summary":"A song with versions and contributors","operationId":"getPlayerSongsById","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/songs/{id}/status":{"post":{"tags":["Create"],"summary":"Move a song along","operationId":"postPlayerSongsByIdStatus","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","description":"draft | under_review | shortlisted | on_hold | released | archived"}},"required":["status"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/songs/{id}/versions":{"post":{"tags":["Create"],"summary":"Add a version","operationId":"postPlayerSongsByIdVersions","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"label":{"type":"string"},"notes":{"type":"string"},"reference":{"type":"string"}},"required":["label"]}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/songs/{id}/splits":{"get":{"tags":["Create"],"summary":"The split sheet","operationId":"getPlayerSongsByIdSplits","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Create"],"summary":"Edit shares (must total 100%)","operationId":"putPlayerSongsByIdSplits","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"entries":{"type":"array","items":{"type":"object","description":"{ userId, role, percent }"}}},"required":["entries"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/songs/{id}/splits/propose":{"post":{"tags":["Create"],"summary":"Propose the split sheet to the room","operationId":"postPlayerSongsByIdSplitsPropose","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/songs/{id}/splits/acknowledge":{"post":{"tags":["Create"],"summary":"Agree to the proposed split","operationId":"postPlayerSongsByIdSplitsAcknowledge","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/songs/{id}/splits/reopen":{"post":{"tags":["Create"],"summary":"Reopen a confirmed split (clears agreements)","operationId":"postPlayerSongsByIdSplitsReopen","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/songs/{id}/audio":{"get":{"tags":["Create"],"summary":"Demo and stem files on a song","operationId":"getPlayerSongsByIdAudio","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Create"],"summary":"Upload a demo or stem","operationId":"postPlayerSongsByIdAudio","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"versionId","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}}}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Not allowed (not a ticket holder, members only, not a manager, …)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"File too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/camp-audio/{fileId}/link":{"get":{"tags":["Create"],"summary":"A short-lived signed link to play a private file","operationId":"getPlayerCampAudioByFileIdLink","parameters":[{"name":"fileId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"`{ url }`; resolve against the API base","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/camp-audio/{fileId}":{"delete":{"tags":["Create"],"summary":"Delete a file you uploaded","operationId":"deletePlayerCampAudioByFileId","parameters":[{"name":"fileId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Done (no body)"},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/camp-audio/{fileId}":{"get":{"tags":["Files"],"summary":"Stream a private file via its signed link","description":"Only with the `exp` and `sig` from /player/camp-audio/:fileId/link. Supports Range.","operationId":"getCampAudioByFileId","security":[],"parameters":[{"name":"fileId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Stream a private file via its signed link","content":{"audio/*":{"schema":{"type":"string","format":"binary"}}}},"403":{"description":"Not allowed (not a ticket holder, members only, not a manager, …)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/groups":{"get":{"tags":["Groups"],"summary":"Browse groups","operationId":"getPlayerGroups","parameters":[{"name":"genre","in":"query","required":false,"schema":{"type":"string"}},{"name":"region","in":"query","required":false,"schema":{"type":"string"}},{"name":"q","in":"query","required":false,"schema":{"type":"string"}},{"name":"mine","in":"query","required":false,"schema":{"type":"string","description":"1 = only mine"},"description":"1 = only mine"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Groups"],"summary":"Create a group","operationId":"postPlayerGroups","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"2-60"},"purpose":{"type":"string"},"genre":{"type":"string"},"region":{"type":"string"},"visibility":{"type":"string","description":"open | curated (ask to join) | private (invite only); default curated"}},"required":["name"]}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/groups/{id}":{"get":{"tags":["Groups"],"summary":"A group and your role in it","operationId":"getPlayerGroupsById","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/groups/{id}/join":{"post":{"tags":["Groups"],"summary":"Join (or request to join)","operationId":"postPlayerGroupsByIdJoin","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/groups/{id}/respond":{"post":{"tags":["Groups"],"summary":"Accept or decline an invite","operationId":"postPlayerGroupsByIdRespond","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accept":{"type":"boolean"}},"required":[]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/groups/{id}/invite":{"post":{"tags":["Groups"],"summary":"Invite someone (moderators)","operationId":"postPlayerGroupsByIdInvite","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","format":"uuid"}},"required":["userId"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/groups/{id}/requests/{userId}":{"post":{"tags":["Groups"],"summary":"Approve or refuse a join request","operationId":"postPlayerGroupsByIdRequestsByUserId","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"userId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"approve":{"type":"boolean"}},"required":[]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/groups/{id}/members/{userId}/role":{"post":{"tags":["Groups"],"summary":"Change a member's role","operationId":"postPlayerGroupsByIdMembersByUserIdRole","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"userId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"role":{"type":"string","description":"owner | moderator | mentor | member"}},"required":["role"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/groups/{id}/members/{userId}":{"delete":{"tags":["Groups"],"summary":"Leave, or remove a member","operationId":"deletePlayerGroupsByIdMembersByUserId","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"userId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Done (no body)"},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/groups/{id}/archive":{"post":{"tags":["Groups"],"summary":"Archive a group (owner)","operationId":"postPlayerGroupsByIdArchive","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/groups/{id}/posts":{"get":{"tags":["Groups"],"summary":"The board","operationId":"getPlayerGroupsByIdPosts","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"kind","in":"query","required":false,"schema":{"type":"string","description":"looking_for | showcase | discussion"},"description":"looking_for | showcase | discussion"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Groups"],"summary":"Post to the board (moderated)","operationId":"postPlayerGroupsByIdPosts","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"body":{"type":"string"},"kind":{"type":"string","description":"looking_for | showcase | discussion (default)"},"rolesSought":{"type":"array","items":{"type":"string"}}},"required":["body"]}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/posts/{id}/replies":{"post":{"tags":["Groups"],"summary":"Reply to a post","operationId":"postPlayerPostsByIdReplies","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"body":{"type":"string"}},"required":["body"]}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/posts/{id}":{"delete":{"tags":["Groups"],"summary":"Delete a post (author or moderator)","operationId":"deletePlayerPostsById","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Done (no body)"},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/posts/{id}/report":{"post":{"tags":["Groups"],"summary":"Report a post to moderators","operationId":"postPlayerPostsByIdReport","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"reason":{"type":"string"}},"required":[]}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/posts/{id}/pin":{"post":{"tags":["Groups"],"summary":"Pin or unpin (moderators)","operationId":"postPlayerPostsByIdPin","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"pinned":{"type":"boolean"}},"required":[]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/studio":{"get":{"tags":["Studio"],"summary":"Artists you manage (empty for most players)","operationId":"getPlayerStudio","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/studio/{slug}":{"get":{"tags":["Studio"],"summary":"Artist dashboard: revenue, shows, products, audience, fan club","operationId":"getPlayerStudioBySlug","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","description":"7 | 30 | 90"},"description":"7 | 30 | 90"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Not allowed (not a ticket holder, members only, not a manager, …)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/studio/{slug}/payouts":{"get":{"tags":["Studio"],"summary":"Earned since the last statement, and payout statements","operationId":"getPlayerStudioBySlugPayouts","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Not allowed (not a ticket holder, members only, not a manager, …)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/player/studio/{slug}/payouts/{id}":{"get":{"tags":["Studio"],"summary":"One statement with every line","operationId":"getPlayerStudioBySlugPayoutsById","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"csv for a spreadsheet download"},"description":"csv for a spreadsheet download"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":["object","array"]}}}},"401":{"description":"Sign in required (token missing, expired or revoked)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Not allowed (not a ticket holder, members only, not a manager, …)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/asset-files/{tenantId}/{name}":{"get":{"tags":["Files"],"summary":"3D models and thumbnails (content-addressed, cache forever)","operationId":"getAssetFilesByTenantIdByName","security":[],"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"name","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"3D models and thumbnails (content-addressed, cache forever)","content":{"model/gltf-binary":{"schema":{"type":"string","format":"binary"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"This app version is too old; see `update`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequired"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}