Mojang Profile API

Authenticated profile and name management

OpenAPI Specification

mojang-profile-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Minecraft Services Attributes Profile 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: Profile
  description: Authenticated profile and name management
paths:
  /minecraft/profile:
    get:
      operationId: getAuthenticatedProfile
      summary: Get Authenticated Profile
      description: Return the signed-in player's own profile including UUID, name, owned skins, and owned capes.
      tags:
      - Profile
      security:
      - bearerAuth: []
      responses:
        '200':
          description: Authenticated 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
  /minecraft/profile/namechange:
    get:
      operationId: getNameChangeInfo
      summary: Get Name Change Info
      description: Returns the player's name-change cooldown state — last-change date, creation date, and whether a change is currently allowed.
      tags:
      - Profile
      security:
      - bearerAuth: []
      responses:
        '200':
          description: Name-change information.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NameChangeInfo'
        '401':
          description: Missing or invalid access token.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /minecraft/profile/name/{name}/available:
    get:
      operationId: checkNameAvailability
      summary: Check Name Availability
      description: Check whether a desired username is available, duplicate, or otherwise not allowed. Rate-limited to roughly 20 requests per five minutes per account.
      tags:
      - Profile
      security:
      - bearerAuth: []
      parameters:
      - name: name
        in: path
        required: true
        description: Candidate username.
        example: NewName123
        schema:
          type: string
      responses:
        '200':
          description: Availability response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NameAvailability'
        '429':
          description: Rate limit exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /minecraft/profile/name/{name}:
    put:
      operationId: changeName
      summary: Change Name
      description: Change the authenticated player's username.
      tags:
      - Profile
      security:
      - bearerAuth: []
      parameters:
      - name: name
        in: path
        required: true
        description: New username.
        example: NewName123
        schema:
          type: string
      responses:
        '200':
          description: Updated profile.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticatedProfile'
        '400':
          description: Invalid name supplied.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Name already taken or change not currently allowed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Rate limit exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /user/profiles/{uuid}/names:
    get:
      operationId: getNameHistory
      summary: Get Name History (Deprecated)
      description: Returns the full name-change history for the player identified by UUID. Deprecated and disabled by Mojang on 13 September 2022 — the endpoint now returns 410 Gone for all callers. Documented for historical reference and archival research.
      tags:
      - Profile
      deprecated: true
      parameters:
      - name: uuid
        in: path
        required: true
        description: Player UUID (with or without hyphens).
        example: 853c80ef3c3749fdaa49938b674adae6
        schema:
          type: string
          pattern: ^[0-9a-fA-F-]{32,36}$
      responses:
        '200':
          description: Historical response; no longer issued.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/NameChange'
        '410':
          description: Endpoint disabled by Mojang.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error_2'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /orders/statistics:
    post:
      operationId: getSaleStatistics
      summary: Get Sale Statistics
      description: Returns aggregate sale and revenue statistics across one or more Mojang product SKUs (Minecraft, Minecraft Realms, Minecraft Bedrock, Cobalt, etc.). Public, unauthenticated.
      tags:
      - Profile
      requestBody:
        required: true
        description: SKU filter.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SaleStatisticsRequest'
      responses:
        '200':
          description: Aggregate sale statistics.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SaleStatistics'
        '400':
          description: Invalid metric key supplied.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error_2'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
components:
  schemas:
    NameAvailability:
      type: object
      description: Response from the name-availability check.
      required:
      - status
      properties:
        status:
          type: string
          enum:
          - AVAILABLE
          - DUPLICATE
          - NOT_ALLOWED
          example: AVAILABLE
    NameChange:
      type: object
      description: A historical name-change entry (deprecated endpoint).
      required:
      - name
      properties:
        name:
          type: string
          description: Player username at the time of the change.
          example: jeb_
        changedToAt:
          type: integer
          format: int64
          description: Unix epoch milliseconds at which the player changed to this name. Absent for the original account name.
          example: 1417597263000
    SaleStatistics:
      type: object
      description: Aggregate sale figures.
      properties:
        total:
          type: integer
          description: Total units sold across the requested SKUs.
          example: 41000000
        last24h:
          type: integer
          description: Units sold in the last 24 hours.
          example: 75000
        saleVelocityPerSeconds:
          type: number
          format: float
          description: Recent average sales per second.
          example: 0.85
    SaleStatisticsRequest:
      type: object
      description: Filter for the /orders/statistics request.
      required:
      - metricKeys
      properties:
        metricKeys:
          type: array
          description: SKUs to aggregate.
          items:
            type: string
            enum:
            - item_sold_minecraft
            - prepaid_card_redeemed_minecraft
            - item_sold_cobalt
            - item_sold_scrolls
            - item_sold_dungeons
          example:
          - item_sold_minecraft
          - prepaid_card_redeemed_minecraft
    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
    NameChangeInfo:
      type: object
      description: Name-change cooldown information.
      properties:
        changedAt:
          type: string
          format: date-time
          description: ISO 8601 timestamp of the most recent name change.
          example: '2025-04-12T18:30:00Z'
        createdAt:
          type: string
          format: date-time
          description: ISO 8601 timestamp of the player profile's creation.
          example: '2014-11-19T12:42:43Z'
        nameChangeAllowed:
          type: boolean
          description: True if a name change is currently allowed.
          example: true
    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
    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
    Error_2:
      type: object
      description: Standard Mojang error envelope.
      properties:
        error:
          type: string
          description: Error class name.
          example: IllegalArgumentException
        errorMessage:
          type: string
          description: Human-readable error description.
          example: Path /users/profiles/minecraft/ is invalid.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: 'Minecraft access token issued by /authentication/login_with_xbox. Used as `Authorization: Bearer {token}`.'