Getting started
Quickstart
From a new sandbox key to a release on its way to the stores, in five steps.
On this page
Everything here runs in the sandbox, where nothing is real: nothing reaches review, the stores or anyone's inbox.
1. Make a sandbox key#
In Workspace › API, open Keys and make a key with the Sandbox switch on. Give it the scopes releases:write and releases:submit. The key starts with sm_test_ and is shown once: keep it in your server's secrets.
2. Check the key#
GET /me says which organization and key a call acts for.
curl https://api.stillmoregroup.com/api/v1/me \
-H "Authorization: Bearer $STILLMORE_API_KEY"3. Create an artist and a release#
A release needs at least one primary artist. Create the artist, then the release with its tracks in one call. Send an Idempotency-Key on every write: a retry with the same key never does the work twice.
curl https://api.stillmoregroup.com/api/v1/artists \
-H "Authorization: Bearer $STILLMORE_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"name":"June Hale"}'
curl https://api.stillmoregroup.com/api/v1/releases \
-H "Authorization: Bearer $STILLMORE_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"title":"Night Signals","type":"SINGLE","primaryArtistIds":["<artist id>"],"primaryGenre":"Pop","language":"en","tracks":[{"title":"Night Signals"}]}'4. Upload the cover and the master#
Each file goes in three moves: ask for an upload address, PUT the bytes there, then say it is done. Covers are square JPEG or PNG, exactly 3000 × 3000 pixels, in RGB; masters are WAV or FLAC. Files you already host can be fetched from a link instead (…/artwork/import, …/audio/import).
# 1. An upload address for the cover
curl https://api.stillmoregroup.com/api/v1/releases/<release id>/artwork \
-H "Authorization: Bearer $STILLMORE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"fileName":"cover.jpg","contentType":"image/jpeg","sizeBytes":2483117}'
# 2. PUT the file to uploadUrl, with the headers the answer lists
curl -X PUT "<uploadUrl>" -H "Content-Type: image/jpeg" --data-binary @cover.jpg
# 3. Done
curl https://api.stillmoregroup.com/api/v1/releases/<release id>/artwork/complete \
-H "Authorization: Bearer $STILLMORE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"uploadId":"<uploadId>"}'5. Check and submit#
GET /releases/{id}/checks lists what review would flag before you submit: submittable says nothing stops a submission, clean that nothing would hold back an automatic approval. Then submit: the release joins the review queue exactly as one submitted in the workspace does.
curl https://api.stillmoregroup.com/api/v1/releases/<release id>/checks -H "Authorization: Bearer $STILLMORE_API_KEY"
curl https://api.stillmoregroup.com/api/v1/releases/<release id>/submit \
-H "Authorization: Bearer $STILLMORE_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{}'In the sandbox, play review and the stores yourself: POST /sandbox/releases/{id}/review with { "decision": "APPROVE" }, then POST /sandbox/releases/{id}/deliver. Each step raises the same webhooks the real ones do. When it all works, make a live key with only the scopes your system needs, and switch.