Mojang Skins API

Skin selection, upload, and reset

Operations 2

POST /minecraft/profile/skins Change Skin #
DELETE /minecraft/profile/skins/active Reset Skin #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/mojang-skins-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

mojang-skins-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Minecraft Services 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
    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
    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: []
    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
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: 'Minecraft access token issued by /authentication/login_with_xbox. Used as `Authorization: Bearer {token}`.'