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.