resourcepack.ai
DOCS

Uploading

Import a resource pack

A resource pack .zip — yours, or one from anywhere — as a new pack: the Studio's Import button. It always creates a pack, named after the zip unless you give name, at the Minecraft version its pack.mcmeta declares unless you give minecraftVersion. Free.

Send the zip as an upload (see POST /uploads) unless it's small. A file that isn't a resource pack at all — a shaderpack, a .rar, a zip with nothing a pack can hold — is refused with not_a_pack before any pack is created.

This returns as soon as the pack exists; the import runs after. Poll job (<pack>:import) at GET /jobs/{job} until it leaves generating — a large pack takes a few minutes. The finished job carries import: what came in, per kind; what was left out and why (entity art, shaders and anything else a pack here can't hold, as the Studio's review screen lists it); and any asset that failed to land.

Block and item textures, models, font glyphs, GUI sheets and sounds come in. Version overlays are read for the pack's version.

POST/imports

Body

fileobjectrequired

The .zip. Exactly one of upload, url, base64 or text.

uploadstring

The upload id from POST /uploads, after PUTting the file to its URL. The way to send anything big, or anything already on disk.

urlstring

A public https URL to fetch the file from.

base64string

The file's bytes as base64 (a data: URI is fine). Up to 8MB.

textstring

The file as text, for formats that are text (model JSON, .bbmodel). Up to 8MB.

namestringmax 100 characters

The new pack's name. Defaults to the zip's.

minecraftVersionstring

Build the pack for this version instead of the one its pack.mcmeta declares.

Response · 202

The pack exists and the import has started.

packobjectrequired

The new pack.

slugstringrequired

The pack's id. Every other path takes this.

namestringrequired

Its display name.

minecraftVersionstringrequired

The version the pack is authored against.

rolestringrequired

Whether this key's owner owns the pack or was added to it.

Options: owner, collaborator

createdAtstringrequired

ISO 8601.

updatedAtstringrequired

ISO 8601.

assetCountsobjectrequired

How much the pack holds, by kind.

texturesintegerrequired

Block textures, item sprites and GUI sheets.

modelsintegerrequired

3D models.

iconsintegerrequired

Font glyphs.

soundsintegerrequired

Sound events.

jobstringrequired

Poll this at GET /jobs/{job} until it leaves generating.

statusstringrequired

Always generating.

minecraftVersionstringrequired

The version the pack was created at.

versionSourcestringrequired

Where that version came from.

Options: pack.mcmeta, default

plannedobjectrequired

What the import will bring in, per kind: textures, models, glyphs, guis, sounds.

skippedarray of objectrequired

What won't come in, grouped by why.

warningsarray of stringrequired

Notes about the pack as a whole.

Error codes

Branch on error.code, never on the message.

file_fetch_failed400

A file given by url couldn't be downloaded.

invalid_request400

Something in the body or query is wrong. message says what.

not_a_pack400

An import's file isn't a resource pack, or holds nothing a pack here can use. message says which.

invalid_api_key401

The key isn't one of ours, or it has been revoked.

missing_api_key401

No Authorization: Bearer header was sent.

wrong_key_kind401

An MCP key sent to the REST API, or an API key sent to the MCP server. Each only opens its own.

forbidden403

Valid key, but not permitted to do this in this pack.

pack_limit_reached403

The account is at its plan's pack limit.

plan_required403

The key is valid, but its account is on Starter. The API needs a paid plan.

not_found404

No such pack, asset or job.

upload_not_found404

No upload by that id. Uploads expire after fifteen minutes and are used once.

file_too_large413

The file is over the limit for what it's being used as. message says the limit.