Creator Store
assetsSearches Roblox's Creator Store, inspects assets for scripts before inserting, bakes editable meshes, uploads local files, grants permissions, and publishes place files.
Instructions
Searches Roblox's Creator Store and inserts models into the place.
search looks through the same public index Studio's own asset browser uses. It reports script COUNT, triangles, whether the creator is verified, whether the asset is free, and what Roblox thinks it is ("Door/Furniture"). insert puts one into the place by id.
Results are ranked by approval WEIGHTED BY vote count, because the raw percentage lies: 100% from two voters outranks 82% from five thousand unless the count is taken into account. The vote count is shown beside the percentage for the same reason.
Filters — excludeScripts, maxTriangles, verifiedOnly, freeOnly, minVotes — are applied here, not by Roblox, and several pages are fetched to fill the results. Roblox's own sort and creator filters are accepted by the endpoint and silently ignored, so they are not offered.
ALWAYS check hasScripts before inserting. Free models carrying scripts are the oldest hazard on the platform, and a model dropped into someone's game can run whatever it likes. The insert reports the script count again, and names them, so it can still be undone.
peek is the safer half of that: it loads the asset in memory WITHOUT putting it in the place and tells you exactly what is inside — every class, every script by name. Nothing is parented, so there is nothing to undo. Use it whenever hasScripts says YES and the model still looks worth having.
Audio searches take a different path from everything else here. They go to the engine's own audio index, so results carry duration, artist and whether the clip is music or a sound effect — the fields that actually decide which sound you want. They return SOUND EFFECTS by default; pass audioType: "Music" for tracks. Filter with minDuration / maxDuration — a footstep is under a second and a music bed is minutes.
Only public assets can be inserted. A private or deleted id fails with a message saying so rather than inserting nothing quietly.
bake is unrelated to the Creator Store and does not upload anything. It turns EditableMesh and EditableImage data into static content, which frees the editable memory budget and lets a mesh built at runtime replicate from the server down to clients.
READ THIS BEFORE REACHING FOR IT. What it produces is scoped to the data model session it was made in. Baking in edit mode therefore carries NOTHING into a playtest — a playtest is a new data model, and the content reads as empty there. Measured, not assumed. Its real use is against a RUNNING playtest server session: pass that studioId, and baking a mesh the game just built is what lets clients see it.
It does not help generate at all. Generated meshes hold opaque content, which the engine refuses to bake.
THE OTHER DIRECTION: upload sends a local file TO Roblox and gives you the asset id. Audio, an image, a 3D model or a video, picked by extension — .mp3/.ogg/.wav/.flac, .png/.jpg/.bmp/.tga, .fbx/.gltf/.glb, .mp4/.mov. This closes the one hole nothing else here covers: a sound effect sitting in a folder on disk used to need Studio's import dialog before anything could reference it.
Uploads are moderated and count against a real monthly quota. Do not guess what it is — Roblox's own guide and the live API disagree, and the account's verification level changes it. Ask op="quota". Do not upload speculatively, and do not re-upload to retry: the first one probably worked.
grant gives a game or a person permission to use assets you own. You do NOT need this for your own assets in your own game — those always work. It is for a collaborator's place, or a group game you do not own. A grant to a game is PERMANENT; Roblox provides no way to revoke one, so it needs confirm: true.
publish sends a .rbxl or .rbxlx from disk to a place. It SAVES a new version by default and only goes live with confirm: true. Note a real limitation: Roblox's publishing API does not update EditableImage, EditableMesh, PartOperation, SurfaceAppearance or BaseWrap instances, and reports success anyway — publish from Studio if the place uses any of those.
Publishing alone does NOT move anyone already playing — they stay on their server running the old code until it empties. Pass restart: true to roll live servers onto the new version, which bleeds them off over 10 minutes rather than dropping players.
quota reports how many uploads are left before Roblox starts refusing them, per asset type, read from the account itself. Check it before a batch rather than discovering the ceiling halfway through.
All of these need an Open Cloud API key. The user sets it once by typing cloud in the Studio panel; never ask them to paste a key into this conversation.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | 'search' finds assets, 'peek' shows what is inside one without inserting it, 'insert' adds one to the place, 'bake' makes in-memory mesh and image data replicate, 'upload' sends a local file to Roblox, 'grant' shares one you own with another game or person, 'publish' pushes a place file live. | |
| file | No | upload/publish: path to the file on disk. Omit on `upload` to check whether the credentials are set up without sending anything. | |
| name | No | insert only: rename it on the way in. | |
| limit | No | search only: how many results. | |
| paths | No | bake only: MeshParts to convert, or models containing them. | |
| parent | No | insert only: where to put it. Defaults to Workspace. | |
| assetId | No | insert and peek only: the asset id. | |
| confirm | No | Required to make a `publish` go live rather than only save, and required for `grant`, whose effect Roblox cannot undo. | |
| keyword | No | search only: what to look for, e.g. "medieval door". | |
| placeId | No | publish only: which place. Omit to use `cloud place`. | |
| restart | No | publish only: also roll live servers onto the new version. Without this, players already in a server keep running the old code until it empties. | |
| assetIds | No | grant only: the assets to share. You must own them. | |
| category | No | search only: what kind of asset. Only models insert as instances. | model |
| freeOnly | No | search only: drop paid assets, which cannot just be inserted. | |
| insertAs | No | upload only: put the finished asset in the place at this parent path once it is approved. Decals and Models only — an audio id belongs in an AudioPlayer, so use `audio op="graph"` with the id this returns. | |
| minVotes | No | search only: require at least this many votes. Filters out models with a perfect score from three people. | |
| position | No | insert only: where to place it, e.g. "0, 10, 0". Defaults to wherever it was saved. | |
| studioId | No | Target Studio; omit for the active one. | |
| assetType | No | upload only: override the type derived from the extension. Rarely right — Roblox validates the type against the file's real content. | |
| audioType | No | audio search only. Defaults to SoundEffect, which is what a noise in a game is. Ask for "Music" only when you want a track — the engine's own default is Music, and it makes "footstep" return three-minute ambient songs with footsteps in the title. | SoundEffect |
| subjectId | No | grant only: the universe, user or group id. Omit for a Universe grant to use the one set with `cloud universe <id>`. | |
| universeId | No | publish only: which game. Omit to use `cloud universe`. | |
| description | No | upload only: public description. Moderated. | |
| maxDuration | No | audio search only: longest clip to return, in seconds. Set it to 3 or so for effects — otherwise full-length music dominates the results. | |
| minDuration | No | audio search only: shortest clip to return, in seconds. | |
| subjectType | No | grant only: who gets access. 'Universe' is a game and is the usual one. Defaults to 'Universe'. | |
| maxTriangles | No | search only: drop models heavier than this. A prop you place fifty times wants to be in the hundreds, not the tens of thousands. | |
| stripScripts | No | insert only: delete every Script, LocalScript and ModuleScript from the asset on the way in. The safe way to take geometry from a free model without taking whatever its scripts do. | |
| verifiedOnly | No | search only: only results from verified creators. | |
| excludeScripts | No | search only: drop every result that contains scripts. The single safest filter — a free model's scripts run with your game's full permissions. |