Packs
Change a sound, or choose its take
Changes the fields you send and keeps the rest. Choosing a take is {"take": "2"} sent on its own: that take becomes the audio the pack ships, instantly and for free, and the others stay to choose between. Its label is changed with POST /packs/{pack}/assets/sound/{sound}/rename.
An event that names a vanilla sound (entity.creeper.primed) replaces it in game; any other (custom.laser) is a new one /playsound and RP Engine's /rp sound can play.
/packs/{pack}/sounds/{sound}Path parameters
packstringrequiredThe pack's slug, as returned by the packs endpoints.
soundstringrequiredThe sound's name from the asset listing.
Body
takestringThe take to ship, by its id from takes. Send it alone.
eventstringThe sound event it plays as.
categorystringWhich volume slider in the game's settings controls it.
Options: master, music, record, weather, block, hostile, neutral, player, ambient, voice
subtitlestringmax 80 charactersThe words shown with subtitles on. Empty clears it.
loopbooleanWhether it is meant to loop: a note about what it is, which the Studio's loop tools and a vehicle's sounds read.
Response · 200
Saved. The sound as it now stands.
packstringrequiredThe pack.
soundobjectrequiredThe sound.
idstringrequiredThe sound's id, its name in the asset listing.
namestringrequiredIts label.
eventstringrequiredThe sound event it plays as. A vanilla event is replaced; any other is new.
categorystringrequiredWhich volume slider controls it.
Options: master, music, record, weather, block, hostile, neutral, player, ambient, voice
subtitlestringrequiredIts subtitle. Null when it has none.
durationSecondsnumberrequiredHow long the shipping take is.
loopbooleanrequiredWhether it is meant to loop.
statusstringrequiredgenerating, ready or error.
Options: generating, ready, error
promptstringrequiredWhat it was generated from. Null for an upload.
errorstringrequiredWhy its generation failed. Null unless status is error.
takesarray of objectrequiredEvery candidate, in the order they were made. Empty for a sound older than takes.
idstringrequiredThe take's id within this sound.
durationSecondsnumberrequiredIts length.
createdAtstringrequiredISO 8601.
selectedTakestringrequiredThe take the pack ships. Null for a sound older than takes.
Error codes
Branch on error.code, never on the message.
invalid_json400The request body wasn't a JSON object.
invalid_request400Something in the body or query is wrong. message says what.
invalid_api_key401The key isn't one of ours, or it has been revoked.
missing_api_key401No Authorization: Bearer header was sent.
wrong_key_kind401An MCP key sent to the REST API, or an API key sent to the MCP server. Each only opens its own.
account_suspended403The account is suspended, so its keys open nothing. message says until when, if the suspension has an end date.
forbidden403Valid key, but not permitted to do this in this pack.
plan_required403The key is valid, but its account's plan does not include the API.
not_found404No such pack, asset or job.