Skip to content

API reference

Tracks

Tracks on a release, their order and their details.

On this page

Base address https://api.stillmoregroup.com/api/v1. Every answer is JSON; errors have one shape.

EndpointWhat it does
GET /tracksFind tracks
GET /releases/{releaseId}/tracksA release's tracklist
POST /releases/{releaseId}/tracksAdd a track
PUT /releases/{releaseId}/tracks/orderReorder the tracklist
GET /tracks/{trackId}Read a track
PATCH /tracks/{trackId}Change a track
DELETE /tracks/{trackId}Remove a track

Find tracks#

GET /tracks · scope releases:read

Across the organization, newest first: by ISRC, by your externalId, or every track changed since a time.

Query parameters#

limitinteger
From 1 to 100. Default 25.
cursorstring
nextCursor from the previous page. Up to 200 characters.
externalIdstring
Your own identifier for this record, unique within the organization. 1 to 100 characters.
isrcstring
Up to 20 characters.

Headers#

Stillmore-Organization
A sub-label to act for, when the key may (see Sub-labels).

Example request#

curl "https://api.stillmoregroup.com/api/v1/tracks?limit=25" \
  -H "Authorization: Bearer $STILLMORE_API_KEY"

Response 200#

A page: data holds the items below, hasMore says whether another page follows, and nextCursor is the cursor for it.

idstring
releaseIdstring
positioninteger
From -9007199254740991 to 9007199254740991.
titlestring
versionTitlestring or null
primaryArtistIdsstring[]
featuredArtistIdsstring[]
explicitboolean
Show 27 more fields
isCoverboolean
languagestring or null
isrcstring or null
lyricsstring or null
creditsobject
credits.songwritersstring[]
credits.composersstring[]
credits.producersstring[]
credits.publishersstring[]
credits.mixersstring[]
credits.masteringEngineersstring[]
credits.remixersstring[]
audioobject or null
The master; null until one is uploaded.
audio.statusstring
One of PENDING_UPLOAD, UPLOADED, VERIFIED, FAILED, DELETED.
audio.fileNamestring or null
audio.mimeTypestring or null
audio.sizeBytesnumber or null
audio.uploadedAtstring or null
ISO 8601 timestamp in UTC.
audio.durationSecondsnumber or null
audio.sampleRatenumber or null
audio.bitDepthnumber or null
audio.channelsnumber or null
externalIdstring or null
Your own id for it, when you set one.
metadatamap of string
Your own keys and values, as you sent them.
createdAtstring
ISO 8601 timestamp in UTC.
updatedAtstring
ISO 8601 timestamp in UTC.
revisionstring
Changes whenever the record does; send it back in If-Match to refuse an update when someone else changed it first.
Example response
{
  "data": [
    {
      "id": "6731c2a1b3c4d5e6f7a8b9c0",
      "releaseId": "6731c2a1b3c4d5e6f7a8b9c0",
      "position": 1,
      "title": "Night Signals",
      "versionTitle": "Radio Edit",
      "primaryArtistIds": [
        "6731c2a1b3c4d5e6f7a8b9c0"
      ],
      "featuredArtistIds": [
        "6731c2a1b3c4d5e6f7a8b9c0"
      ],
      "explicit": false,
      "isCover": false,
      "language": "en",
      "isrc": "GBXYZ2600001",
      "lyrics": "…",
      "credits": {
        "songwriters": [
          "…"
        ],
        "composers": [
          "…"
        ],
        "producers": [
          "…"
        ],
        "publishers": [
          "…"
        ],
        "mixers": [
          "…"
        ],
        "masteringEngineers": [
          "…"
        ],
        "remixers": [
          "…"
        ]
      },
      "audio": {
        "status": "PENDING_UPLOAD",
        "fileName": "cover.jpg",
        "mimeType": "…",
        "sizeBytes": 2483117,
        "uploadedAt": "2026-11-01T09:30:00.000Z",
        "durationSeconds": 214,
        "sampleRate": 1,
        "bitDepth": 1,
        "channels": 1
      },
      "externalId": "6731c2a1b3c4d5e6f7a8b9c0",
      "metadata": {
        "catalogueId": "1042"
      },
      "createdAt": "2026-11-01T09:30:00.000Z",
      "updatedAt": "2026-11-01T09:30:00.000Z",
      "revision": "…"
    }
  ],
  "hasMore": false,
  "nextCursor": null
}

A release's tracklist#

GET /releases/{releaseId}/tracks · scope releases:read

Every track, in order (not paged).

Path parameters#

releaseIdstring
An id.

Headers#

Stillmore-Organization
A sub-label to act for, when the key may (see Sub-labels).

Example request#

curl "https://api.stillmoregroup.com/api/v1/releases/{releaseId}/tracks" \
  -H "Authorization: Bearer $STILLMORE_API_KEY"

Response 200#

A page: data holds the items below, hasMore says whether another page follows, and nextCursor is the cursor for it.

idstring
releaseIdstring
positioninteger
From -9007199254740991 to 9007199254740991.
titlestring
versionTitlestring or null
primaryArtistIdsstring[]
featuredArtistIdsstring[]
explicitboolean
Show 27 more fields
isCoverboolean
languagestring or null
isrcstring or null
lyricsstring or null
creditsobject
credits.songwritersstring[]
credits.composersstring[]
credits.producersstring[]
credits.publishersstring[]
credits.mixersstring[]
credits.masteringEngineersstring[]
credits.remixersstring[]
audioobject or null
The master; null until one is uploaded.
audio.statusstring
One of PENDING_UPLOAD, UPLOADED, VERIFIED, FAILED, DELETED.
audio.fileNamestring or null
audio.mimeTypestring or null
audio.sizeBytesnumber or null
audio.uploadedAtstring or null
ISO 8601 timestamp in UTC.
audio.durationSecondsnumber or null
audio.sampleRatenumber or null
audio.bitDepthnumber or null
audio.channelsnumber or null
externalIdstring or null
Your own id for it, when you set one.
metadatamap of string
Your own keys and values, as you sent them.
createdAtstring
ISO 8601 timestamp in UTC.
updatedAtstring
ISO 8601 timestamp in UTC.
revisionstring
Changes whenever the record does; send it back in If-Match to refuse an update when someone else changed it first.
Example response
{
  "data": [
    {
      "id": "6731c2a1b3c4d5e6f7a8b9c0",
      "releaseId": "6731c2a1b3c4d5e6f7a8b9c0",
      "position": 1,
      "title": "Night Signals",
      "versionTitle": "Radio Edit",
      "primaryArtistIds": [
        "6731c2a1b3c4d5e6f7a8b9c0"
      ],
      "featuredArtistIds": [
        "6731c2a1b3c4d5e6f7a8b9c0"
      ],
      "explicit": false,
      "isCover": false,
      "language": "en",
      "isrc": "GBXYZ2600001",
      "lyrics": "…",
      "credits": {
        "songwriters": [
          "…"
        ],
        "composers": [
          "…"
        ],
        "producers": [
          "…"
        ],
        "publishers": [
          "…"
        ],
        "mixers": [
          "…"
        ],
        "masteringEngineers": [
          "…"
        ],
        "remixers": [
          "…"
        ]
      },
      "audio": {
        "status": "PENDING_UPLOAD",
        "fileName": "cover.jpg",
        "mimeType": "…",
        "sizeBytes": 2483117,
        "uploadedAt": "2026-11-01T09:30:00.000Z",
        "durationSeconds": 214,
        "sampleRate": 1,
        "bitDepth": 1,
        "channels": 1
      },
      "externalId": "6731c2a1b3c4d5e6f7a8b9c0",
      "metadata": {
        "catalogueId": "1042"
      },
      "createdAt": "2026-11-01T09:30:00.000Z",
      "updatedAt": "2026-11-01T09:30:00.000Z",
      "revision": "…"
    }
  ],
  "hasMore": false,
  "nextCursor": null
}

Errors#

CodeWhat it means
RELEASE_NOT_FOUNDFrom the workspace rule behind this endpoint; message says what to change.

Every endpoint can also give the errors every call can give, such as VALIDATION_ERROR, INSUFFICIENT_SCOPE and RATE_LIMITED.

Add a track#

POST /releases/{releaseId}/tracks · scope releases:write

At the end of the tracklist, or at position (the tracks from there move down). Primary artists default to the release's.

Path parameters#

releaseIdstring
An id.

Body#

titlestringRequired
1 to 180 characters.
versionTitlestring
Up to 120 characters.
primaryArtistIdsstring[]
Up to 20 items.
featuredArtistIdsstring[]
Up to 20 items.
explicitboolean
Explicit lyrics or content; new releases and tracks start with false.
isCoverboolean
Someone else's song: it needs a cover licence before delivery.
languagestring
An ISO 639-1 code ("en") or a language name from GET /v1/reference.
isrcstring
Your own ISRC, when the recording already has one; otherwise one is assigned when the release is submitted or delivered.
lyricsstring
Up to 20000 characters.
creditsobject
The people behind the track, as lists of names by role.
credits.songwritersstring[]
Up to 30 items.
credits.composersstring[]
Up to 30 items.
credits.producersstring[]
Up to 30 items.
credits.publishersstring[]
Up to 30 items.
credits.mixersstring[]
Up to 30 items.
credits.masteringEngineersstring[]
Up to 30 items.
credits.remixersstring[]
Up to 30 items.
externalIdstring
Your own identifier for this record, unique within the organization. 1 to 100 characters.
metadatamap of string
Key-value pairs you attach for your own use.
positioninteger
Where the track goes; the end of the tracklist by default. From 1 to 500.

Headers#

Idempotency-Key
Any unique value, such as a UUID: a retry with the same key and body gets the first answer again for 24 hours.
Stillmore-Organization
A sub-label to act for, when the key may (see Sub-labels).

Example request#

curl -X POST "https://api.stillmoregroup.com/api/v1/releases/{releaseId}/tracks" \
  -H "Authorization: Bearer $STILLMORE_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Night Signals",
    "explicit": false,
    "language": "en",
    "isrc": "GBXYZ2600001"
  }'

Response 201#

data holds the object below.

idstring
releaseIdstring
positioninteger
From -9007199254740991 to 9007199254740991.
titlestring
versionTitlestring or null
primaryArtistIdsstring[]
featuredArtistIdsstring[]
explicitboolean
Show 27 more fields
isCoverboolean
languagestring or null
isrcstring or null
lyricsstring or null
creditsobject
credits.songwritersstring[]
credits.composersstring[]
credits.producersstring[]
credits.publishersstring[]
credits.mixersstring[]
credits.masteringEngineersstring[]
credits.remixersstring[]
audioobject or null
The master; null until one is uploaded.
audio.statusstring
One of PENDING_UPLOAD, UPLOADED, VERIFIED, FAILED, DELETED.
audio.fileNamestring or null
audio.mimeTypestring or null
audio.sizeBytesnumber or null
audio.uploadedAtstring or null
ISO 8601 timestamp in UTC.
audio.durationSecondsnumber or null
audio.sampleRatenumber or null
audio.bitDepthnumber or null
audio.channelsnumber or null
externalIdstring or null
Your own id for it, when you set one.
metadatamap of string
Your own keys and values, as you sent them.
createdAtstring
ISO 8601 timestamp in UTC.
updatedAtstring
ISO 8601 timestamp in UTC.
revisionstring
Changes whenever the record does; send it back in If-Match to refuse an update when someone else changed it first.
Example response
{
  "data": {
    "id": "6731c2a1b3c4d5e6f7a8b9c0",
    "releaseId": "6731c2a1b3c4d5e6f7a8b9c0",
    "position": 1,
    "title": "Night Signals",
    "versionTitle": "Radio Edit",
    "primaryArtistIds": [
      "6731c2a1b3c4d5e6f7a8b9c0"
    ],
    "featuredArtistIds": [
      "6731c2a1b3c4d5e6f7a8b9c0"
    ],
    "explicit": false,
    "isCover": false,
    "language": "en",
    "isrc": "GBXYZ2600001",
    "lyrics": "…",
    "credits": {
      "songwriters": [
        "…"
      ],
      "composers": [
        "…"
      ],
      "producers": [
        "…"
      ],
      "publishers": [
        "…"
      ],
      "mixers": [
        "…"
      ],
      "masteringEngineers": [
        "…"
      ],
      "remixers": [
        "…"
      ]
    },
    "audio": {
      "status": "PENDING_UPLOAD",
      "fileName": "cover.jpg",
      "mimeType": "…",
      "sizeBytes": 2483117,
      "uploadedAt": "2026-11-01T09:30:00.000Z",
      "durationSeconds": 214,
      "sampleRate": 1,
      "bitDepth": 1,
      "channels": 1
    },
    "externalId": "6731c2a1b3c4d5e6f7a8b9c0",
    "metadata": {
      "catalogueId": "1042"
    },
    "createdAt": "2026-11-01T09:30:00.000Z",
    "updatedAt": "2026-11-01T09:30:00.000Z",
    "revision": "…"
  }
}

Errors#

CodeWhat it means
RELEASE_NOT_FOUNDFrom the workspace rule behind this endpoint; message says what to change.
RELEASE_NOT_EDITABLEFrom the workspace rule behind this endpoint; message says what to change.
RELEASE_SINGLE_TRACK_LIMITFrom the workspace rule behind this endpoint; message says what to change.
LABEL_TRACK_LIMIT_REACHEDFrom the workspace rule behind this endpoint; message says what to change.
EXTERNAL_ID_IN_USEAnother record of the same kind in your organization already has this externalId.

Every endpoint can also give the errors every call can give, such as VALIDATION_ERROR, INSUFFICIENT_SCOPE and RATE_LIMITED.

Reorder the tracklist#

PUT /releases/{releaseId}/tracks/order · scope releases:write

Path parameters#

releaseIdstring
An id.

Body#

trackIdsstring[]Required
Every track of the release, in the new order. 1 to 500 items.

Headers#

Idempotency-Key
Any unique value, such as a UUID: a retry with the same key and body gets the first answer again for 24 hours.
Stillmore-Organization
A sub-label to act for, when the key may (see Sub-labels).

Example request#

curl -X PUT "https://api.stillmoregroup.com/api/v1/releases/{releaseId}/tracks/order" \
  -H "Authorization: Bearer $STILLMORE_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "trackIds": [
      "6731c2a1b3c4d5e6f7a8b9c0"
    ]
  }'

Response 200#

A page: data holds the items below, hasMore says whether another page follows, and nextCursor is the cursor for it.

idstring
releaseIdstring
positioninteger
From -9007199254740991 to 9007199254740991.
titlestring
versionTitlestring or null
primaryArtistIdsstring[]
featuredArtistIdsstring[]
explicitboolean
Show 27 more fields
isCoverboolean
languagestring or null
isrcstring or null
lyricsstring or null
creditsobject
credits.songwritersstring[]
credits.composersstring[]
credits.producersstring[]
credits.publishersstring[]
credits.mixersstring[]
credits.masteringEngineersstring[]
credits.remixersstring[]
audioobject or null
The master; null until one is uploaded.
audio.statusstring
One of PENDING_UPLOAD, UPLOADED, VERIFIED, FAILED, DELETED.
audio.fileNamestring or null
audio.mimeTypestring or null
audio.sizeBytesnumber or null
audio.uploadedAtstring or null
ISO 8601 timestamp in UTC.
audio.durationSecondsnumber or null
audio.sampleRatenumber or null
audio.bitDepthnumber or null
audio.channelsnumber or null
externalIdstring or null
Your own id for it, when you set one.
metadatamap of string
Your own keys and values, as you sent them.
createdAtstring
ISO 8601 timestamp in UTC.
updatedAtstring
ISO 8601 timestamp in UTC.
revisionstring
Changes whenever the record does; send it back in If-Match to refuse an update when someone else changed it first.
Example response
{
  "data": [
    {
      "id": "6731c2a1b3c4d5e6f7a8b9c0",
      "releaseId": "6731c2a1b3c4d5e6f7a8b9c0",
      "position": 1,
      "title": "Night Signals",
      "versionTitle": "Radio Edit",
      "primaryArtistIds": [
        "6731c2a1b3c4d5e6f7a8b9c0"
      ],
      "featuredArtistIds": [
        "6731c2a1b3c4d5e6f7a8b9c0"
      ],
      "explicit": false,
      "isCover": false,
      "language": "en",
      "isrc": "GBXYZ2600001",
      "lyrics": "…",
      "credits": {
        "songwriters": [
          "…"
        ],
        "composers": [
          "…"
        ],
        "producers": [
          "…"
        ],
        "publishers": [
          "…"
        ],
        "mixers": [
          "…"
        ],
        "masteringEngineers": [
          "…"
        ],
        "remixers": [
          "…"
        ]
      },
      "audio": {
        "status": "PENDING_UPLOAD",
        "fileName": "cover.jpg",
        "mimeType": "…",
        "sizeBytes": 2483117,
        "uploadedAt": "2026-11-01T09:30:00.000Z",
        "durationSeconds": 214,
        "sampleRate": 1,
        "bitDepth": 1,
        "channels": 1
      },
      "externalId": "6731c2a1b3c4d5e6f7a8b9c0",
      "metadata": {
        "catalogueId": "1042"
      },
      "createdAt": "2026-11-01T09:30:00.000Z",
      "updatedAt": "2026-11-01T09:30:00.000Z",
      "revision": "…"
    }
  ],
  "hasMore": false,
  "nextCursor": null
}

Errors#

CodeWhat it means
RELEASE_NOT_FOUNDFrom the workspace rule behind this endpoint; message says what to change.
INVALID_TRACK_REORDERFrom the workspace rule behind this endpoint; message says what to change.

Every endpoint can also give the errors every call can give, such as VALIDATION_ERROR, INSUFFICIENT_SCOPE and RATE_LIMITED.

Read a track#

GET /tracks/{trackId} · scope releases:read

Path parameters#

trackIdstring
An id.

Headers#

Stillmore-Organization
A sub-label to act for, when the key may (see Sub-labels).

Example request#

curl "https://api.stillmoregroup.com/api/v1/tracks/{trackId}" \
  -H "Authorization: Bearer $STILLMORE_API_KEY"

Response 200#

data holds the object below.

idstring
releaseIdstring
positioninteger
From -9007199254740991 to 9007199254740991.
titlestring
versionTitlestring or null
primaryArtistIdsstring[]
featuredArtistIdsstring[]
explicitboolean
Show 27 more fields
isCoverboolean
languagestring or null
isrcstring or null
lyricsstring or null
creditsobject
credits.songwritersstring[]
credits.composersstring[]
credits.producersstring[]
credits.publishersstring[]
credits.mixersstring[]
credits.masteringEngineersstring[]
credits.remixersstring[]
audioobject or null
The master; null until one is uploaded.
audio.statusstring
One of PENDING_UPLOAD, UPLOADED, VERIFIED, FAILED, DELETED.
audio.fileNamestring or null
audio.mimeTypestring or null
audio.sizeBytesnumber or null
audio.uploadedAtstring or null
ISO 8601 timestamp in UTC.
audio.durationSecondsnumber or null
audio.sampleRatenumber or null
audio.bitDepthnumber or null
audio.channelsnumber or null
externalIdstring or null
Your own id for it, when you set one.
metadatamap of string
Your own keys and values, as you sent them.
createdAtstring
ISO 8601 timestamp in UTC.
updatedAtstring
ISO 8601 timestamp in UTC.
revisionstring
Changes whenever the record does; send it back in If-Match to refuse an update when someone else changed it first.
Example response
{
  "data": {
    "id": "6731c2a1b3c4d5e6f7a8b9c0",
    "releaseId": "6731c2a1b3c4d5e6f7a8b9c0",
    "position": 1,
    "title": "Night Signals",
    "versionTitle": "Radio Edit",
    "primaryArtistIds": [
      "6731c2a1b3c4d5e6f7a8b9c0"
    ],
    "featuredArtistIds": [
      "6731c2a1b3c4d5e6f7a8b9c0"
    ],
    "explicit": false,
    "isCover": false,
    "language": "en",
    "isrc": "GBXYZ2600001",
    "lyrics": "…",
    "credits": {
      "songwriters": [
        "…"
      ],
      "composers": [
        "…"
      ],
      "producers": [
        "…"
      ],
      "publishers": [
        "…"
      ],
      "mixers": [
        "…"
      ],
      "masteringEngineers": [
        "…"
      ],
      "remixers": [
        "…"
      ]
    },
    "audio": {
      "status": "PENDING_UPLOAD",
      "fileName": "cover.jpg",
      "mimeType": "…",
      "sizeBytes": 2483117,
      "uploadedAt": "2026-11-01T09:30:00.000Z",
      "durationSeconds": 214,
      "sampleRate": 1,
      "bitDepth": 1,
      "channels": 1
    },
    "externalId": "6731c2a1b3c4d5e6f7a8b9c0",
    "metadata": {
      "catalogueId": "1042"
    },
    "createdAt": "2026-11-01T09:30:00.000Z",
    "updatedAt": "2026-11-01T09:30:00.000Z",
    "revision": "…"
  }
}

Errors#

CodeWhat it means
TRACK_NOT_FOUNDFrom the workspace rule behind this endpoint; message says what to change.

Every endpoint can also give the errors every call can give, such as VALIDATION_ERROR, INSUFFICIENT_SCOPE and RATE_LIMITED.

Change a track#

PATCH /tracks/{trackId} · scope releases:write

Path parameters#

trackIdstring
An id.

Body#

titlestring
1 to 180 characters.
versionTitlestring or null
Up to 120 characters.
primaryArtistIdsstring[]
Up to 20 items.
featuredArtistIdsstring[]
Up to 20 items.
explicitboolean
Explicit lyrics or content; new releases and tracks start with false.
isCoverboolean
Someone else's song: it needs a cover licence before delivery.
languagestring
An ISO 639-1 code ("en") or a language name from GET /v1/reference.
isrcstring or null
Your own ISRC, when the recording already has one; otherwise one is assigned when the release is submitted or delivered.
lyricsstring or null
Up to 20000 characters.
creditsobject
The people behind the track, as lists of names by role.
credits.songwritersstring[]
Up to 30 items.
credits.composersstring[]
Up to 30 items.
credits.producersstring[]
Up to 30 items.
credits.publishersstring[]
Up to 30 items.
credits.mixersstring[]
Up to 30 items.
credits.masteringEngineersstring[]
Up to 30 items.
credits.remixersstring[]
Up to 30 items.
externalIdstring or null
Your own identifier for this record, unique within the organization. 1 to 100 characters.
metadatamap of string
Key-value pairs you attach for your own use.

Headers#

Idempotency-Key
Any unique value, such as a UUID: a retry with the same key and body gets the first answer again for 24 hours.
If-Match
The revision you read; when the object changed since, the answer is 412 REVISION_MISMATCH.
Stillmore-Organization
A sub-label to act for, when the key may (see Sub-labels).

Example request#

curl -X PATCH "https://api.stillmoregroup.com/api/v1/tracks/{trackId}" \
  -H "Authorization: Bearer $STILLMORE_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "explicit": false,
    "language": "en",
    "isrc": "GBXYZ2600001"
  }'

Response 200#

data holds the object below.

idstring
releaseIdstring
positioninteger
From -9007199254740991 to 9007199254740991.
titlestring
versionTitlestring or null
primaryArtistIdsstring[]
featuredArtistIdsstring[]
explicitboolean
Show 27 more fields
isCoverboolean
languagestring or null
isrcstring or null
lyricsstring or null
creditsobject
credits.songwritersstring[]
credits.composersstring[]
credits.producersstring[]
credits.publishersstring[]
credits.mixersstring[]
credits.masteringEngineersstring[]
credits.remixersstring[]
audioobject or null
The master; null until one is uploaded.
audio.statusstring
One of PENDING_UPLOAD, UPLOADED, VERIFIED, FAILED, DELETED.
audio.fileNamestring or null
audio.mimeTypestring or null
audio.sizeBytesnumber or null
audio.uploadedAtstring or null
ISO 8601 timestamp in UTC.
audio.durationSecondsnumber or null
audio.sampleRatenumber or null
audio.bitDepthnumber or null
audio.channelsnumber or null
externalIdstring or null
Your own id for it, when you set one.
metadatamap of string
Your own keys and values, as you sent them.
createdAtstring
ISO 8601 timestamp in UTC.
updatedAtstring
ISO 8601 timestamp in UTC.
revisionstring
Changes whenever the record does; send it back in If-Match to refuse an update when someone else changed it first.
Example response
{
  "data": {
    "id": "6731c2a1b3c4d5e6f7a8b9c0",
    "releaseId": "6731c2a1b3c4d5e6f7a8b9c0",
    "position": 1,
    "title": "Night Signals",
    "versionTitle": "Radio Edit",
    "primaryArtistIds": [
      "6731c2a1b3c4d5e6f7a8b9c0"
    ],
    "featuredArtistIds": [
      "6731c2a1b3c4d5e6f7a8b9c0"
    ],
    "explicit": false,
    "isCover": false,
    "language": "en",
    "isrc": "GBXYZ2600001",
    "lyrics": "…",
    "credits": {
      "songwriters": [
        "…"
      ],
      "composers": [
        "…"
      ],
      "producers": [
        "…"
      ],
      "publishers": [
        "…"
      ],
      "mixers": [
        "…"
      ],
      "masteringEngineers": [
        "…"
      ],
      "remixers": [
        "…"
      ]
    },
    "audio": {
      "status": "PENDING_UPLOAD",
      "fileName": "cover.jpg",
      "mimeType": "…",
      "sizeBytes": 2483117,
      "uploadedAt": "2026-11-01T09:30:00.000Z",
      "durationSeconds": 214,
      "sampleRate": 1,
      "bitDepth": 1,
      "channels": 1
    },
    "externalId": "6731c2a1b3c4d5e6f7a8b9c0",
    "metadata": {
      "catalogueId": "1042"
    },
    "createdAt": "2026-11-01T09:30:00.000Z",
    "updatedAt": "2026-11-01T09:30:00.000Z",
    "revision": "…"
  }
}

Errors#

CodeWhat it means
TRACK_NOT_FOUNDFrom the workspace rule behind this endpoint; message says what to change.
RELEASE_NOT_EDITABLEFrom the workspace rule behind this endpoint; message says what to change.
REVISION_MISMATCHThe record changed since you read it (If-Match). Read it again and retry.

Every endpoint can also give the errors every call can give, such as VALIDATION_ERROR, INSUFFICIENT_SCOPE and RATE_LIMITED.

Remove a track#

DELETE /tracks/{trackId} · scope releases:write

The tracks after it move up.

Path parameters#

trackIdstring
An id.

Headers#

Stillmore-Organization
A sub-label to act for, when the key may (see Sub-labels).

Example request#

curl -X DELETE "https://api.stillmoregroup.com/api/v1/tracks/{trackId}" \
  -H "Authorization: Bearer $STILLMORE_API_KEY"

Response 200#

data holds the object below.

idstring
deletedtrue
Example response
{
  "data": {
    "id": "6731c2a1b3c4d5e6f7a8b9c0",
    "deleted": true
  }
}

Errors#

CodeWhat it means
TRACK_NOT_FOUNDFrom the workspace rule behind this endpoint; message says what to change.
RELEASE_NOT_EDITABLEFrom the workspace rule behind this endpoint; message says what to change.

Every endpoint can also give the errors every call can give, such as VALIDATION_ERROR, INSUFFICIENT_SCOPE and RATE_LIMITED.