# Depot - [Introduction](/docs): Depot lets your studio sell and ship its game directly to players, from your own store page, with verified updates. - **Get started** - [Quickstart](/docs/getting-started/quickstart): Go from a game build to a store link that players can claim, install and play. - [Install the CLI](/docs/getting-started/install-cli): Build the depot CLI, point it at the API, and sign in as a person or with an organization API key. - [Concepts](/docs/getting-started/concepts): The Depot model in plain words, from studios and games to packages, entitlements and store pages. - [How players get your game](/docs/getting-started/how-players-get-your-game): The player journey from your store link to playing offline, and what Depot checks along the way. - **Publish** - [Push builds](/docs/publishing/push): Publish a build of your game with depot push, with launch targets, release notes, DLC packages and resumable uploads. - [Channels and releases](/docs/publishing/channels-and-releases): Releases are the builds you push. Channels decide which release players get. Promote, roll back and add release notes. - [Signing keys](/docs/publishing/signing-keys): Sign every release with your own Ed25519 key. Generate, enroll, back up, rotate and revoke keys, and sign offline. - [CI and agents](/docs/publishing/ci-and-agents): Publish from CI or an AI agent with an organization API key. Permissions, environment variables, a GitHub Actions workflow and safe retries. - **Sell and share** - [Store pages](/docs/store/pages): Write your game's public page, publish it as public or unlisted, and check that players can install from it. - [Branding and media](/docs/store/branding-and-media): Add your hero, cover, icon and logo, set the page colour, and add a hero loop, a trailer and a gallery. - [Who can get it](/docs/store/who-can-get-it): Choose whether players get your game free, with a key, or only by invitation, and change it at any time. - [Keys and access](/docs/store/keys-and-access): Define packages, issue and revoke game keys, give the game to specific players, and see who owns what. - [Studio storefront](/docs/store/storefront): Set up your studio's public page on Depot, with your name, bio, links, logo and banner, and every public game page. - [Launcher catalog](/docs/store/launcher-catalog): List your game in the Depot launcher's catalog so players can find it there, and know when it shows. - **Build with Depot** - [Depot SDK](/docs/sdk): Check from inside your game whether the player owns it and its DLC, offline. - [Unity](/docs/sdk/unity): Add the Depot SDK to a Unity project and check the base game and DLC from the player's offline license. - [Offline licenses](/docs/sdk/offline-licenses): What an offline license is, who stores it, how long it lasts, and what your game checks. - [CLI reference](/docs/cli): Every studio and player command of the depot CLI, with its subcommands and flags. - **API reference** - [API overview](/docs/api): Base URL, authentication, organization routes, errors, idempotency, concurrency, pagination, rate limits and caching for the Depot REST API. - Games - V1 - Organizations - Org - Games - [The organization's games (game:read)](/docs/api/games/v1/organizations/org/games/get) - [Create a game](/docs/api/games/v1/organizations/org/games/post): Requires `game:create` in the organization. - Id - [One game (game:read)](/docs/api/games/v1/organizations/org/games/id/get) - [Edit a game (game:update): name, 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).](/docs/api/games/v1/organizations/org/games/id/patch) - Art - Kind - [Remove store art (game:update)](/docs/api/games/v1/organizations/org/games/id/art/kind/delete) - [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.](/docs/api/games/v1/organizations/org/games/id/art/kind/put) - Store pages - V1 - Organizations - Org - Games - Id - Page - [The game's public page: draft, published snapshot, visibility and public URL (game:read)](/docs/api/store-pages/v1/organizations/org/games/id/page/get) - [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.](/docs/api/store-pages/v1/organizations/org/games/id/page/patch) - Publish - [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.](/docs/api/store-pages/v1/organizations/org/games/id/page/publish/post) - Screenshots - [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.](/docs/api/store-pages/v1/organizations/org/games/id/page/screenshots/post) - Shot - [Remove a screenshot from the draft (game:update); the published page keeps it until the next publish](/docs/api/store-pages/v1/organizations/org/games/id/page/screenshots/shot/delete) - Unpublish - [Take the page down (game:update). New free claims stop; players who already own the game keep it, updates included. Nothing is revoked.](/docs/api/store-pages/v1/organizations/org/games/id/page/unpublish/post) - Videos - [The game's uploaded videos (game:read)](/docs/api/store-pages/v1/organizations/org/games/id/page/videos/get) - [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.](/docs/api/store-pages/v1/organizations/org/games/id/page/videos/post) - Vid - [Remove a video (game:update): out of the draft now; the published page keeps it until the next publish](/docs/api/store-pages/v1/organizations/org/games/id/page/videos/vid/delete) - Complete - [Check an uploaded video (game:update): an MP4 within its purpose's length and size. 422 (and the upload is discarded) otherwise.](/docs/api/store-pages/v1/organizations/org/games/id/page/videos/vid/complete/post) - Poster - [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.](/docs/api/store-pages/v1/organizations/org/games/id/page/videos/vid/poster/put) - Storefront - [The studio's public storefront profile (game:read). Created on first use from the organization's name and slug.](/docs/api/store-pages/v1/organizations/org/storefront/get) - [Edit the storefront profile (organization:update): display name, bio, up to 5 https links, support URL. Optional expected_revision.](/docs/api/store-pages/v1/organizations/org/storefront/patch) - Art - Kind - [Remove the logo or banner (organization:update)](/docs/api/store-pages/v1/organizations/org/storefront/art/kind/delete) - [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.](/docs/api/store-pages/v1/organizations/org/storefront/art/kind/put) - Releases and channels - V1 - Games - Id - Channels - Platform - Name - [Resolve a channel](/docs/api/releases-and-channels/v1/games/id/channels/platform/name/get) - Content key - [Release a content key to a download session](/docs/api/releases-and-channels/v1/games/id/content-key/post) - Keys - Trusted - [Publisher keys and their states (clients pin these)](/docs/api/releases-and-channels/v1/games/id/keys/trusted/get) - Releases - Rid - [Published release: signed envelope, manifest and index URLs](/docs/api/releases-and-channels/v1/games/id/releases/rid/get) - Pack urls - [Download URLs for packs of a release (CDN for public, presigned for restricted)](/docs/api/releases-and-channels/v1/games/id/releases/rid/pack-urls/post) - Organizations - Org - Games - Id - Channels - [List channels (game:read)](/docs/api/releases-and-channels/v1/organizations/org/games/id/channels/get): Requires `game:read` in the organization. - Platform - Name - [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.](/docs/api/releases-and-channels/v1/organizations/org/games/id/channels/platform/name/put): Requires `channel:write` in the organization. - History - [A channel's moves, newest first (game:read)](/docs/api/releases-and-channels/v1/organizations/org/games/id/channels/platform/name/history/get): Requires `game:read` in the organization. - Domains - [Get or create the protection domain of a package](/docs/api/releases-and-channels/v1/organizations/org/games/id/domains/post): Requires `release:publish` in the organization. - Pd - Content key - [Register a domain's content key once; wrapped under the Worker KEK and never returned to publishers](/docs/api/releases-and-channels/v1/organizations/org/games/id/domains/pd/content-key/post): Requires `signingKey:manage` in the organization. - Published indexes - [Published releases in a domain (for encrypted record reuse)](/docs/api/releases-and-channels/v1/organizations/org/games/id/domains/pd/published-indexes/get): Requires `release:publish` in the organization. - Releases - [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.](/docs/api/releases-and-channels/v1/organizations/org/games/id/releases/get): Requires `game:read` in the organization. - [Reserve a release name and the next sequence number](/docs/api/releases-and-channels/v1/organizations/org/games/id/releases/post): Requires `release:publish` in the organization. - Rid - Uploads - [Open (or resume) an upload session; existing objects are reported present](/docs/api/releases-and-channels/v1/organizations/org/games/id/releases/rid/uploads/post): Requires `release:publish` in the organization. - Uploads - Sid - Abort - [Abort an upload session](/docs/api/releases-and-channels/v1/organizations/org/games/id/uploads/sid/abort/post): Requires `release:publish` in the organization. - Complete - [Complete a multipart upload from the parts R2 holds](/docs/api/releases-and-channels/v1/organizations/org/games/id/uploads/sid/complete/post): Requires `release:publish` in the organization. - Finalize - [Verify objects, index and signature; publish the release](/docs/api/releases-and-channels/v1/organizations/org/games/id/uploads/sid/finalize/post): Requires `release:publish` in the organization. - Parts - [Presigned multipart part URLs and already-uploaded parts](/docs/api/releases-and-channels/v1/organizations/org/games/id/uploads/sid/parts/post): Requires `release:publish` in the organization. - Sessions - [Exchange a download grant for a short-lived session](/docs/api/releases-and-channels/v1/sessions/post) - Signing keys - V1 - Organizations - Org - Games - Id - Keys - [Enroll an Ed25519 publisher public key](/docs/api/signing-keys/v1/organizations/org/games/id/keys/post): Requires `signingKey:manage` in the organization. - Keyid - Revoke - [Revoke a publisher key](/docs/api/signing-keys/v1/organizations/org/games/id/keys/keyid/revoke/post): Requires `signingKey:manage` in the organization. - Packages and access - V1 - Games - Id - Download grants - [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.](/docs/api/packages-and-access/v1/games/id/download-grants/post) - Organizations - Org - Entitlements - [Entitlements to the organization's packages, oldest first (entitlement:read). Each names its player by display name and @handle only.](/docs/api/packages-and-access/v1/organizations/org/entitlements/get) - Grants - [Grant a package to a Depot user (entitlement:grant). Already owned: 200 with the existing entitlement.](/docs/api/packages-and-access/v1/organizations/org/entitlements/grants/post) - Id - Revoke - [Revoke an entitlement (entitlement:revoke): new grants, sessions and key delivery stop at once; installed copies keep launching](/docs/api/packages-and-access/v1/organizations/org/entitlements/id/revoke/post) - Games - Id - Grants - [Issue a download grant for a package](/docs/api/packages-and-access/v1/organizations/org/games/id/grants/post): Requires `entitlement:grant` in the organization. - Gid - Revoke - [Revoke a grant (its sessions stop working)](/docs/api/packages-and-access/v1/organizations/org/games/id/grants/gid/revoke/post): Requires `entitlement:grant` in the organization. - Packages - [Packages of a game (game:read)](/docs/api/packages-and-access/v1/organizations/org/games/id/packages/get) - [Define a package (game:update): base, dlc, test (content = releases pushed with --package ) or bundle (includes other packages of the game)](/docs/api/packages-and-access/v1/organizations/org/games/id/packages/post) - Packages - Pkg - [Enable/disable, retitle, toggle free claims (game:update). Disabled packages grant nothing new.](/docs/api/packages-and-access/v1/organizations/org/packages/pkg/patch) - Key batches - [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.](/docs/api/packages-and-access/v1/organizations/org/packages/pkg/key-batches/post) - Retail - Delegations - [Delegations this retailer holds, with remaining quota (retail:issue)](/docs/api/packages-and-access/v1/organizations/org/retail/delegations/get) - Keys - [Retailer just-in-time issuance (retail:issue): unique per order_id; quota reserved atomically; codes shown once](/docs/api/packages-and-access/v1/organizations/org/retail/keys/post) - Retailer delegations - [Delegations this publisher granted (retailer:delegate)](/docs/api/packages-and-access/v1/organizations/org/retailer-delegations/get) - [Let a retailer organization issue keys for one package, up to a quota (retailer:delegate)](/docs/api/packages-and-access/v1/organizations/org/retailer-delegations/post) - Id - Revoke - [Stop a retailer's issuance now; optionally revoke its still-available keys (default: they stay valid)](/docs/api/packages-and-access/v1/organizations/org/retailer-delegations/id/revoke/post) - Packages - Pkg - Claim - [Claim a free package](/docs/api/packages-and-access/v1/packages/pkg/claim/post) - Game keys - V1 - Keys - Redeem - [Redeem a game key into an entitlement (signed-in player; atomic, single use). Already owned: the key is not used.](/docs/api/game-keys/v1/keys/redeem/post) - Organizations - Org - Key batches - [Batches with available/redeemed/revoked counts, never codes (keys:read)](/docs/api/game-keys/v1/organizations/org/key-batches/get) - Id - Revoke - [Revoke a batch's still-available keys (keys:revoke); redeemed keys keep their entitlements](/docs/api/game-keys/v1/organizations/org/key-batches/id/revoke/post) - Players - V1 - Catalog - [Listed games and their channels for the launcher (not download authorization)](/docs/api/players/v1/catalog/get): 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. - Games - Id - Claim - [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.](/docs/api/players/v1/games/id/claim/post) - Ref - [Look up a game by id or slug (what a store link's launcher shows before sign-in)](/docs/api/players/v1/games/ref/get): 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. - Me - [The signed-in person: identity (issuer, subject), display name, handle and organization memberships. Requires a Depot (OIDC) access token.](/docs/api/players/v1/me/get) - Library - [Games and packages the signed-in player owns (store-page fields only)](/docs/api/players/v1/me/library/get) - Licensing - V1 - Games - Game - Licenses - Offline - [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.](/docs/api/licensing/v1/games/game/licenses/offline/post) - Licensing - Key status - [Root-signed list of revoked licensing keys for this environment](/docs/api/licensing/v1/licensing/key-status/get) - Organization - V1 - Organizations - [Organizations I belong to, with my role and permissions](/docs/api/organization/v1/organizations/get) - [Create an organization (a publisher); you become its owner](/docs/api/organization/v1/organizations/post) - Org - [The organization, and the caller's role and permissions in it (member or API key)](/docs/api/organization/v1/organizations/org/get) - [Rename (organization:update; people only)](/docs/api/organization/v1/organizations/org/patch) - Api keys - [Organization API keys (apiKey:read; never the secrets)](/docs/api/organization/v1/organizations/org/api-keys/get) - [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.](/docs/api/organization/v1/organizations/org/api-keys/post) - Id - [Revoke a key (apiKey:delete); immediate](/docs/api/organization/v1/organizations/org/api-keys/id/delete) - Rotate - [Replace a key (same name and permissions); the old one stops now or after grace_seconds](/docs/api/organization/v1/organizations/org/api-keys/id/rotate/post) - Audit - [Audit events, newest first (organization:update). Events carry safe metadata only: never codes, secrets or keys.](/docs/api/organization/v1/organizations/org/audit/get) - Invitations - [Pending invitations (invitation:create)](/docs/api/organization/v1/organizations/org/invitations/get) - [Invite by email (invitation:create); accepted on the identity service's invitation page](/docs/api/organization/v1/organizations/org/invitations/post) - Id - [Cancel an invitation (invitation:cancel)](/docs/api/organization/v1/organizations/org/invitations/id/delete) - Members - [Members (people only; emails only for member managers)](/docs/api/organization/v1/organizations/org/members/get) - User - [Remove a member (member:delete), or leave (your own id). The last owner can't leave.](/docs/api/organization/v1/organizations/org/members/user/delete) - [Change a member's role (member:update; only owners grant or remove ownership)](/docs/api/organization/v1/organizations/org/members/user/patch) - Usage - [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.](/docs/api/organization/v1/organizations/org/usage/get) - Whoami - [Describe the calling credential: an API key (organization, permissions) or a person (identity, organizations)](/docs/api/organization/v1/whoami/get) - Public - Healthz - [Liveness and database check](/docs/api/public/healthz/get) - V1 - Openapi json - [This document](/docs/api/public/v1/openapi-json/get) - Public - Reports - [Report a studio or game page (malware, copyright, impersonation, scam, dangerous link, misleading, other). Rate-limited; never public.](/docs/api/public/v1/public/reports/post) - Sitemap - [Public game pages (never unlisted or drafts), for sitemaps](/docs/api/public/v1/public/sitemap/get) - Studios - Slug - [A studio's public storefront and its public game pages (404 when it has none). ETag; cached ~60 s.](/docs/api/public/v1/public/studios/slug/get) - Games - Game - [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.](/docs/api/public/v1/public/studios/slug/games/game/get)