
Mojang textures for every plugin. Free, forever.
MineSkin without keys or payments. Send a skin, get its texture on textures.minecraft.net. A global cache means every image is uploaded once, ever, for everybody.
Try a Minecraft name to see their skin and the pieces servers generated from it.
Live
- Textures ready
00 - On Mojang, signed or not
- Uploads
00 - Worn by an account of the pool
- Served free
00 - Already on Mojang, or answered from cache
- Accounts
00 - In the pool right now
- In queue
00 - Waiting for an account
- Last hour
00 - Textures made ready
How it works
Cheapest first. An upload is the last resort.
A Minecraft client only draws textures hosted by Mojang, and only an account wearing a skin puts one there. So we avoid uploads wherever we can.
- Instant
1. The global cache
Every texture any server ever asked for answers by hash, without sending a picture. Most requests end here.
- Free
2. Already on Mojang
Mojang names a texture by the hash of its image. If that texture already exists, we store it at once: no account used.
- Last resort
3. Upload
Only a brand new image is worn by an account of the pool. Its texture and signature are kept for everyone after.
Unchanged pieces are shared across skins, qualities and servers: a player who only changes their shoes uploads one or two new pieces, and default Steve and Alex are generated once for every offline server.
For developers
One request. No key, no account.
Send up to 32 skin PNGs at once and get their Mojang textures. Ready ones answer at once; the rest are queued and you poll by hash.
- No API key, no sign-up, no payments.
- Up to 32 images per request, idempotent: sending the same images again queues nothing.
- Ask by hash first: anything ever generated answers without uploading a byte.
- A fair queue, round-robin by requester, so a busy network cannot starve a small server.
curl -X POST https://skins-api.exylia.net/v1/textures \
-H "Content-Type: application/json" \
-H "User-Agent: MyPlugin/1.0" \
-d "{\"images\":[{\"png\":\"$(base64 -w0 skin.png)\"}]}"HttpClient http = HttpClient.newHttpClient();
String png = Base64.getEncoder().encodeToString(Files.readAllBytes(Path.of("skin.png")));
HttpRequest request = HttpRequest.newBuilder(URI.create("https://skins-api.exylia.net/v1/textures"))
.header("Content-Type", "application/json")
.header("User-Agent", "MyPlugin/1.0")
.POST(HttpRequest.BodyPublishers.ofString("{\"images\":[{\"png\":\"" + png + "\"}]}"))
.build();
String body = http.send(request, HttpResponse.BodyHandlers.ofString()).body();
// {"textures":[{"hash":"9f2c…","status":"ready","id":"3b1a…"}]}
// "queued"? Poll GET /v1/textures?hashes=9f2c… after "retryAfter" seconds.Contribute
Lend a Java account. Keep the textures free.
Every account in the pool adds throughput for every server. Sign in with Discord, link an alt with a code at microsoft.com, and it starts uploading.
Lend an account- 1
Sign in at Microsoft with a code
You type a short code at microsoft.com/link. Your password never reaches Exylia.
- 2
Use an alt
While it is in the pool, the account's skin changes constantly. Lend one you do not play on.
- 3
Pause or remove it anytime
From your dashboard. Removing wipes its tokens at once.
- 4
Credit in public
Its uploads and stats show on the public leaderboard, next to your Discord name.
FAQ
Questions
Is it safe to lend an account?
You sign in on Microsoft's own page (microsoft.com/link) with a device code; Exylia never sees your password. We keep only the session tokens Microsoft hands out, encrypted (AES-256-GCM), and use them for one thing: changing the account's skin. You can remove the account anytime, which wipes those tokens.
What happens to the account's skin?
It changes constantly: every upload is the account wearing someone else's skin for a moment. That is why we ask for an alt, not the account you play on.
Can I pause or remove my account?
Yes, anytime, from your dashboard. Paused accounts keep their tokens and can resume with one click; removed accounts have their tokens wiped and keep only their public history.
Is it really free?
Yes. No key, no tiers, no payments. Exylia and the community lend the accounts, and the global cache keeps the work small: each image is uploaded once, ever.
Can it replace MineSkin in my plugin?
For textures, yes: send PNGs, get texture ids and signed values. ExyliaLib already uses it for ragdolls in the player's real skin. See the API docs for the details.
Are there limits?
120 requests a minute per IP and 400 new uploads queued per IP per hour. Anything already generated, by anyone, never counts against the upload cap.