openapi: 3.0.3 info: title: Minecraft Services Attributes Skins API description: Microsoft-managed Minecraft Services API (api.minecraftservices.com). Covers authenticated player profile management, name change, skin and cape management, player attributes (chat, friends, profanity filter), privacy blocklist, friends graph, presence reporting, signature keypair issuance, public-key publication for chat signature verification, and player entitlement / ownership checks. Most endpoints require a Minecraft Bearer access token obtained via the Xbox Live -> XSTS -> Minecraft authentication chain. version: 1.0.0 contact: name: Mojang Studios url: https://www.minecraft.net license: name: Mojang Brand and Asset Usage Guidelines url: https://www.minecraft.net/en-us/usage-guidelines x-generated-from: documentation x-last-validated: '2026-05-30' servers: - url: https://api.minecraftservices.com description: Microsoft / Minecraft Services API (production) security: [] tags: - name: Skins description: Skin selection, upload, and reset paths: /minecraft/profile/skins: post: operationId: changeSkin summary: Change Skin description: Set the player's active skin. Accepts either a URL pointing to the skin image (JSON body) or a multipart upload of the image file. tags: - Skins security: - bearerAuth: [] requestBody: required: true description: Skin variant plus either a URL or an uploaded image file. content: application/json: schema: $ref: '#/components/schemas/ChangeSkinRequest' multipart/form-data: schema: type: object required: - variant - file properties: variant: type: string enum: - classic - slim example: classic file: type: string format: binary description: PNG skin image upload. responses: '200': description: Updated profile. content: application/json: schema: $ref: '#/components/schemas/AuthenticatedProfile' '400': description: Invalid skin payload. content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Missing or invalid access token. content: application/json: schema: $ref: '#/components/schemas/Error' x-microcks-operation: delay: 0 dispatcher: FALLBACK /minecraft/profile/skins/active: delete: operationId: resetSkin summary: Reset Skin description: Reset the player's skin to the default Minecraft skin (Steve / Alex). tags: - Skins security: - bearerAuth: [] responses: '200': description: Updated profile. content: application/json: schema: $ref: '#/components/schemas/AuthenticatedProfile' '401': description: Missing or invalid access token. content: application/json: schema: $ref: '#/components/schemas/Error' x-microcks-operation: delay: 0 dispatcher: FALLBACK components: schemas: Error: type: object description: Standard Minecraft Services error envelope. properties: path: type: string description: Request path that produced the error. example: /minecraft/profile/lookup/name/zzzzzzzzzzzzzz errorType: type: string description: Mojang error class. example: NOT_FOUND error: type: string description: Short error name. example: NOT_FOUND errorMessage: type: string description: Human-readable description. example: Couldn't find any profile with name zzzzzzzzzzzzzz developerMessage: type: string description: Optional developer-facing message. example: Couldn't find any profile with name zzzzzzzzzzzzzz Cape: type: object description: A cape owned by the authenticated player. required: - id - state - url properties: id: type: string description: Cape UUID. example: 1981aad373fa9754 state: type: string enum: - ACTIVE - INACTIVE example: ACTIVE url: type: string format: uri description: Cape texture URL. example: https://textures.minecraft.net/texture/cape123... alias: type: string description: Cape display name. example: Migrator ChangeSkinRequest: type: object description: JSON body for the URL-based skin-change call. required: - variant - url properties: variant: type: string enum: - classic - slim example: classic url: type: string format: uri description: Public URL of the PNG skin image. example: https://example.com/skins/my-skin.png AuthenticatedProfile: type: object description: The authenticated player's own profile with skins and capes. required: - id - name properties: id: type: string description: Player UUID without hyphens. example: 853c80ef3c3749fdaa49938b674adae6 name: type: string description: Current username. example: jeb_ skins: type: array description: All skins owned by the player; one is marked ACTIVE. items: $ref: '#/components/schemas/Skin' capes: type: array description: All capes owned by the player; one may be marked ACTIVE. items: $ref: '#/components/schemas/Cape' profileActions: type: array description: Sanctions in effect on the profile (e.g. FORCED_NAME_CHANGE). items: type: string example: [] Skin: type: object description: A skin owned by the authenticated player. required: - id - state - url - variant properties: id: type: string description: Skin UUID. example: cd9a82a0-0b9c-4f10-8c2a-1b1f87b2af80 state: type: string enum: - ACTIVE - INACTIVE example: ACTIVE url: type: string format: uri description: Texture URL. example: https://textures.minecraft.net/texture/abc123... textureKey: type: string description: Texture content hash. example: abc123def456... variant: type: string enum: - CLASSIC - SLIM example: CLASSIC alias: type: string description: Skin alias / nickname. example: Steve securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: JWT description: 'Minecraft access token issued by /authentication/login_with_xbox. Used as `Authorization: Bearer {token}`.'