Every Java Edition skin lives at a permanent address on Mojang's texture server, but the game never shows it to you. You need that address when a server's /skin url command asks for a link, when a mod wants a texture instead of a username, or when you want to keep a copy of a skin before the player changes it. There are three ways to get it, and which one you want depends on whether you know the player's username, the skin's hash, or only have the PNG.
Quick answer
We pulled every example in this guide from live profiles on 11 September 2026; the URL format has not changed since Mojang moved skins to textures.minecraft.net in 2014.

What a Minecraft skin URL actually is
A skin URL is a link to a 64×64 PNG on textures.minecraft.net. The last part of the link is a 64-character SHA-256 hash of the image, so two players wearing the same file share one URL, and re-uploading an identical PNG returns the same hash. The image is served over plain HTTP in Mojang's own data, though the HTTPS version works too.
Two things the URL does not tell you: which arm model the skin uses, and who is wearing it. The model (classic 4-pixel arms or slim 3-pixel arms) is a separate flag in the player's profile, which is why the API route below is the one to use if you are feeding the skin into a mod or renderer.
Method 1: from a username, with Crafty
This is the route for the "I saw a skin on a server and want it" case.
- Search the username on Crafty's player search.
- On the profile, the skin viewer shows the current skin. Click through to the skin's own page; the address looks like
crafty.gg/skins/542cde2d…, and that 64-character string is the texture hash. - Prepend
https://textures.minecraft.net/texture/to the hash. That is the skin URL. - If you just want the file, the skin page has a Download PNG button that saves the same texture, so you can skip the URL entirely.
Because Crafty keeps every skin a player has worn, this also works for old skins: open the history on the profile, pick the one you want, and copy its hash the same way. The skin history guide covers that in detail.
Method 2: from a UUID, with the Mojang API
Use this when you are scripting, or when you need the slim/classic flag as well.
- Turn the name into a UUID:
GET https://api.mojang.com/users/profiles/minecraft/<username>returns{"id": "...", "name": "..."}. Skip this if you already have the UUID from a Crafty profile. - Fetch the profile:
GET https://sessionserver.mojang.com/session/minecraft/profile/<uuid>. - In the response,
properties[0].valueis a Base64 string. Decode it and you get:
{
"timestamp": 1653838459263,
"profileId": "8af6c50833d54861b5c2dce1c16c6fae",
"profileName": "Wemmbu",
"textures": {
"SKIN": {
"url": "http://textures.minecraft.net/texture/542cde2d44ae49d0543a3c432804a8108119f6fd8955d03ac4bd23ef6da8db9b",
"metadata": { "model": "slim" }
}
}
}textures.SKIN.url is the skin URL. If metadata.model is "slim" the player uses the Alex arms; if the metadata key is missing entirely, it is the classic Steve model. A CAPE entry appears next to SKIN only when the player has a cape equipped.
Mojang rate-limits these endpoints. The Minecraft Wiki's API page lists roughly 200 requests per 2 minutes per IP for the name lookup and around 400 per 10 seconds for the session server, and the name endpoint occasionally returns a random 403. For anything beyond a handful of lookups, cache the result; the profile changes only when the player changes skin.
Method 3: you only have the PNG
A PNG on your disk has no URL until Mojang stores it. Upload it as your own skin through the launcher's Skins tab or your profile on minecraft.net, wait a minute for the change to propagate, then use Method 1 on your own username. The hash Mojang assigns is derived from the file, so anyone who uploads the exact same PNG gets the same link.
If you would rather not change your skin to get a link, preview the file in Crafty's skin viewer instead. That renders any local PNG in 3D without uploading it anywhere.
Where the URL is useful
- Server skin plugins. SkinsRestorer and similar plugins accept
/skin url <link>on servers that run in offline mode or let you wear a skin that is not on your account. Some require the link to end in.png; the textures.minecraft.net links do not, so use the Crafty download and host the file yourself if the plugin rejects it. - Renderers and mods. Anything that draws a player model from a texture wants the URL plus the model flag from Method 2.
- Archiving. Players change skins and the old ones disappear from their profile. The URL keeps working as long as at least one profile still references the hash, so save the PNG if you care about it.

FAQ
Do Bedrock Edition skins have a URL?
No. Bedrock stores skins against the Xbox account and serves them through Xbox Live, not a public texture server, so there is nothing to link to. If a Bedrock player joins a Java server through Geyser, the server may upload a converted copy to a Java-side profile, and that copy will have a normal textures.minecraft.net URL.
Why does my skin URL start with http and not https?
Mojang's profile data has always written the link with plain http://. The server also answers on https://, so you can use either. Most plugins and tools accept both, but if one refuses the link, try swapping the scheme before assuming the hash is wrong.
Can I get the skin URL of a player who is offline or banned?
Yes, as long as the account still exists. The session server returns the profile for any valid UUID regardless of whether the player is online, and Crafty keeps the skin history even after the player moves on to a new skin. Deleted accounts return nothing.
Is the hash the same for every player wearing the skin?
Yes. The hash is computed from the PNG, so identical files map to identical URLs. That is why popular public skins show dozens of wearers on their Crafty skin page: they all uploaded the same image and Mojang deduplicated it.