{"openapi":"3.1.0","info":{"title":"Depot API","version":"0.3.0","description":"Control plane for Depot game distribution. Game bytes never pass through this API in staging or production: uploads and restricted downloads use short-lived presigned R2 URLs, public downloads use the CDN."},"servers":[{"url":"https://api.staging.depot.games"},{"url":"http://127.0.0.1:8787"}],"security":[{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"OIDC access token from Depot's identity service (people), organization API key `dpk_…` (CI, integrations, agents), download grant `dpg_…`, download session `dps_…`, or the platform bootstrap secret (assigning M2-era games only). Never in URLs."}},"schemas":{"Problem":{"type":"object","required":["type","title","status","detail"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"request_id":{"type":"string"}}},"Descriptor":{"type":"object","description":"Signed with Ed25519 over `DEPOT-RELEASE-v1\\0` + RFC 8785 canonical JSON of this object.","required":["schema","game_id","platform","release_name","sequence","package","protection","manifest","index","packs","created_at"],"properties":{"schema":{"const":"depot.release/v1"},"game_id":{"type":"string"},"platform":{"type":"string"},"release_name":{"type":"string"},"sequence":{"type":"integer","minimum":1},"package":{"type":"string"},"protection":{"type":"object","required":["mode","domain_id","key_version","key_check"],"properties":{"mode":{"enum":["none","aes-256-gcm"]},"domain_id":{"type":"string"},"key_version":{"type":"integer"},"key_check":{"type":["string","null"]}}},"manifest":{"$ref":"#/components/schemas/ObjectRef"},"index":{"$ref":"#/components/schemas/ObjectRef"},"packs":{"type":"array","items":{"$ref":"#/components/schemas/ObjectRef"}},"created_at":{"type":"string"}}},"Organization":{"type":"object","required":["id","name","slug","created_at"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"},"created_at":{"type":"string","format":"date-time"}}},"Membership":{"description":"An organization with the caller's role and resolved permissions in it.","allOf":[{"$ref":"#/components/schemas/Organization"},{"type":"object","required":["role","permissions"],"properties":{"role":{"type":"string"},"permissions":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"resource → actions, e.g. {\"release\": [\"publish\"]}"}}}]},"OrganizationContext":{"description":"The organization as the calling principal sees it (a member, or an API key with role null).","allOf":[{"$ref":"#/components/schemas/Organization"},{"type":"object","required":["role","principal","permissions"],"properties":{"role":{"type":["string","null"]},"principal":{"type":"object","required":["kind","id"],"properties":{"kind":{"enum":["user","api_key"]},"id":{"type":["string","null"]}}},"permissions":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"resource → actions, e.g. {\"release\": [\"publish\"]}"}}}]},"Me":{"type":"object","required":["identity_id","issuer","subject","tenant_scope","display_name","handle","memberships"],"properties":{"identity_id":{"type":"string"},"issuer":{"type":"string"},"subject":{"type":"string"},"tenant_scope":{"type":["string","null"]},"display_name":{"type":["string","null"]},"handle":{"type":["string","null"],"description":"the public @handle, or null until chosen"},"memberships":{"type":"array","items":{"type":"object","required":["organization_id","slug","name","role"],"properties":{"organization_id":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"role":{"type":"string"}}}}}},"Member":{"type":"object","required":["user_id","display_name","handle","role","joined_at"],"properties":{"user_id":{"type":"string"},"display_name":{"type":"string"},"handle":{"type":["string","null"]},"email":{"type":"string","description":"only for callers who can manage members"},"role":{"enum":["owner","admin","publisher","member"]},"joined_at":{"type":"string","format":"date-time"}}},"Invitation":{"type":"object","required":["id","email","role","status","expires_at","inviter_id"],"properties":{"id":{"type":"string"},"email":{"type":"string"},"role":{"enum":["owner","admin","publisher","member"]},"status":{"type":"string"},"expires_at":{"type":"string","format":"date-time"},"inviter_id":{"type":"string"}}},"Storefront":{"type":"object","required":["slug","display_name","bio","links","support_url","logo","banner","revision"],"properties":{"slug":{"type":"string"},"display_name":{"type":"string"},"bio":{"type":["string","null"]},"links":{"type":"array","items":{"type":"object","required":["label","url"],"properties":{"label":{"type":"string"},"url":{"type":"string"}}}},"support_url":{"type":["string","null"]},"url":{"type":["string","null"],"description":"the studio's public page (shown once it has a public game page)"},"verified":{"type":"boolean","description":"Depot has verified the studio; verified studios get their own address"},"vanity_url":{"type":["string","null"],"description":"the studio's own address, https://<slug>.depot.games, live once the studio is verified: its storefront at / and its games at /<game> (null until verified, or when the slug is a reserved name)"},"studio_address":{"type":["string","null"],"description":"the address the studio will get once verified (null for reserved names)"},"logo":{"oneOf":[{"type":"object","required":["url","width","height"],"properties":{"url":{"type":"string"},"width":{"type":"integer"},"height":{"type":"integer"}}},{"type":"null"}]},"banner":{"oneOf":[{"type":"object","required":["url","width","height"],"properties":{"url":{"type":"string"},"width":{"type":"integer"},"height":{"type":"integer"}}},{"type":"null"}]},"revision":{"type":"integer"},"updated_at":{"type":"string"}}},"PageContent":{"type":"object","required":["tagline","short_description","description","screenshots","gallery","hero_video","theme","accessibility","trailer","tags","content_warnings","status","requirements","support_url","access","channel"],"properties":{"tagline":{"type":["string","null"],"maxLength":120},"short_description":{"type":["string","null"],"maxLength":200,"description":"used in link previews"},"description":{"type":["string","null"],"maxLength":8000},"screenshots":{"type":"array","items":{"type":"object","required":["id","url","width","height"],"properties":{"id":{"type":"string"},"url":{"type":"string"},"width":{"type":"integer"},"height":{"type":"integer"}}}},"gallery":{"type":"array","description":"screenshots (shot_…) and videos (vid_…) in display order; resolve ids through GamePage.media","items":{"$ref":"#/components/schemas/GalleryEntry"}},"hero_video":{"type":["string","null"],"description":"an uploaded loop (vid_…) that plays muted over the hero"},"theme":{"$ref":"#/components/schemas/PageTheme"},"accessibility":{"type":"array","items":{"type":"string"}},"trailer":{"oneOf":[{"type":"object","required":["provider","id"],"properties":{"provider":{"enum":["youtube","vimeo","depot"]},"id":{"type":"string","description":"YouTube/Vimeo id, or an uploaded video id (vid_…)"}}},{"type":"null"}]},"tags":{"type":"array","items":{"type":"string"}},"content_warnings":{"type":"array","items":{"type":"string"}},"status":{"enum":["alpha","beta","early-access","released"]},"requirements":{"type":"object","additionalProperties":{"type":"object","required":["minimum"],"properties":{"minimum":{"type":["string","null"]}}}},"support_url":{"type":["string","null"]},"access":{"enum":["free","key","invite"],"description":"free: claimable; key: redeem a key; invite: grants only"},"channel":{"type":"string","description":"channel players install from"}}},"GalleryEntry":{"type":"object","required":["id","caption"],"properties":{"id":{"type":"string"},"caption":{"type":["string","null"],"maxLength":140}}},"PageTheme":{"oneOf":[{"type":"object","required":["accent"],"properties":{"accent":{"type":"string","pattern":"^#[0-9a-f]{6}$","description":"the studio's colour; Depot adjusts its lightness for contrast"}}},{"type":"null"}]},"Video":{"type":"object","required":["id","purpose","status","url","bytes","duration_ms","width","height","poster"],"properties":{"id":{"type":"string"},"purpose":{"enum":["loop","trailer","clip"]},"status":{"enum":["uploading","ready"]},"url":{"type":"string"},"bytes":{"type":"integer"},"duration_ms":{"type":["integer","null"]},"width":{"type":["integer","null"]},"height":{"type":["integer","null"]},"poster":{"oneOf":[{"type":"object","required":["url","width","height"],"properties":{"url":{"type":"string"},"width":{"type":"integer"},"height":{"type":"integer"}}},{"type":"null"}]}}},"MediaItem":{"oneOf":[{"type":"object","required":["type","url","width","height"],"properties":{"type":{"const":"image"},"url":{"type":"string"},"width":{"type":"integer"},"height":{"type":"integer"}}},{"allOf":[{"type":"object","required":["type"],"properties":{"type":{"const":"video"}}},{"$ref":"#/components/schemas/Video"}]}]},"PageDraftPatch":{"type":"object","properties":{"tagline":{"type":["string","null"]},"short_description":{"type":["string","null"]},"description":{"type":["string","null"]},"screenshots":{"type":"array","maxItems":12,"items":{"type":"string"},"description":"screenshot ids, in order (older clients; prefer gallery)"},"gallery":{"type":"array","maxItems":20,"items":{"$ref":"#/components/schemas/GalleryEntry"},"description":"screenshots and videos, in order, with captions"},"hero_video":{"type":["string","null"],"description":"an uploaded loop's id"},"theme":{"$ref":"#/components/schemas/PageTheme"},"accessibility":{"type":"array","maxItems":10,"items":{"type":"string","maxLength":60}},"trailer":{"oneOf":[{"type":"object","required":["provider","id"],"properties":{"provider":{"enum":["youtube","vimeo","depot"]},"id":{"type":"string","description":"YouTube/Vimeo id, or an uploaded video id (vid_…)"}}},{"type":"null"}]},"tags":{"type":"array","maxItems":10,"items":{"type":"string"}},"content_warnings":{"type":"array","maxItems":10,"items":{"type":"string"}},"status":{"enum":["alpha","beta","early-access","released"]},"requirements":{"type":["object","null"],"additionalProperties":{"type":"object","properties":{"minimum":{"type":["string","null"]}}}},"support_url":{"type":["string","null"]},"access":{"enum":["free","key","invite"]},"channel":{"type":"string"},"expected_revision":{"type":["integer","null"]}}},"GamePage":{"type":"object","required":["game_id","visibility","disabled_reason","url","draft","published","media","has_unpublished_changes","revision","published_at","updated_at"],"properties":{"game_id":{"type":"string"},"visibility":{"enum":["draft","unlisted","public","disabled"]},"disabled_reason":{"type":["string","null"],"description":"why Depot disabled the page"},"url":{"type":["string","null"],"description":"the page's public URL"},"draft":{"$ref":"#/components/schemas/PageContent"},"published":{"oneOf":[{"$ref":"#/components/schemas/PageContent"},{"type":"null"}]},"media":{"type":"object","description":"every screenshot and video id the draft or published page uses","additionalProperties":{"$ref":"#/components/schemas/MediaItem"}},"has_unpublished_changes":{"type":"boolean"},"revision":{"type":"integer"},"published_at":{"type":["string","null"]},"published_by":{"type":["string","null"]},"updated_at":{"type":"string"}}},"PublicStudio":{"type":"object","required":["slug","display_name","bio","links","support_url","logo","banner","games"],"properties":{"slug":{"type":"string"},"display_name":{"type":"string"},"bio":{"type":["string","null"]},"links":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"url":{"type":"string"}}}},"support_url":{"type":["string","null"]},"logo":{"type":["object","null"]},"banner":{"type":["object","null"]},"games":{"type":"array","items":{"type":"object","required":["slug","name","tagline","status","cover_url","icon_url","hero_url"],"properties":{"slug":{"type":"string"},"name":{"type":"string"},"tagline":{"type":["string","null"]},"status":{"type":"string"},"cover_url":{"type":["string","null"]},"icon_url":{"type":["string","null"]},"hero_url":{"type":["string","null"]}}}}}},"PublicGamePage":{"type":"object","required":["studio","game","page","access","available_platforms","facts","updates","install"],"properties":{"offer":{"type":["object","null"],"description":"The game's price when the studio sells it through Depot (ADR 0014); null when it isn't for sale","properties":{"id":{"type":"string"},"currency":{"type":"string"},"amount_minor":{"type":"integer"},"seller":{"type":"string","description":"The merchant of record (the studio's Stripe business name)"}}},"studio":{"type":"object","required":["slug","display_name"],"properties":{"slug":{"type":"string"},"display_name":{"type":"string"}}},"game":{"type":"object","required":["id","slug","name","platforms","art"],"properties":{"id":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"platforms":{"type":"array","items":{"type":"string"}},"art":{"type":"object"}}},"page":{"type":"object","description":"published content (PageContent without access/channel; screenshots, gallery, hero_video and an uploaded trailer resolved to urls with posters) plus visibility and published_at"},"access":{"enum":["free","key","invite"]},"available_platforms":{"type":"array","items":{"type":"string"},"description":"platforms with a build on the page's channel"},"facts":{"type":"object","required":["download_bytes"],"properties":{"download_bytes":{"type":["integer","null"],"description":"download size of the build the page installs (the largest platform)"}}},"updates":{"type":"array","description":"the studio's releases on the page's channel, newest first (at most 5; rollbacks left out)","items":{"type":"object","required":["version","at","note"],"properties":{"version":{"type":"string"},"at":{"type":"string"},"note":{"type":["string","null"]}}}},"install":{"type":"object","required":["channel","deep_link"],"properties":{"channel":{"type":"string"},"deep_link":{"type":"string","description":"depot://game/{id}?v=1&channel={name}"}}}}},"Package":{"type":"object","required":["id","game_id","name","kind","title","enabled","free_claim","includes","created_at"],"properties":{"id":{"type":"string"},"game_id":{"type":"string"},"name":{"type":"string","description":"what games check (e.g. base, expansion-1)"},"kind":{"enum":["base","dlc","bundle","test"]},"title":{"type":"string"},"enabled":{"type":"boolean"},"free_claim":{"type":"boolean"},"includes":{"type":"array","items":{"type":"string"},"description":"package names a bundle includes"},"created_at":{"type":"string","format":"date-time"}}},"KeyBatch":{"type":"object","required":["id","package_id","quantity","status","created_at","available","redeemed","revoked"],"properties":{"id":{"type":"string"},"package_id":{"type":"string"},"quantity":{"type":"integer"},"hmac_key_version":{"type":"integer"},"label":{"type":["string","null"]},"expires_at":{"type":["string","null"],"format":"date-time"},"delegation_id":{"type":["string","null"]},"status":{"enum":["active","revoked"]},"created_by":{"type":["string","null"]},"created_at":{"type":"string","format":"date-time"},"revoked_at":{"type":["string","null"],"format":"date-time"},"revoke_reason":{"type":["string","null"]},"available":{"type":"integer"},"redeemed":{"type":"integer"},"revoked":{"type":"integer"}}},"KeyBatchIssued":{"type":"object","required":["id","package_id","quantity","status"],"properties":{"id":{"type":"string"},"package_id":{"type":"string"},"quantity":{"type":"integer"},"hmac_key_version":{"type":"integer"},"label":{"type":["string","null"]},"expires_at":{"type":["string","null"]},"status":{"type":"string"},"codes":{"type":"array","items":{"type":"string"},"description":"the redemption codes: in the first response only, never stored in plaintext"},"codes_delivered":{"type":"boolean","description":"true on a retry: the codes went out in the first response"}}},"CommerceAccount":{"type":"object","required":["available","state","charges_enabled","requirements","fee_bps","tax"],"properties":{"available":{"type":"boolean","description":"Selling is switched on for this Depot and Stripe is configured"},"livemode":{"type":"boolean"},"state":{"enum":["unlinked","onboarding","restricted","ready","disconnected"]},"account":{"type":["string","null"],"description":"The Stripe account, shortened (acct_…1234)"},"display_name":{"type":["string","null"]},"country":{"type":["string","null"]},"default_currency":{"type":["string","null"]},"charges_enabled":{"type":"boolean"},"payouts_enabled":{"type":"boolean"},"requirements":{"type":"array","items":{"type":"string"},"description":"Stripe requirement codes still due"},"last_synced_at":{"type":["string","null"],"format":"date-time"},"connected_at":{"type":["string","null"],"format":"date-time"},"fee_bps":{"type":"integer","description":"Depot's fee in basis points (500 = 5%)"},"tax":{"type":"object","required":["status","registrations","required"],"description":"Stripe Tax on the studio's account: the studio is the seller and collects tax there","properties":{"status":{"enum":["active","pending","unavailable","unknown"]},"registrations":{"type":"array","items":{"type":"string"},"description":"Where the studio collects tax: countries, or US-<state>"},"required":{"type":"boolean","description":"Sales need Stripe Tax active (live mode); test mode sells without tax when it isn't"}}}}},"CommerceSettings":{"type":"object","required":["sales_enabled","fee_bps","currencies"],"properties":{"sales_enabled":{"type":"boolean"},"fee_bps":{"type":"integer"},"currencies":{"type":"array","items":{"type":"string"}}}},"Offer":{"type":"object","required":["id","game_id","package_id","currency","amount_minor","active","revision"],"properties":{"id":{"type":"string"},"game_id":{"type":"string"},"package_id":{"type":"string"},"currency":{"type":"string"},"amount_minor":{"type":"integer"},"active":{"type":"boolean"},"revision":{"type":"integer"},"created_at":{"type":"string"},"updated_at":{"type":"string"}}},"Checkout":{"type":"object","required":["order_id","status","checkout_url"],"properties":{"order_id":{"type":"string"},"status":{"type":"string"},"checkout_url":{"type":["string","null"],"description":"Stripe-hosted checkout; null once the order has moved on"}}},"Order":{"type":"object","required":["id","game","status","owned","currency","subtotal_minor","tax_minor","total_minor","refunded_minor","created_at","paid_at","refunded_at"],"properties":{"id":{"type":"string"},"game":{"type":"object","required":["id","slug","name"],"properties":{"id":{"type":"string"},"slug":{"type":["string","null"]},"name":{"type":["string","null"]}}},"status":{"enum":["checkout_pending","payment_pending","paid","partially_refunded","refunded","disputed","chargeback_lost","expired","failed","canceled","review"]},"owned":{"type":"boolean"},"currency":{"type":"string"},"subtotal_minor":{"type":"integer"},"tax_minor":{"type":["integer","null"]},"total_minor":{"type":["integer","null"]},"refunded_minor":{"type":"integer"},"created_at":{"type":"string","format":"date-time"},"paid_at":{"type":["string","null"],"format":"date-time"},"refunded_at":{"type":["string","null"],"format":"date-time"},"receipt_url":{"type":["string","null"],"description":"Stripe's receipt (buyers only)"}}},"StudioOrder":{"type":"object","required":["id","game","status","owned","currency","subtotal_minor","tax_minor","total_minor","refunded_minor","created_at","paid_at","refunded_at","buyer","fee_bps","tax_mode","platform_fee_minor","fee_refunded_minor","fulfillment_status","fulfillment_error","payment_reference","livemode","adjustments"],"properties":{"id":{"type":"string"},"game":{"type":"object","required":["id","slug","name"],"properties":{"id":{"type":"string"},"slug":{"type":["string","null"]},"name":{"type":["string","null"]}}},"status":{"enum":["checkout_pending","payment_pending","paid","partially_refunded","refunded","disputed","chargeback_lost","expired","failed","canceled","review"]},"owned":{"type":"boolean"},"currency":{"type":"string"},"subtotal_minor":{"type":"integer"},"tax_minor":{"type":["integer","null"]},"total_minor":{"type":["integer","null"]},"refunded_minor":{"type":"integer"},"created_at":{"type":"string","format":"date-time"},"paid_at":{"type":["string","null"],"format":"date-time"},"refunded_at":{"type":["string","null"],"format":"date-time"},"receipt_url":{"type":["string","null"],"description":"Stripe's receipt (buyers only)"},"buyer":{"type":["object","null"],"properties":{"display_name":{"type":["string","null"]},"handle":{"type":["string","null"]}}},"fee_bps":{"type":"integer"},"tax_mode":{"enum":["none","stripe_tax"],"description":"stripe_tax: the price included tax calculated by Stripe Tax for the studio"},"platform_fee_minor":{"type":"integer"},"fee_refunded_minor":{"type":"integer"},"fulfillment_status":{"enum":["not_started","pending","granted","failed_retryable","revoked","not_needed"]},"fulfillment_error":{"type":["string","null"]},"offer_revision":{"type":"integer"},"payment_reference":{"type":["string","null"],"description":"Stripe PaymentIntent id, to find it in the Stripe Dashboard"},"livemode":{"type":"boolean"},"adjustments":{"type":"array","items":{"type":"object","required":["kind","amount_minor","currency","source","created_at"],"properties":{"kind":{"enum":["refund","dispute_opened","dispute_won","dispute_lost","fee_refund","manual"]},"amount_minor":{"type":"integer"},"currency":{"type":"string"},"reason":{"type":["string","null"]},"source":{"type":"string"},"created_at":{"type":"string"}}}}}},"Entitlement":{"type":"object","required":["id","package_id","user_id","source","status","starts_at","ends_at","created_at"],"properties":{"id":{"type":"string"},"package_id":{"type":"string"},"user_id":{"type":"string"},"user":{"oneOf":[{"type":"object","required":["display_name","handle"],"properties":{"display_name":{"type":"string"},"handle":{"type":["string","null"]}}},{"type":"null"}]},"source":{"enum":["publisher_grant","redeemed_key","free_claim","test_access","purchase"],"description":"how the player got it; revoking one never touches access from another source"},"source_ref":{"type":["string","null"]},"status":{"enum":["active","expired","revoked"]},"starts_at":{"type":"string","format":"date-time"},"ends_at":{"type":["string","null"],"format":"date-time"},"created_by":{"type":["string","null"]},"created_at":{"type":"string","format":"date-time"},"revoked_at":{"type":["string","null"],"format":"date-time"},"revoke_reason":{"type":["string","null"]},"already_owned":{"type":"boolean"}}},"ApiKey":{"type":"object","required":["id","name","start","permissions","enabled","expires_at","created_at","last_used_at"],"properties":{"id":{"type":"string"},"name":{"type":["string","null"]},"start":{"type":["string","null"],"description":"the first characters of the key, to recognise it"},"permissions":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"resource → actions, e.g. {\"release\": [\"publish\"]}"},"enabled":{"type":"boolean"},"expires_at":{"type":["string","null"],"format":"date-time"},"created_at":{"type":"string","format":"date-time"},"last_used_at":{"type":["string","null"],"format":"date-time"},"created_by":{"type":["string","null"]}}},"ApiKeyWithSecret":{"allOf":[{"$ref":"#/components/schemas/ApiKey"},{"type":"object","required":["key"],"properties":{"key":{"type":"string","description":"the secret: in this response only"}}}]},"AuditEvent":{"type":"object","required":["id","actor_id","actor_kind","action","target_id","event","created_at"],"properties":{"id":{"type":"string"},"actor_id":{"type":"string"},"actor_kind":{"type":["string","null"]},"action":{"type":"string"},"target_id":{"type":["string","null"]},"event":{"type":"object","additionalProperties":true},"created_at":{"type":"string","format":"date-time"}}},"Usage":{"type":"object","required":["computed_at","totals","games"],"properties":{"computed_at":{"type":"string","format":"date-time"},"totals":{"type":"object","required":["games","releases","stored_bytes","logical_bytes","art_bytes","active_entitlements","keys_issued","keys_redeemed"],"properties":{"games":{"type":"integer"},"releases":{"type":"integer"},"stored_bytes":{"type":"integer"},"logical_bytes":{"type":"integer"},"art_bytes":{"type":"integer"},"active_entitlements":{"type":"integer"},"keys_issued":{"type":"integer"},"keys_redeemed":{"type":"integer"}}},"games":{"type":"array","items":{"type":"object","required":["id","slug","name","releases","stored_bytes","logical_bytes","art_bytes"],"properties":{"id":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"releases":{"type":"integer"},"stored_bytes":{"type":"integer"},"logical_bytes":{"type":"integer"},"art_bytes":{"type":"integer"}}}}}},"Release":{"type":"object","required":["release_id","platform","release_name","sequence","status","package","protection","pack_count","bytes","created_at"],"properties":{"release_id":{"type":"string"},"platform":{"type":"string"},"release_name":{"type":"string"},"sequence":{"type":"integer"},"status":{"enum":["reserved","uploading","verifying","published","failed","aborted"]},"protection_domain_id":{"type":"string"},"package":{"type":"string"},"protection":{"enum":["none","aes-256-gcm"]},"descriptor_hash":{"type":["string","null"]},"manifest_hash":{"type":["string","null"]},"signing_key_id":{"type":["string","null"]},"created_by":{"type":["string","null"],"description":"user:<id> or key:<id>; null for releases before M6"},"pack_count":{"type":"integer"},"bytes":{"type":"integer","description":"stored size of the release's packs (shared packs count in every release that uses them)"},"created_at":{"type":"string","format":"date-time"},"published_at":{"type":["string","null"],"format":"date-time"}}},"Channel":{"type":"object","required":["platform","channel","revision","updated_at","release_id","release_name","sequence"],"properties":{"platform":{"type":"string"},"channel":{"type":"string"},"revision":{"type":"integer"},"updated_at":{"type":"string","format":"date-time"},"release_id":{"type":"string"},"release_name":{"type":"string"},"sequence":{"type":"integer"}}},"ChannelMove":{"type":"object","required":["revision","release_id","release_name","sequence","from_release_id","rollback","note","actor_id","created_at"],"properties":{"revision":{"type":"integer"},"release_id":{"type":"string"},"release_name":{"type":"string"},"sequence":{"type":"integer"},"from_release_id":{"type":["string","null"]},"from_release_name":{"type":["string","null"]},"from_sequence":{"type":["integer","null"]},"rollback":{"type":"boolean"},"note":{"type":["string","null"]},"actor_id":{"type":"string"},"actor_kind":{"type":["string","null"]},"created_at":{"type":"string","format":"date-time"}}},"Art":{"type":"object","required":["url","content_type","width","height","bytes"],"properties":{"url":{"type":"string","format":"uri"},"content_type":{"enum":["image/png","image/jpeg","image/webp"]},"width":{"type":"integer"},"height":{"type":"integer"},"bytes":{"type":"integer"}}},"Game":{"type":"object","required":["id","slug","name","description","visibility","listed","platforms","build_platforms","status","revision","art","page","readiness","created_at","updated_at"],"properties":{"id":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"visibility":{"enum":["public","restricted"],"description":"restricted for every new game (encrypted builds); public only for older unencrypted games"},"listed":{"type":"integer","enum":[0,1],"description":"1 when the studio chose to list it in the launcher catalog (shown while the store page is public and free or key only)"},"build_platforms":{"type":"array","items":{"type":"string"},"description":"Platforms players can install now: a channel serves a release for them (derived from builds; `platforms` are the studio's announced ones)"},"page":{"type":["object","null"],"description":"The store page's state: null until a page is written. `access` is who can get the game now (the published page); null until first published.","required":["visibility","access"],"properties":{"visibility":{"enum":["draft","unlisted","public","disabled"]},"access":{"enum":["free","key","invite",null]}}},"readiness":{"type":"object","description":"Can a player get the game right now: the page is published, its channel serves a release, and an enabled base package exists to grant. `blockers` (in fix order) say why not: archived, no_build_on_channel, no_base_package, no_page, page_unpublished, page_disabled.","required":["installable","channel","blockers"],"properties":{"installable":{"type":"boolean"},"channel":{"type":"string","description":"the channel players install from (the published page's, else the draft's)"},"blockers":{"type":"array","items":{"enum":["archived","no_build_on_channel","no_base_package","no_page","page_unpublished","page_disabled"]}}}},"platforms":{"type":"array","items":{"type":"string"},"description":"platforms the publisher says the game supports (release platform names)"},"status":{"enum":["active","archived"]},"revision":{"type":"integer","description":"increments on every edit; pass as expected_revision"},"art":{"type":"object","required":["icon","cover","hero","logo"],"properties":{"icon":{"oneOf":[{"$ref":"#/components/schemas/Art"},{"type":"null"}]},"cover":{"oneOf":[{"$ref":"#/components/schemas/Art"},{"type":"null"}]},"hero":{"oneOf":[{"$ref":"#/components/schemas/Art"},{"type":"null"}]},"logo":{"oneOf":[{"$ref":"#/components/schemas/Art"},{"type":"null"}]}}},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"ObjectRef":{"type":"object","required":["hash","size"],"properties":{"hash":{"type":"string","pattern":"^[0-9a-f]{64}$"},"size":{"type":"integer","minimum":0}}},"Signature":{"type":"object","required":["key_id","algorithm","value"],"properties":{"key_id":{"type":"string"},"algorithm":{"const":"ed25519"},"value":{"type":"string","contentEncoding":"base64"}}}}},"paths":{"/v1/whoami":{"get":{"summary":"Describe the calling credential: an API key (organization, permissions) or a person (identity, organizations)","responses":{"200":{"description":"Principal","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations":{"get":{"summary":"Organizations I belong to, with my role and permissions","responses":{"200":{"description":"Organizations","content":{"application/json":{"schema":{"type":"object","required":["organizations","next_cursor"],"properties":{"organizations":{"type":"array","items":{"$ref":"#/components/schemas/Membership"}},"next_cursor":{"type":["string","null"]}}}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"summary":"Create an organization (a publisher); you become its owner","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._:-]{8,128}$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name","slug"],"properties":{"name":{"type":"string"},"slug":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{1,46}[a-z0-9]$"}}}}}},"responses":{"201":{"description":"Organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Membership"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}":{"get":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}}],"summary":"The organization, and the caller's role and permissions in it (member or API key)","responses":{"200":{"description":"Organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationContext"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"patch":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}}],"summary":"Rename (organization:update; people only)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}}}}}},"responses":{"200":{"description":"Organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Organization"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/games":{"get":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":200}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"next_cursor from the previous page"},{"name":"status","in":"query","required":false,"schema":{"enum":["all","active","archived"],"default":"all"}}],"summary":"The organization's games (game:read)","responses":{"200":{"description":"Games page","content":{"application/json":{"schema":{"type":"object","required":["games","next_cursor"],"properties":{"games":{"type":"array","items":{"$ref":"#/components/schemas/Game"}},"next_cursor":{"type":["string","null"]}}}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"summary":"Create a game","parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._:-]{8,128}$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["slug","name"],"properties":{"slug":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{1,63}$"},"name":{"type":"string","maxLength":200},"visibility":{"enum":["restricted"],"default":"restricted","description":"Every game is restricted: builds are encrypted. Who can get it (free claim, key only, invite only) is the store page's `access`. Unencrypted public games exist only as test fixtures outside production."}}}}}},"responses":{"201":{"description":"Game","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Game"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"description":"Requires `game:create` in the organization."}},"/v1/organizations/{org}/games/{id}":{"get":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}}],"summary":"One game (game:read)","responses":{"200":{"description":"Game","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Game"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"patch":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}}],"summary":"Edit a game (game:update): name, address (slug), description, catalog listing (public, active games only), supported platforms, or archive (status). Archived games keep working for players who own them but take no new releases, keys, grants or free claims, and leave the catalog. Pass expected_revision to refuse stale edits (409).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","maxLength":200},"slug":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{1,63}$","description":"The game's address: /p/{studio}/{slug}. The old slug stays reserved for this game: its store links redirect, and installs and scripts that use it keep working. 409 if another game has or had it. At most 5 renames a day."},"description":{"type":["string","null"],"maxLength":2000},"listed":{"type":"boolean","description":"Also list the game in the Depot launcher's catalog. It shows there only while its store page is public and free (claimable) or key only."},"platforms":{"type":"array","maxItems":16,"items":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{0,31}$"},"example":["windows-x64","macos-arm64"]},"status":{"enum":["active","archived"]},"expected_revision":{"type":["integer","null"],"minimum":1}}}}}},"responses":{"200":{"description":"Game","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Game"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/storefront":{"get":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}}],"summary":"The studio's public storefront profile (game:read). Created on first use from the organization's name and slug.","responses":{"200":{"description":"Storefront","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Storefront"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"patch":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}}],"summary":"Edit the storefront profile (organization:update): display name, bio, up to 5 https links, support URL. Optional expected_revision.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"display_name":{"type":"string","maxLength":60},"bio":{"type":["string","null"],"maxLength":600},"links":{"type":"array","maxItems":5,"items":{"type":"object","required":["url"],"properties":{"label":{"type":"string","maxLength":30},"url":{"type":"string","format":"uri"}}}},"support_url":{"type":["string","null"],"format":"uri"},"expected_revision":{"type":["integer","null"]}}}}}},"responses":{"200":{"description":"Storefront","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Storefront"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/storefront/art/{kind}":{"put":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"kind","in":"path","required":true,"schema":{"enum":["logo","banner"]}}],"summary":"Upload the studio logo (square, 128–1024 px, ≤1 MB) or banner (1200–3840 px wide, 2.5:1–6:1, ≤4 MB); organization:update. PNG, JPEG or WebP body.","requestBody":{"required":true,"content":{"image/png":{"schema":{"type":"string","format":"binary"}},"image/jpeg":{"schema":{"type":"string","format":"binary"}},"image/webp":{"schema":{"type":"string","format":"binary"}}}},"responses":{"200":{"description":"Stored","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"delete":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"kind","in":"path","required":true,"schema":{"enum":["logo","banner"]}}],"summary":"Remove the logo or banner (organization:update)","responses":{"204":{"description":"Removed"},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/games/{id}/page":{"get":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}}],"summary":"The game's public page: draft, published snapshot, visibility and public URL (game:read)","responses":{"200":{"description":"Game page","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GamePage"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"patch":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}}],"summary":"Edit the page draft (game:update). Plain text only (the description supports paragraphs, '- ' lists, **bold** and https links, all escaped). Trailers are a YouTube or Vimeo id. Links must be https. Publishing is separate.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageDraftPatch"}}}},"responses":{"200":{"description":"Game page","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GamePage"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/games/{id}/page/publish":{"post":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}}],"summary":"Publish the draft (game:update) as public (listed, indexed) or unlisted (link only, noindex). Applies the access setting: free turns on free claims of the base package; key and invite turn them off. Visibility never authorizes downloads.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"visibility":{"enum":["public","unlisted"],"default":"public"},"expected_revision":{"type":["integer","null"]}}}}}},"responses":{"200":{"description":"Game page","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GamePage"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/games/{id}/page/unpublish":{"post":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}}],"summary":"Take the page down (game:update). New free claims stop; players who already own the game keep it, updates included. Nothing is revoked.","responses":{"200":{"description":"Game page","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GamePage"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/games/{id}/page/screenshots":{"post":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}}],"summary":"Upload a screenshot (game:update): landscape, 960–3840 px wide, ≤6 MB, PNG/JPEG/WebP body. Add its id to the draft's screenshots to show it.","requestBody":{"required":true,"content":{"image/png":{"schema":{"type":"string","format":"binary"}},"image/jpeg":{"schema":{"type":"string","format":"binary"}},"image/webp":{"schema":{"type":"string","format":"binary"}}}},"responses":{"201":{"description":"Screenshot","content":{"application/json":{"schema":{"type":"object","required":["id","url","width","height"],"properties":{"id":{"type":"string"},"url":{"type":"string"},"width":{"type":"integer"},"height":{"type":"integer"},"bytes":{"type":"integer"}}}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/games/{id}/page/screenshots/{shot}":{"delete":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}},{"name":"shot","in":"path","required":true,"schema":{"type":"string","pattern":"^shot_[0-9a-f]{32}$"}}],"summary":"Remove a screenshot from the draft (game:update); the published page keeps it until the next publish","responses":{"204":{"description":"Removed"},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/games/{id}/page/videos":{"get":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}}],"summary":"The game's uploaded videos (game:read)","responses":{"200":{"description":"Videos","content":{"application/json":{"schema":{"type":"object","required":["videos"],"properties":{"videos":{"type":"array","items":{"$ref":"#/components/schemas/Video"}}}}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}}],"summary":"Start a video upload (game:update). purpose loop: the muted clip over the hero, MP4 ≤30 s and ≤40 MB. trailer or clip: MP4 ≤10 min and ≤500 MB. PUT the file to put_url with exactly the returned headers, then call complete.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["bytes"],"properties":{"purpose":{"enum":["loop","trailer","clip"]},"bytes":{"type":"integer","minimum":1}}}}}},"responses":{"201":{"description":"Upload","content":{"application/json":{"schema":{"type":"object","required":["id","purpose","put_url","headers","expires_in"],"properties":{"id":{"type":"string"},"purpose":{"type":"string"},"put_url":{"type":"string"},"headers":{"type":"object","additionalProperties":{"type":"string"}},"expires_in":{"type":"integer"}}}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/games/{id}/page/videos/{vid}/complete":{"post":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}},{"name":"vid","in":"path","required":true,"schema":{"type":"string","pattern":"^vid_[0-9a-f]{32}$"}}],"summary":"Check an uploaded video (game:update): an MP4 within its purpose's length and size. 422 (and the upload is discarded) otherwise.","responses":{"200":{"description":"Video","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Video"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/games/{id}/page/videos/{vid}/poster":{"put":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}},{"name":"vid","in":"path","required":true,"schema":{"type":"string","pattern":"^vid_[0-9a-f]{32}$"}}],"summary":"Set a video's still frame (game:update): PNG, JPEG or WebP 480–3840 px wide, ≤4 MB. Shown before the video plays and instead of it for reduced motion.","requestBody":{"required":true,"content":{"image/png":{"schema":{"type":"string","format":"binary"}},"image/jpeg":{"schema":{"type":"string","format":"binary"}},"image/webp":{"schema":{"type":"string","format":"binary"}}}},"responses":{"200":{"description":"Video","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Video"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/games/{id}/page/videos/{vid}":{"delete":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}},{"name":"vid","in":"path","required":true,"schema":{"type":"string","pattern":"^vid_[0-9a-f]{32}$"}}],"summary":"Remove a video (game:update): out of the draft now; the published page keeps it until the next publish","responses":{"204":{"description":"Removed"},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/games/{id}/art/{kind}":{"put":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}},{"name":"kind","in":"path","required":true,"schema":{"enum":["icon","cover","hero","logo"]}}],"summary":"Upload store art (game:update). logo: the game's wordmark shown in place of its name, a transparent PNG or WebP 200–2400 px wide, 1:2 to 8:1, ≤1 MB. The body is the image: PNG, JPEG or WebP (identified from the bytes; SVG refused). icon: square, 128–2048 px, ≤1 MB (512×512 recommended). cover: 2:3 portrait, 300–2400 px wide, ≤4 MB (600×900). hero: about 3:1, 1280–3840 px wide, ≤8 MB (1920×620). Served from the CDN.","requestBody":{"required":true,"content":{"image/png":{"schema":{"type":"string","format":"binary"}},"image/jpeg":{"schema":{"type":"string","format":"binary"}},"image/webp":{"schema":{"type":"string","format":"binary"}}}},"responses":{"200":{"description":"Stored","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Art"},{"type":"object","required":["kind"],"properties":{"kind":{"enum":["icon","cover","hero","logo"]}}}]}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"delete":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}},{"name":"kind","in":"path","required":true,"schema":{"enum":["icon","cover","hero","logo"]}}],"summary":"Remove store art (game:update)","responses":{"204":{"description":"Removed"},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/members":{"get":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}}],"summary":"Members (people only; emails only for member managers)","responses":{"200":{"description":"Members","content":{"application/json":{"schema":{"type":"object","required":["members","next_cursor"],"properties":{"members":{"type":"array","items":{"$ref":"#/components/schemas/Member"}},"next_cursor":{"type":["string","null"]}}}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/members/{user}":{"patch":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"user","in":"path","required":true,"schema":{"type":"string"}}],"summary":"Change a member's role (member:update; only owners grant or remove ownership)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["role"],"properties":{"role":{"enum":["owner","admin","publisher","member"]}}}}}},"responses":{"200":{"description":"Member","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Member"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"delete":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"user","in":"path","required":true,"schema":{"type":"string"}}],"summary":"Remove a member (member:delete), or leave (your own id). The last owner can't leave.","responses":{"204":{"description":"Removed"},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/invitations":{"get":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}}],"summary":"Pending invitations (invitation:create)","responses":{"200":{"description":"Invitations","content":{"application/json":{"schema":{"type":"object","required":["invitations","next_cursor"],"properties":{"invitations":{"type":"array","items":{"$ref":"#/components/schemas/Invitation"}},"next_cursor":{"type":["string","null"]}}}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._:-]{8,128}$"}}],"summary":"Invite by email (invitation:create); accepted on the identity service's invitation page","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email"],"properties":{"email":{"type":"string"},"role":{"enum":["owner","admin","publisher","member"]}}}}}},"responses":{"201":{"description":"Invitation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Invitation"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/invitations/{id}":{"delete":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"summary":"Cancel an invitation (invitation:cancel)","responses":{"204":{"description":"Cancelled"},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/api-keys":{"get":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}}],"summary":"Organization API keys (apiKey:read; never the secrets)","responses":{"200":{"description":"API keys","content":{"application/json":{"schema":{"type":"object","required":["api_keys","next_cursor"],"properties":{"api_keys":{"type":"array","items":{"$ref":"#/components/schemas/ApiKey"}},"next_cursor":{"type":["string","null"]}}}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._:-]{8,128}$"}}],"summary":"Create an API key (apiKey:create; people only). Permissions must be a subset of your role and can't include member or key management. Secret shown once.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name","permissions"],"properties":{"name":{"type":"string","maxLength":32},"permissions":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"resource → actions, e.g. {\"release\": [\"publish\"]}"},"expires_in_days":{"type":"integer","minimum":1,"maximum":365,"default":90}}}}}},"responses":{"201":{"description":"API key with secret (shown once)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyWithSecret"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/api-keys/{id}/rotate":{"post":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"summary":"Replace a key (same name and permissions); the old one stops now or after grace_seconds","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"grace_seconds":{"type":"integer","minimum":0,"maximum":86400},"expires_in_days":{"type":"integer"}}}}}},"responses":{"201":{"description":"New API key with secret (shown once)","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ApiKeyWithSecret"},{"type":"object","properties":{"replaces":{"type":"string"}}}]}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/api-keys/{id}":{"delete":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"summary":"Revoke a key (apiKey:delete); immediate","responses":{"204":{"description":"Revoked"},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/audit":{"get":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":500}},{"name":"cursor","in":"query","schema":{"type":"string"}},{"name":"action","in":"query","schema":{"type":"string"},"description":"action prefix, e.g. channel. or key_batch.issue"},{"name":"actor_kind","in":"query","schema":{"enum":["user","api_key"]}},{"name":"target_id","in":"query","schema":{"type":"string"}}],"summary":"Audit events, newest first (organization:update). Events carry safe metadata only: never codes, secrets or keys.","responses":{"200":{"description":"Events page","content":{"application/json":{"schema":{"type":"object","required":["events","next_cursor"],"properties":{"events":{"type":"array","items":{"$ref":"#/components/schemas/AuditEvent"}},"next_cursor":{"type":["string","null"]}}}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/usage":{"get":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}}],"summary":"Storage and activity, computed live (game:read). stored_bytes counts each pack once per game (deduplicated); logical_bytes counts every published release in full. Only verified releases count.","responses":{"200":{"description":"Usage","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Usage"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/games/{id}/packages":{"get":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}}],"summary":"Packages of a game (game:read)","responses":{"200":{"description":"Packages","content":{"application/json":{"schema":{"type":"object","required":["packages","next_cursor"],"properties":{"packages":{"type":"array","items":{"$ref":"#/components/schemas/Package"}},"next_cursor":{"type":["string","null"]}}}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._:-]{8,128}$"}}],"summary":"Define a package (game:update): base, dlc, test (content = releases pushed with --package <name>) or bundle (includes other packages of the game)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"kind":{"enum":["base","dlc","bundle","test"]},"title":{"type":"string"},"free_claim":{"type":"boolean"},"includes":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"201":{"description":"Package","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Package"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/packages/{pkg}":{"patch":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"pkg","in":"path","required":true,"schema":{"type":"string","pattern":"^pkg_[0-9a-f]{32}$"}}],"summary":"Enable/disable, retitle, toggle free claims (game:update). Disabled packages grant nothing new.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean"},"title":{"type":"string"},"free_claim":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Package","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Package"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/entitlements/grants":{"post":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._:-]{8,128}$"}}],"summary":"Grant a package to a Depot user (entitlement:grant). Already owned: 200 with the existing entitlement.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["package_id"],"properties":{"package_id":{"type":"string"},"user_id":{"type":"string"},"handle":{"type":"string","description":"resolved to the user id at grant time"},"ends_at":{"type":"string","format":"date-time"},"source":{"enum":["publisher_grant","test_access"]},"source_ref":{"type":"string","maxLength":200}}}}}},"responses":{"200":{"description":"Already owned","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Entitlement"}}}},"201":{"description":"Entitlement","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Entitlement"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/entitlements":{"get":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":200}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"next_cursor from the previous page"},{"name":"package_id","in":"query","schema":{"type":"string"}},{"name":"user_id","in":"query","schema":{"type":"string"}},{"name":"handle","in":"query","schema":{"type":"string"},"description":"@handle of the player (resolved at query time)"},{"name":"status","in":"query","schema":{"enum":["active","expired","revoked"]}}],"summary":"Entitlements to the organization's packages, oldest first (entitlement:read). Each names its player by display name and @handle only.","responses":{"200":{"description":"Entitlements page","content":{"application/json":{"schema":{"type":"object","required":["entitlements","next_cursor"],"properties":{"entitlements":{"type":"array","items":{"$ref":"#/components/schemas/Entitlement"}},"next_cursor":{"type":["string","null"]}}}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/entitlements/{id}/revoke":{"post":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^ent_[0-9a-f]{32}$"}}],"summary":"Revoke an entitlement (entitlement:revoke): new grants, sessions and key delivery stop at once; installed copies keep launching","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["reason"],"properties":{"reason":{"type":"string","maxLength":500}}}}}},"responses":{"200":{"description":"Entitlement","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Entitlement"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/commerce/account":{"get":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}}],"summary":"The organization's connected Stripe account and whether it can take payments (commerce:read)","responses":{"200":{"description":"Account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommerceAccount"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/commerce/connect/start":{"post":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}}],"summary":"Start or continue Stripe onboarding (commerce:connect, people only). Creates a Standard account the studio owns on first use and returns a one-time Stripe-hosted onboarding link back to the dashboard.","responses":{"200":{"description":"Onboarding link","content":{"application/json":{"schema":{"type":"object","required":["url","expires_at"],"properties":{"url":{"type":"string"},"expires_at":{"type":"string","format":"date-time"}}}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/commerce/connect/refresh":{"post":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}}],"summary":"Re-read the connected account from Stripe (commerce:read)","responses":{"200":{"description":"Account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommerceAccount"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/commerce/disconnect":{"post":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}}],"summary":"Stop selling through the connected account (commerce:connect, people only). Sales turn off; orders, refunds and history stay, and payments already started still settle.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["confirm"],"properties":{"confirm":{"const":true}}}}}},"responses":{"200":{"description":"Account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommerceAccount"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/commerce/settings":{"get":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}}],"summary":"The organization's sale switch, Depot's fee and the currencies it prices in (commerce:read)","responses":{"200":{"description":"Settings","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommerceSettings"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"patch":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}}],"summary":"Turn sales on or off for all the organization's games (commerce:manage). On needs a ready account.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["sales_enabled"],"properties":{"sales_enabled":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Settings","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommerceSettings"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/commerce/offers":{"get":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}}],"summary":"Game prices (commerce:read)","responses":{"200":{"description":"Offers","content":{"application/json":{"schema":{"type":"object","required":["offers","next_cursor"],"properties":{"offers":{"type":"array","items":{"$ref":"#/components/schemas/Offer"}},"next_cursor":{"type":["string","null"]}}}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}}],"summary":"Price a game (commerce:manage on that game): a fixed price for its base package, one per game","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["game_id","currency","amount_minor"],"properties":{"game_id":{"type":"string"},"currency":{"type":"string","description":"ISO 4217, lowercase"},"amount_minor":{"type":"integer","minimum":100,"maximum":50000},"active":{"type":"boolean","default":true}}}}}},"responses":{"201":{"description":"Offer","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Offer"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/commerce/offers/{offer}":{"patch":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"offer","in":"path","required":true,"schema":{"type":"string","pattern":"^off_[0-9a-f]{32}$"}}],"summary":"Change a price or pause it (commerce:manage). Orders already started keep the price they were created with.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"currency":{"type":"string"},"amount_minor":{"type":"integer","minimum":100,"maximum":50000},"active":{"type":"boolean"},"expected_revision":{"type":"integer"}}}}}},"responses":{"200":{"description":"Offer","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Offer"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/commerce/orders":{"get":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":200}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"next_cursor from the previous page"},{"name":"status","in":"query","schema":{"type":"string"}}],"summary":"Orders, newest first (commerce:read). Buyers appear by display name and @handle only; no card or billing details are stored.","responses":{"200":{"description":"Orders","content":{"application/json":{"schema":{"type":"object","required":["orders","next_cursor"],"properties":{"orders":{"type":"array","items":{"$ref":"#/components/schemas/StudioOrder"}},"next_cursor":{"type":["string","null"]}}}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/commerce/orders/{order}":{"get":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"order","in":"path","required":true,"schema":{"type":"string","pattern":"^ord_[0-9a-f]{32}$"}}],"summary":"One order with its refunds and disputes (commerce:read)","responses":{"200":{"description":"Order","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StudioOrder"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/games/{id}/stats":{"get":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}},{"name":"from","in":"query","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","schema":{"type":"string","format":"date"}}],"summary":"Anonymous daily stats for one game (analytics:read): page views, unique visitors, installs, updates, launches, players, play time, monthly players, and breakdowns by platform, country, referring site and release. Counts under `threshold` (5) are null so no one player can be singled out. Acquisitions (purchases, claims, key redemptions, grants) and revenue are exact. Default range: the last 30 days; at most a year. Numbers appear after the nightly rollup (`rolled_up_through`).","responses":{"200":{"description":"Stats","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/stats":{"get":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"from","in":"query","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","schema":{"type":"string","format":"date"}}],"summary":"Every game's totals over a range (analytics:read), with the same threshold as per-game stats.","responses":{"200":{"description":"Studio stats","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/commerce/summary":{"get":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}}],"summary":"Paid orders, gross, Depot's fee and refunds per currency (commerce:read). Stripe's own fees and tax are in the studio's Stripe Dashboard.","responses":{"200":{"description":"Summary","content":{"application/json":{"schema":{"type":"object","required":["currencies","note"],"properties":{"note":{"type":"string"},"currencies":{"type":"array","items":{"type":"object","required":["currency","paid_orders","gross_minor","tax_minor","platform_fee_minor","refunded_minor","fee_refunded_minor","refunded_orders"],"properties":{"currency":{"type":"string"},"paid_orders":{"type":"integer"},"gross_minor":{"type":"integer"},"tax_minor":{"type":"integer"},"platform_fee_minor":{"type":"integer"},"refunded_minor":{"type":"integer"},"fee_refunded_minor":{"type":"integer"},"refunded_orders":{"type":"integer"}}}}}}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/checkout/sessions":{"post":{"summary":"Buy a game: create (or return) a Stripe-hosted checkout for an offer. The server sets the price, fee, seller and return address; the same idempotency_key returns the same checkout.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["offer_id","idempotency_key"],"properties":{"offer_id":{"type":"string"},"idempotency_key":{"type":"string","pattern":"^[A-Za-z0-9._:-]{8,128}$"}}}}}},"responses":{"200":{"description":"The checkout this key already made","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Checkout"}}}},"201":{"description":"Checkout","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Checkout"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/checkout/orders/{order}/status":{"get":{"parameters":[{"name":"order","in":"path","required":true,"schema":{"type":"string","pattern":"^ord_[0-9a-f]{32}$"}}],"summary":"The buyer's order: paid and owned only once Stripe has confirmed it (polled after returning from checkout)","responses":{"200":{"description":"Status","content":{"application/json":{"schema":{"type":"object","required":["order_id","status","owned"],"properties":{"order_id":{"type":"string"},"status":{"type":"string"},"owned":{"type":"boolean"},"game_id":{"type":"string"}}}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/me/activity":{"post":{"summary":"The launcher reports installs and updates that finished, launches and ended play sessions (up to 50 at a time), for studios' anonymous stats. Events for games the player doesn't own are dropped. The player can turn this off in the launcher.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["events"],"properties":{"events":{"type":"array","minItems":1,"maxItems":50,"items":{"type":"object","required":["kind","game_id","platform"],"properties":{"kind":{"enum":["install","update","launch","session_end"]},"game_id":{"type":"string"},"platform":{"type":"string"},"release_sequence":{"type":"integer","minimum":1},"duration_s":{"type":"number","minimum":0}}}}}}}}},"responses":{"202":{"description":"Accepted","content":{"application/json":{"schema":{"type":"object","properties":{"accepted":{"type":"integer"}}}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/me/orders":{"get":{"summary":"The signed-in player's orders","responses":{"200":{"description":"Orders","content":{"application/json":{"schema":{"type":"object","required":["orders","next_cursor"],"properties":{"orders":{"type":"array","items":{"$ref":"#/components/schemas/Order"}},"next_cursor":{"type":["string","null"]}}}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/me/orders/{order}":{"get":{"parameters":[{"name":"order","in":"path","required":true,"schema":{"type":"string","pattern":"^ord_[0-9a-f]{32}$"}}],"summary":"One of the player's orders, with Stripe's receipt link","responses":{"200":{"description":"Order","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Order"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/webhooks/stripe/connect":{"post":{"summary":"Stripe Connect events (signed with the endpoint secret; no other credential). Verified, journaled once per event id, and applied by re-reading Stripe.","responses":{"200":{"description":"Received","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/me/library":{"get":{"summary":"Games and packages the signed-in player owns (store-page fields only)","responses":{"200":{"description":"Library","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/packages/{pkg}/claim":{"post":{"parameters":[{"name":"pkg","in":"path","required":true,"schema":{"type":"string","pattern":"^pkg_[0-9a-f]{32}$"}}],"summary":"Claim a free package","responses":{"200":{"description":"Already owned","content":{"application/json":{"schema":{"type":"object"}}}},"201":{"description":"Entitlement","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/games/{id}/download-grants":{"post":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}}],"summary":"A short-lived download grant (1 hour, 5 sessions) for a package the player owns now; exchange it at /v1/sessions. Every use re-checks the entitlement.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"package":{"type":"string","default":"base"}}}}}},"responses":{"201":{"description":"Grant (secret shown once)","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/packages/{pkg}/key-batches":{"post":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"pkg","in":"path","required":true,"schema":{"type":"string","pattern":"^pkg_[0-9a-f]{32}$"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._:-]{8,128}$"}}],"summary":"Issue a batch of single-use game keys (keys:issue). The codes are in this response only; a retry with the same Idempotency-Key returns the batch without codes.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["quantity"],"properties":{"quantity":{"type":"integer","minimum":1,"maximum":1000},"label":{"type":"string"},"expires_at":{"type":"string","format":"date-time"}}}}}},"responses":{"200":{"description":"Batch already issued (no codes)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyBatchIssued"}}}},"201":{"description":"Batch with codes (shown once)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyBatchIssued"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/key-batches":{"get":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"package_id","in":"query","schema":{"type":"string"}},{"name":"game_id","in":"query","schema":{"type":"string"}}],"summary":"Batches with available/redeemed/revoked counts, never codes (keys:read)","responses":{"200":{"description":"Batches","content":{"application/json":{"schema":{"type":"object","required":["batches","next_cursor"],"properties":{"batches":{"type":"array","items":{"$ref":"#/components/schemas/KeyBatch"}},"next_cursor":{"type":["string","null"]}}}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/key-batches/{id}/revoke":{"post":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^kb_[0-9a-f]{32}$"}}],"summary":"Revoke a batch's still-available keys (keys:revoke); redeemed keys keep their entitlements","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["reason"],"properties":{"reason":{"type":"string"}}}}}},"responses":{"200":{"description":"Batch","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyBatch"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/keys/redeem":{"post":{"summary":"Redeem a game key into an entitlement (signed-in player; atomic, single use). Already owned: the key is not used.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["code"],"properties":{"code":{"type":"string","example":"DPT1-ABCD-EFGH-JKMN-PQRS-TVWX-YZ01-2345"}}}}}},"responses":{"200":{"description":"Already redeemed by you","content":{"application/json":{"schema":{"type":"object"}}}},"201":{"description":"Entitlement","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"410":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/retailer-delegations":{"get":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}}],"summary":"Delegations this publisher granted (retailer:delegate)","responses":{"200":{"description":"Delegations","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}}],"summary":"Let a retailer organization issue keys for one package, up to a quota (retailer:delegate)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["retailer_organization_id","package_id","quota"],"properties":{"retailer_organization_id":{"type":"string"},"package_id":{"type":"string"},"quota":{"type":"integer","minimum":1},"expires_at":{"type":"string","format":"date-time"}}}}}},"responses":{"201":{"description":"Delegation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/retailer-delegations/{id}/revoke":{"post":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^rdl_[0-9a-f]{32}$"}}],"summary":"Stop a retailer's issuance now; optionally revoke its still-available keys (default: they stay valid)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"revoke_issued_keys":{"type":"boolean","default":false}}}}}},"responses":{"200":{"description":"Delegation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/retail/delegations":{"get":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}}],"summary":"Delegations this retailer holds, with remaining quota (retail:issue)","responses":{"200":{"description":"Delegations","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/retail/keys":{"post":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}}],"summary":"Retailer just-in-time issuance (retail:issue): unique per order_id; quota reserved atomically; codes shown once","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["delegation_id","order_id"],"properties":{"delegation_id":{"type":"string"},"order_id":{"type":"string"},"quantity":{"type":"integer","minimum":1,"maximum":100}}}}}},"responses":{"200":{"description":"Order already issued (no codes)","content":{"application/json":{"schema":{"type":"object"}}}},"201":{"description":"Order with codes (shown once)","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/games/{game}/licenses/offline":{"post":{"parameters":[{"name":"game","in":"path","required":true,"schema":{"type":"string"}}],"summary":"A signed, game-scoped offline license (30 days) for the signed-in player's entitlements in this game (ADR 0010). Root-certified licensing key; not device-bound.","responses":{"200":{"description":"{license: envelope, server_time}","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/licensing/key-status":{"get":{"security":[],"summary":"Root-signed list of revoked licensing keys for this environment","responses":{"200":{"description":"Signed key status","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/admin/redemption-keys/outstanding":{"get":{"summary":"Platform operators (bootstrap secret): key counts per HMAC version and state, for retiring old secrets","responses":{"200":{"description":"Counts","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/admin/games/{id}/assign":{"post":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}}],"summary":"Platform operators (bootstrap secret): assign an M2-era game to an organization, once","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["organization_id"],"properties":{"organization_id":{"type":"string"}}}}}},"responses":{"200":{"description":"Assigned","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/healthz":{"get":{"security":[],"summary":"Liveness and database check","responses":{"200":{"description":"Healthy","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/v1/openapi.json":{"get":{"security":[],"summary":"This document","responses":{"200":{"description":"OpenAPI document","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/v1/me":{"get":{"summary":"The signed-in person: identity (issuer, subject), display name, handle and organization memberships. Requires a Depot (OIDC) access token.","responses":{"200":{"description":"Identity","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/public/studios/{slug}":{"get":{"security":[],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"summary":"A studio's public storefront and its public game pages (404 when it has none). ETag; cached ~60 s.","responses":{"200":{"description":"Studio","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicStudio"}}}},"304":{"description":"Not modified"},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/public/studios/{slug}/games/{game}":{"get":{"security":[],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"game","in":"path","required":true,"schema":{"type":"string"}}],"summary":"A published game page (public or unlisted) by game slug or id. Only published metadata: never release, build or key identifiers. ETag; cached ~60 s.","responses":{"200":{"description":"Game page","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicGamePage"}}}},"304":{"description":"Not modified"},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/public/sitemap":{"get":{"security":[],"summary":"Public game pages (never unlisted or drafts), for sitemaps","responses":{"200":{"description":"Pages","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/v1/public/reports":{"post":{"security":[],"summary":"Report a studio or game page (malware, copyright, impersonation, scam, dangerous link, misleading, other). Rate-limited; never public.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["studio","reason"],"properties":{"studio":{"type":"string"},"game":{"type":"string"},"reason":{"enum":["malware","copyright","impersonation","scam","dangerous_link","misleading","other"]},"details":{"type":"string","maxLength":1000}}}}}},"responses":{"202":{"description":"Received","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/games/{id}/claim":{"post":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}}],"summary":"Claim a game whose published page is free (signed-in player): grants its base package, provenance free_claim. Idempotent: already owned (from any source) returns 200 and changes nothing.","responses":{"200":{"description":"Already owned","content":{"application/json":{"schema":{"type":"object"}}}},"201":{"description":"Claimed","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/admin/reports":{"get":{"summary":"Platform operators (bootstrap secret): open reports","responses":{"200":{"description":"Reports","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/admin/games/{id}/page/{action}":{"post":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}},{"name":"action","in":"path","required":true,"schema":{"enum":["disable","enable"]}}],"summary":"Platform operators (bootstrap secret): take a page down (reason required; free claims stop; owners keep the game) or allow it again (back to draft)","responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/admin/commerce/reconcile":{"post":{"summary":"Platform operators (bootstrap secret): run commerce reconciliation now (it also runs every 10 minutes)","responses":{"200":{"description":"Run","content":{"application/json":{"schema":{"type":"object","properties":{"checked":{"type":"integer"},"repaired":{"type":"integer"},"anomalies":{"type":"array","items":{"type":"string"}}}}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/admin/analytics/rollup/{day}":{"post":{"parameters":[{"name":"day","in":"path","required":true,"schema":{"type":"string","format":"date"}}],"summary":"Platform operators (bootstrap secret): roll up one finished UTC day of analytics now (it also runs nightly; re-running replaces the day)","responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object","properties":{"day":{"type":"string"},"rows":{"type":"integer"}}}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/admin/studios/{slug}/{action}":{"post":{"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"action","in":"path","required":true,"schema":{"enum":["verify","unverify"]}}],"summary":"Platform operators (bootstrap secret): verify a studio (it gets its own address, <slug>.depot.games) or withdraw verification","responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/catalog":{"get":{"security":[],"summary":"Listed games and their channels for the launcher (not download authorization)","description":"Games their studios listed: older public games, and restricted games whose store page is public and free (claimable) or key only. `access` is what a player does next.","responses":{"200":{"description":"Catalog","content":{"application/json":{"schema":{"type":"object","required":["games"],"properties":{"games":{"type":"array","items":{"type":"object","required":["id","slug","name","description","visibility","access","channels"],"properties":{"id":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"visibility":{"enum":["public","restricted"]},"access":{"enum":["anyone","free","key"],"description":"anyone: install without an account (older public games); free: claim with a Depot account; key: redeem a key from the studio"},"channels":{"type":"array","items":{"type":"object","properties":{"platform":{"type":"string"},"channel":{"type":"string"},"release_name":{"type":"string"},"sequence":{"type":"integer"},"updated_at":{"type":"string"}}}},"art":{"type":"object","description":"The studio's art from the published store page","properties":{"icon":{"oneOf":[{"type":"object","required":["url","width","height"],"properties":{"url":{"type":"string"},"width":{"type":"integer"},"height":{"type":"integer"}}},{"type":"null"}]},"cover":{"oneOf":[{"type":"object","required":["url","width","height"],"properties":{"url":{"type":"string"},"width":{"type":"integer"},"height":{"type":"integer"}}},{"type":"null"}]},"hero":{"oneOf":[{"type":"object","required":["url","width","height"],"properties":{"url":{"type":"string"},"width":{"type":"integer"},"height":{"type":"integer"}}},{"type":"null"}]},"logo":{"oneOf":[{"type":"object","required":["url","width","height"],"properties":{"url":{"type":"string"},"width":{"type":"integer"},"height":{"type":"integer"}}},{"type":"null"}]}}},"accent":{"type":["string","null"],"description":"the studio's page colour (#rrggbb) from the published page"},"studio":{"oneOf":[{"type":"object","required":["slug","display_name"],"properties":{"slug":{"type":"string"},"display_name":{"type":"string"}}},{"type":"null"}]},"page_url":{"type":["string","null"],"description":"The game's store page"}}}}}}}}}}}},"/v1/games/{ref}":{"get":{"security":[],"parameters":[{"name":"ref","in":"path","required":true,"schema":{"type":"string"}}],"summary":"Look up a game by id or slug (what a store link's launcher shows before sign-in)","description":"Art, studio and `access` come from the game's published store page (public or unlisted); `page_url` only for a public page. A draft or taken-down page shares none of them.","responses":{"200":{"description":"Game","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"visibility":{"type":"string"},"access":{"enum":["anyone","free","key","invite",null]},"art":{"type":"object","description":"The studio's art from the published store page","properties":{"icon":{"oneOf":[{"type":"object","required":["url","width","height"],"properties":{"url":{"type":"string"},"width":{"type":"integer"},"height":{"type":"integer"}}},{"type":"null"}]},"cover":{"oneOf":[{"type":"object","required":["url","width","height"],"properties":{"url":{"type":"string"},"width":{"type":"integer"},"height":{"type":"integer"}}},{"type":"null"}]},"hero":{"oneOf":[{"type":"object","required":["url","width","height"],"properties":{"url":{"type":"string"},"width":{"type":"integer"},"height":{"type":"integer"}}},{"type":"null"}]},"logo":{"oneOf":[{"type":"object","required":["url","width","height"],"properties":{"url":{"type":"string"},"width":{"type":"integer"},"height":{"type":"integer"}}},{"type":"null"}]}}},"accent":{"type":["string","null"],"description":"the studio's page colour (#rrggbb) from the published page"},"studio":{"oneOf":[{"type":"object","required":["slug","display_name"],"properties":{"slug":{"type":"string"},"display_name":{"type":"string"}}},{"type":"null"}]},"page_url":{"type":["string","null"],"description":"The game's store page"}}}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/games/{id}/keys":{"post":{"summary":"Enroll an Ed25519 publisher public key","parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._:-]{8,128}$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["public_key"],"properties":{"public_key":{"type":"string","contentEncoding":"base64"}}}}}},"responses":{"200":{"description":"Already enrolled","content":{"application/json":{"schema":{"type":"object"}}}},"201":{"description":"Enrolled","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"description":"Requires `signingKey:manage` in the organization."}},"/v1/organizations/{org}/games/{id}/keys/{keyId}/revoke":{"post":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}},{"name":"keyId","in":"path","required":true,"schema":{"type":"string","pattern":"^key_[0-9a-f]{32}$"}}],"summary":"Revoke a publisher key","responses":{"200":{"description":"Revoked","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"description":"Requires `signingKey:manage` in the organization."}},"/v1/games/{id}/keys/trusted":{"get":{"security":[],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}}],"summary":"Publisher keys and their states (clients pin these)","responses":{"200":{"description":"Keys","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/v1/organizations/{org}/games/{id}/domains":{"post":{"summary":"Get or create the protection domain of a package","parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["mode"],"properties":{"package":{"type":"string"},"mode":{"enum":["none","aes-256-gcm"]}}}}}},"responses":{"200":{"description":"Existing domain","content":{"application/json":{"schema":{"type":"object"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"description":"Requires `release:publish` in the organization."}},"/v1/organizations/{org}/games/{id}/domains/{pd}/content-key":{"post":{"summary":"Register a domain's content key once; wrapped under the Worker KEK and never returned to publishers","parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}},{"name":"pd","in":"path","required":true,"schema":{"type":"string","pattern":"^pd_[0-9a-f]{32}$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["content_key"],"properties":{"content_key":{"type":"string","contentEncoding":"base64"}}}}}},"responses":{"200":{"description":"Already registered (same key)","content":{"application/json":{"schema":{"type":"object"}}}},"201":{"description":"Registered","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"description":"Requires `signingKey:manage` in the organization."}},"/v1/organizations/{org}/games/{id}/domains/{pd}/published-indexes":{"get":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}},{"name":"pd","in":"path","required":true,"schema":{"type":"string","pattern":"^pd_[0-9a-f]{32}$"}}],"summary":"Published releases in a domain (for encrypted record reuse)","responses":{"200":{"description":"Releases","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"description":"Requires `release:publish` in the organization."}},"/v1/organizations/{org}/games/{id}/releases":{"get":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":200}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"next_cursor from the previous page"},{"name":"platform","in":"query","schema":{"type":"string"}},{"name":"status","in":"query","schema":{"enum":["reserved","uploading","verifying","published","failed","aborted"]}}],"summary":"Releases, newest first (game:read). status published means the API verified every object's hash and size and the descriptor's signature by an active key of the game; only published releases can go on a channel.","responses":{"200":{"description":"Releases page","content":{"application/json":{"schema":{"type":"object","required":["releases","next_cursor"],"properties":{"releases":{"type":"array","items":{"$ref":"#/components/schemas/Release"}},"next_cursor":{"type":["string","null"]}}}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"description":"Requires `game:read` in the organization."},"post":{"summary":"Reserve a release name and the next sequence number","parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._:-]{8,128}$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["platform","release_name","protection_domain_id"],"properties":{"platform":{"type":"string"},"release_name":{"type":"string"},"protection_domain_id":{"type":"string"}}}}}},"responses":{"200":{"description":"Resumed reservation","content":{"application/json":{"schema":{"type":"object"}}}},"201":{"description":"Reserved","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"description":"Requires `release:publish` in the organization."}},"/v1/games/{id}/releases/{rid}":{"get":{"security":[{"bearer":[]},{}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}},{"name":"rid","in":"path","required":true,"schema":{"type":"string","pattern":"^rel_[0-9a-f]{32}$"}}],"summary":"Published release: signed envelope, manifest and index URLs","responses":{"200":{"description":"Release","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/games/{id}/releases/{rid}/pack-urls":{"post":{"security":[{"bearer":[]},{}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}},{"name":"rid","in":"path","required":true,"schema":{"type":"string","pattern":"^rel_[0-9a-f]{32}$"}}],"summary":"Download URLs for packs of a release (CDN for public, presigned for restricted)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["packs"],"properties":{"packs":{"type":"array","items":{"type":"string","pattern":"^[0-9a-f]{64}$"}}}}}}},"responses":{"200":{"description":"URLs","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/games/{id}/releases/{rid}/uploads":{"post":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}},{"name":"rid","in":"path","required":true,"schema":{"type":"string","pattern":"^rel_[0-9a-f]{32}$"}}],"summary":"Open (or resume) an upload session; existing objects are reported present","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["objects"],"properties":{"objects":{"type":"array","items":{"type":"object","properties":{"kind":{"enum":["pack","manifest","index"]},"hash":{"type":"string","pattern":"^[0-9a-f]{64}$"},"size":{"type":"integer"}}}}}}}}},"responses":{"200":{"description":"Session","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"description":"Requires `release:publish` in the organization."}},"/v1/organizations/{org}/games/{id}/uploads/{sid}/parts":{"post":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}},{"name":"sid","in":"path","required":true,"schema":{"type":"string","pattern":"^up_[0-9a-f]{32}$"}}],"summary":"Presigned multipart part URLs and already-uploaded parts","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"hash":{"type":"string","pattern":"^[0-9a-f]{64}$"},"parts":{"type":"array","items":{"type":"integer"}}}}}}},"responses":{"200":{"description":"Parts","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"description":"Requires `release:publish` in the organization."}},"/v1/organizations/{org}/games/{id}/uploads/{sid}/complete":{"post":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}},{"name":"sid","in":"path","required":true,"schema":{"type":"string","pattern":"^up_[0-9a-f]{32}$"}}],"summary":"Complete a multipart upload from the parts R2 holds","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"hash":{"type":"string","pattern":"^[0-9a-f]{64}$"}}}}}},"responses":{"200":{"description":"Present","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"description":"Requires `release:publish` in the organization."}},"/v1/organizations/{org}/games/{id}/uploads/{sid}/abort":{"post":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}},{"name":"sid","in":"path","required":true,"schema":{"type":"string","pattern":"^up_[0-9a-f]{32}$"}}],"summary":"Abort an upload session","responses":{"200":{"description":"Aborted","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"description":"Requires `release:publish` in the organization."}},"/v1/organizations/{org}/games/{id}/uploads/{sid}/finalize":{"post":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}},{"name":"sid","in":"path","required":true,"schema":{"type":"string","pattern":"^up_[0-9a-f]{32}$"}}],"summary":"Verify objects, index and signature; publish the release","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["descriptor","signature"],"properties":{"descriptor":{"$ref":"#/components/schemas/Descriptor"},"signature":{"$ref":"#/components/schemas/Signature"}}}}}},"responses":{"200":{"description":"Published","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"description":"Requires `release:publish` in the organization."}},"/v1/organizations/{org}/games/{id}/channels":{"get":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}}],"summary":"List channels (game:read)","responses":{"200":{"description":"Channels","content":{"application/json":{"schema":{"type":"object","required":["channels","next_cursor"],"properties":{"channels":{"type":"array","items":{"$ref":"#/components/schemas/Channel"}},"next_cursor":{"type":["string","null"]}}}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"description":"Requires `game:read` in the organization."}},"/v1/games/{id}/channels/{platform}/{name}":{"get":{"security":[{"bearer":[]},{}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}},{"name":"platform","in":"path","required":true,"schema":{"type":"string"}},{"name":"name","in":"path","required":true,"schema":{"type":"string"}}],"summary":"Resolve a channel","responses":{"200":{"description":"Channel","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/organizations/{org}/games/{id}/channels/{platform}/{name}":{"put":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}},{"name":"platform","in":"path","required":true,"schema":{"type":"string"}},{"name":"name","in":"path","required":true,"schema":{"type":"string"}}],"summary":"Promote or roll back a channel (channel:write): point it at a published release of its platform. Compare-and-swap on revision (null creates the channel): a stale or replayed request gets 409 revision_mismatch with the current release, never a double move. Moving to a lower sequence is a rollback and needs allow_rollback. Recorded in the channel's history with the optional note.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["release_id","expected_revision"],"properties":{"release_id":{"type":"string"},"expected_revision":{"type":["integer","null"]},"allow_rollback":{"type":"boolean"},"note":{"type":"string","maxLength":500}}}}}},"responses":{"200":{"description":"Moved","content":{"application/json":{"schema":{"type":"object","required":["game_id","platform","channel","release_id","sequence","revision","rollback"],"properties":{"game_id":{"type":"string"},"platform":{"type":"string"},"channel":{"type":"string"},"release_id":{"type":"string"},"sequence":{"type":"integer"},"revision":{"type":"integer"},"rollback":{"type":"boolean"}}}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"description":"Requires `channel:write` in the organization."}},"/v1/organizations/{org}/games/{id}/channels/{platform}/{name}/history":{"get":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}},{"name":"platform","in":"path","required":true,"schema":{"type":"string"}},{"name":"name","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":200}},{"name":"cursor","in":"query","schema":{"type":"string"}}],"summary":"A channel's moves, newest first (game:read)","responses":{"200":{"description":"History page","content":{"application/json":{"schema":{"type":"object","required":["moves","next_cursor"],"properties":{"moves":{"type":"array","items":{"$ref":"#/components/schemas/ChannelMove"}},"next_cursor":{"type":["string","null"]}}}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"description":"Requires `game:read` in the organization."}},"/v1/organizations/{org}/games/{id}/grants":{"post":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}}],"summary":"Issue a download grant for a package","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"package":{"type":"string"},"ttl_seconds":{"type":"integer"},"max_sessions":{"type":"integer"}}}}}},"responses":{"201":{"description":"Grant (secret shown once)","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"description":"Requires `entitlement:grant` in the organization."}},"/v1/organizations/{org}/games/{id}/grants/{gid}/revoke":{"post":{"parameters":[{"name":"org","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}},{"name":"gid","in":"path","required":true,"schema":{"type":"string","pattern":"^dpg_[0-9a-f]{32}$"}}],"summary":"Revoke a grant (its sessions stop working)","responses":{"200":{"description":"Revoked","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"description":"Requires `entitlement:grant` in the organization."}},"/v1/sessions":{"post":{"summary":"Exchange a download grant for a short-lived session","responses":{"201":{"description":"Session (secret shown once)","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/games/{id}/content-key":{"post":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^game_[0-9a-f]{32}$"}}],"summary":"Release a content key to a download session","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["protection_domain_id"],"properties":{"protection_domain_id":{"type":"string"}}}}}},"responses":{"200":{"description":"Content key","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Problem","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}}}}