Skip to content

Capes ​

Shared cape catalog and selection endpoints for the launcher, Dash moderation, and the Capes client mod.

Source model ​

V1 supports exactly two sources:

  • mojang: launcher-local Microsoft account capes, not mirrored by the Public API
  • uebliche: API-backed uploads, moderation, selection, and public resolution

Only uebliche capes are stored and served by the Public API.

Public catalog ​

GET /v1/public/capes ​

Returns approved public uebliche capes.

Query params:

  • query (optional): substring search against cape name, description, or creator
  • source (optional): must be uebliche when provided
  • limit (optional): page size
  • offset (optional): page offset
json
{
  "entries": [
    {
      "id": "8f9fdd27-9af1-47c0-b7ec-a9f1dd8e8f36",
      "source": "uebliche",
      "name": "Aurora",
      "description": "Soft blue event cape",
      "creator": "Freddi",
      "status": "approved",
      "previewTextureUrl": "https://cdn.uebliche.info/capes/8f9fdd27-9af1-47c0-b7ec-a9f1dd8e8f36-preview.png",
      "textureUrl": "https://cdn.uebliche.info/capes/8f9fdd27-9af1-47c0-b7ec-a9f1dd8e8f36.png",
      "mine": false,
      "selected": false,
      "downloads": 12
    }
  ],
  "total": 1,
  "limit": 24,
  "offset": 0
}

GET /v1/public/capes/{id} ​

Returns one approved public cape entry.

GET /v1/public/capes/selected/{userId} ​

Resolves the caller-visible active uebliche cape for a user.

json
{
  "selection": {
    "source": "uebliche",
    "capeId": "8f9fdd27-9af1-47c0-b7ec-a9f1dd8e8f36",
    "updatedAt": "2026-04-13T20:10:00Z"
  },
  "entry": {
    "id": "8f9fdd27-9af1-47c0-b7ec-a9f1dd8e8f36",
    "source": "uebliche",
    "name": "Aurora",
    "status": "approved",
    "textureUrl": "https://cdn.uebliche.info/capes/8f9fdd27-9af1-47c0-b7ec-a9f1dd8e8f36.png"
  }
}

When no public uebliche cape is active, the endpoint returns an empty selection payload and clients must keep vanilla or Mojang cape rendering.

Profile uploads ​

These routes require an authenticated profile token.

GET /v1/profile/capes ​

Lists the caller's own draft, pending, approved, or blocked uebliche capes.

POST /v1/profile/capes ​

Creates a new draft cape.

json
{
  "name": "Aurora",
  "description": "Soft blue event cape",
  "texture": {
    "dataUrl": "data:image/png;base64,..."
  }
}

Validation rules:

  • PNG only
  • 64x32 or 64x64
  • API-side size limit enforcement

GET /v1/profile/capes/{id} ​

Returns one of the caller's own capes.

PATCH /v1/profile/capes/{id} ​

Updates draft or returned capes.

DELETE /v1/profile/capes/{id} ​

Removes one of the caller's own capes.

POST /v1/profile/capes/{id}/submit ​

Moves a draft back into moderation with status pending.

POST /v1/profile/capes/{id}/withdraw ​

Pulls a pending cape back to private.

Active selection ​

GET /v1/profile/capes/selection ​

Returns the caller's normalized active selection.

json
{
  "source": "uebliche",
  "capeId": "8f9fdd27-9af1-47c0-b7ec-a9f1dd8e8f36",
  "updatedAt": "2026-04-13T20:10:00Z"
}

PUT /v1/profile/capes/selection ​

Updates the active account-bound cape selection.

json
{
  "source": "uebliche",
  "capeId": "8f9fdd27-9af1-47c0-b7ec-a9f1dd8e8f36"
}

The launcher keeps Mojang capes locally and merges them client-side with the API-backed uebliche entries.

Upload terms ​

GET /v1/profile/capes/upload-terms ​

Returns the current upload terms revision and acceptance state.

POST /v1/profile/capes/upload-terms/accept ​

Stores the caller's acceptance of the current upload terms revision.

Moderation ​

GET /v1/admin/capes ​

Lists capes for moderators, optionally filtered by status.

PATCH /v1/admin/capes/{id} ​

Updates moderation metadata and status.

Allowed statuses:

  • private
  • pending
  • approved
  • blocked

DELETE /v1/admin/capes/{id} ​

Deletes a cape entry and its moderation record.