Minecraft skin download
The raw skin file behind any username or UUID, as a PNG you can save, edit or re-upload. Capes as well. One URL, no key and no login.
/jeb_/skin /jeb_/cape The URL
https://skinrender.dev/render/jeb_/skin?size=64&download=true
https://skinrender.dev/render/069a79f444e94726a5befca90e38aaf5/skin?size=64&download=true The skin render type hands back the texture itself rather than a render of it: the 64×64 sheet with the head, the body, the limbs and every overlay laid out exactly where the game expects them. Paste one of those URLs in the address bar and the file lands in your downloads folder. Username or UUID both work, dashes in the UUID optional.
Ask for 64, or you get an upscale
This is the one thing worth knowing. Like every other type, skin has a default canvas — 256 px — so a bare /skin request returns the sheet blown up 4× with nearest-neighbour edges. That is handy for showing a texture on a page, and wrong for a file you intend to edit or upload. size=64 gives you the texture at its own resolution, pixel for pixel what Mojang serves, re-encoded by this server as a plain 64×64 RGBA PNG — the shape the skin uploader on minecraft.net expects.
/render/jeb_/skin?size=64 # 64×64, the real thing
/render/jeb_/skin # 256×256, upscaled for display
/render/jeb_/skin?size=1024 # 1024×1024, for a texture editor that wants room Parameters that describe a camera or a pose have nothing to do with a flat sheet, so they are ignored rather than refused; the response lists them in the X-Ignored-Params header if you want to catch a typo in a script.
Saving instead of displaying
download=1 sets Content-Disposition: attachment, which is what turns a link into a save. Without it the browser shows the PNG in the tab, which is what you want for an <img> and not what you want for a button. filename names the file; the default is the identifier and the type, so jeb_-skin.png.
<a href="https://skinrender.dev/render/jeb_/skin?size=64&download=true&filename=jeb-skin">
Download this skin
</a> From a terminal, curl is shorter than any of this, and a list of names becomes a folder of skins in one line:
curl -o jeb_.png "https://skinrender.dev/render/jeb_/skin?size=64"
for name in Notch jeb_ Dinnerbone; do
curl -sfo "$name.png" "https://skinrender.dev/render/$name/skin?size=64"
done What is a Minecraft skin URL?
Every skin anyone has uploaded lives at one address on Mojang’s texture server: https://textures.minecraft.net/texture/<hash>. The hash is 64 hexadecimal characters and names that exact image, so the URL never changes what it points at; when a player changes skin, their profile simply points at a new hash. That address is the skin URL.
A username does not lead there directly. The game, and this server, first turn the name into a UUID, then ask Mojang’s session server for the profile (sessionserver.mojang.com/session/minecraft/profile/<uuid>). The profile carries a base64 textures property; decoded, it is a small JSON document whose SKIN.url is the skin URL, with metadata.model set to "slim" for Alex-style arms and a CAPE.url when there is a cape. /api/profile/<name or uuid> does all of that in one request and hands you the result as skinUrl and skinHash, always in the https form.
GET https://skinrender.dev/api/profile/Notch
"skinUrl": "https://textures.minecraft.net/texture/292009a4925b58f02c77dadc3ecef07ea4c7472f64e0fdc32ce5522489362680"
"skinHash": "292009a4925b58f02c77dadc3ecef07ea4c7472f64e0fdc32ce5522489362680"
# the same texture, as a 64×64 download from this server
https://skinrender.dev/render/texture:292009a4925b58f02c77dadc3ecef07ea4c7472f64e0fdc32ce5522489362680/skin?size=64&download=true The hash also works as an identifier here: /render/texture:<hash>/skin serves that texture, the face, head and body renders draw it, with no profile lookup and a response cached as immutable, because the image behind a hash can never change. To wear a stored texture on someone else’s render, pass it as skin=<hash or skin URL>. Only textures.minecraft.net addresses are accepted; the server fetches nothing from anywhere else.
Capes
A cape lives on the profile beside the skin and is a separate texture, so it has its own type: /cape returns the cape artwork flat. The front of a cape is 10×16 rather than square, and size is the height, so size=16 is the unscaled original and anything larger is a clean multiple of it. Most accounts have no cape, and that is not an error — the response is a valid, fully transparent PNG, which keeps an <img> on a profile card from breaking. When you need to branch on it, ask /api/profile/<id> first: it answers with the model, the skin URL and hash, and capeHash, which is null when there is nothing to fetch.
const profile = await fetch("https://skinrender.dev/api/profile/jeb_").then((r) => r.json());
if (profile.capeHash) {
// profile.capeUrl is Mojang's own texture URL; this is the flat render of it
save(`https://skinrender.dev/render/${profile.uuid}/cape?size=16&download=1`);
} Old skins, missing skins
Skins from before 1.8 are 64×32: one arm, one leg, no overlays below the head. Those are upgraded to the 64×64 layout on the way in — the second arm and leg are mirrored into place and the empty regions stay transparent — so what you download is always a modern sheet you can open in any skin editor. A player who has never set a skin, or a name that does not exist, gives you Steve or Alex instead of a 404, chosen the way the game chooses; the X-Skin-Fallback header says so, and default=none asks for the 404 when a script should notice. The caching and limits page covers the rest of the headers.
Or skip the file
Downloading the sheet is the long way round if all you wanted was a picture of the player. Face renders make profile pictures, head renders make icons and cards, and body renders with poses make the full model, cape included — all from the same URL, no download and no image pipeline of your own.
Frequently asked questions
What is a Minecraft skin URL?
It is the address Mojang serves a skin texture from: https://textures.minecraft.net/texture/<hash>, where the hash is 64 hex characters naming that exact image. A player’s profile points at it, and it changes whenever they change skin. /api/profile/<name> here returns it as skinUrl.
How do I download someone’s Minecraft skin?
Open https://skinrender.dev/render/<name or uuid>/skin?size=64&download=1. The browser saves a 64×64 PNG: the player’s skin file, ready to upload again or open in an editor.
Why is the file 256×256 instead of 64×64?
Every render type has a default size, and for skin it is 256 px, so the sheet arrives scaled up with hard pixel edges. Add size=64 and you get the texture at its own resolution.
Can I download a player’s cape?
Yes: /cape returns the cape artwork flat. Players without a cape are not an error — the response is a fully transparent PNG, so check capeHash on /api/profile/<id> first if you need to know.
Does this work for old 64×32 skins?
Yes. Pre-1.8 skins are converted to the modern 64×64 layout before anything else happens, so the file you download is always the current format, with the second arm and leg filled in.
Is downloading a skin allowed?
Skins are served publicly by Mojang’s own texture service and anyone in a game sees them. Copying someone’s skin and wearing it is a matter of manners rather than access; crediting the author is the decent thing when you build on their work.
Related documentation
- Render types: Every render type of the Minecraft skin API (face, head, bust, full body, front, back, skin and cape) with its default size, parameters and live example URLs.
- Parameters: Every query parameter of the Minecraft skin render API: size, camera yaw and pitch, fov, layers, capes, poses, per-joint angles and fallbacks, from the code.
- Libraries & snippets: Use the Minecraft skin render API from HTML, JavaScript, TypeScript, Python, Java (Bukkit, Paper), PHP, Go and curl, with ETag handling for cheap revalidation.
- Caching & limits: How the skin cache works: profiles for 15 minutes, textures for a day, rendered PNGs for an hour. Plus the headers to rely on, Mojang rate limits and errors.
- Playground: build any of these URLs by clicking.