API reference
Labels
The labels releases come out under.
Base address https://api.stillmoregroup.com/api/v1. Every answer is JSON; errors have one shape.
| Endpoint | What it does |
|---|---|
GET /labels | List labels |
POST /labels | Create a label or imprint |
GET /labels/{labelId} | Read a label |
PATCH /labels/{labelId} | Change a label |
List labels#
GET /labels · scope labels:read
Query parameters#
limitinteger- From 1 to 100. Default
25. cursorstring- nextCursor from the previous page. Up to 200 characters.
updatedSincestring (date-time)- Only records changed at or after this ISO 8601 time.
externalIdstring- Your own identifier for this record, unique within the organization. 1 to 100 characters.
statusstring- One of
ACTIVE,ARCHIVED.
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/labels?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.
idstringnamestringstatusstring- One of
ACTIVE,ARCHIVED. parentLabelIdstring or nullcontactEmailstring or nullreleaseDefaultsobjectreleaseDefaults.string or nullcLineHolder releaseDefaults.string or nullpLineHolder
Show 7 more fieldsHide 7 fields
releaseDefaults.string or nullprimaryGenre releaseDefaults.string or nulllanguage 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.
{
"data": [
{
"id": "6731c2a1b3c4d5e6f7a8b9c0",
"name": "June Hale",
"status": "ACTIVE",
"parentLabelId": "6731c2a1b3c4d5e6f7a8b9c0",
"contactEmail": "dana@example.com",
"releaseDefaults": {
"cLineHolder": "…",
"pLineHolder": "…",
"primaryGenre": "Pop",
"language": "en"
},
"externalId": "6731c2a1b3c4d5e6f7a8b9c0",
"metadata": {
"catalogueId": "1042"
},
"createdAt": "2026-11-01T09:30:00.000Z",
"updatedAt": "2026-11-01T09:30:00.000Z",
"revision": "…"
}
],
"hasMore": false,
"nextCursor": null
}Create a label or imprint#
POST /labels · scope labels:write
Body#
namestringRequired- 1 to 120 characters.
parentLabelIdstring or null- An id.
contactEmailstring or null- Up to 254 characters.
releaseDefaultsobject- Filled into the label's new releases when they leave these out: the © and ℗ holders (with that year), the genre and the language.
releaseDefaults.string or nullcLineHolder - Up to 180 characters.
releaseDefaults.string or nullpLineHolder - Up to 180 characters.
releaseDefaults.string or nullprimaryGenre - A genre name from GET /v1/reference.
releaseDefaults.string or nulllanguage - An ISO 639-1 code ("en") or a language name from GET /v1/reference.
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.
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/labels" \
-H "Authorization: Bearer $STILLMORE_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"name": "June Hale"
}'Response 201#
data holds the object below.
idstringnamestringstatusstring- One of
ACTIVE,ARCHIVED. parentLabelIdstring or nullcontactEmailstring or nullreleaseDefaultsobjectreleaseDefaults.string or nullcLineHolder releaseDefaults.string or nullpLineHolder
Show 7 more fieldsHide 7 fields
releaseDefaults.string or nullprimaryGenre releaseDefaults.string or nulllanguage 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.
{
"data": {
"id": "6731c2a1b3c4d5e6f7a8b9c0",
"name": "June Hale",
"status": "ACTIVE",
"parentLabelId": "6731c2a1b3c4d5e6f7a8b9c0",
"contactEmail": "dana@example.com",
"releaseDefaults": {
"cLineHolder": "…",
"pLineHolder": "…",
"primaryGenre": "Pop",
"language": "en"
},
"externalId": "6731c2a1b3c4d5e6f7a8b9c0",
"metadata": {
"catalogueId": "1042"
},
"createdAt": "2026-11-01T09:30:00.000Z",
"updatedAt": "2026-11-01T09:30:00.000Z",
"revision": "…"
}
}Errors#
| Code | What it means |
|---|---|
EXTERNAL_ID_IN_USE | Another record of the same kind in your organization already has this externalId. |
PLAN_QUOTA_REACHED | From the workspace rule behind this endpoint; message says what to change. |
DUPLICATE | From 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 label#
GET /labels/{labelId} · scope labels:read
Path parameters#
labelIdstring- 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/labels/{labelId}" \
-H "Authorization: Bearer $STILLMORE_API_KEY"Response 200#
data holds the object below.
idstringnamestringstatusstring- One of
ACTIVE,ARCHIVED. parentLabelIdstring or nullcontactEmailstring or nullreleaseDefaultsobjectreleaseDefaults.string or nullcLineHolder releaseDefaults.string or nullpLineHolder
Show 7 more fieldsHide 7 fields
releaseDefaults.string or nullprimaryGenre releaseDefaults.string or nulllanguage 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.
{
"data": {
"id": "6731c2a1b3c4d5e6f7a8b9c0",
"name": "June Hale",
"status": "ACTIVE",
"parentLabelId": "6731c2a1b3c4d5e6f7a8b9c0",
"contactEmail": "dana@example.com",
"releaseDefaults": {
"cLineHolder": "…",
"pLineHolder": "…",
"primaryGenre": "Pop",
"language": "en"
},
"externalId": "6731c2a1b3c4d5e6f7a8b9c0",
"metadata": {
"catalogueId": "1042"
},
"createdAt": "2026-11-01T09:30:00.000Z",
"updatedAt": "2026-11-01T09:30:00.000Z",
"revision": "…"
}
}Errors#
| Code | What it means |
|---|---|
LABEL_NOT_FOUND | From 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 label#
PATCH /labels/{labelId} · scope labels:write
Path parameters#
labelIdstring- An id.
Body#
namestring- 1 to 120 characters.
parentLabelIdstring or null- An id.
contactEmailstring or null- Up to 254 characters.
releaseDefaultsobject- Filled into the label's new releases when they leave these out: the © and ℗ holders (with that year), the genre and the language.
releaseDefaults.string or nullcLineHolder - Up to 180 characters.
releaseDefaults.string or nullpLineHolder - Up to 180 characters.
releaseDefaults.string or nullprimaryGenre - A genre name from GET /v1/reference.
releaseDefaults.string or nulllanguage - An ISO 639-1 code ("en") or a language name from GET /v1/reference.
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.
statusstring- One of
ACTIVE,ARCHIVED.
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/labels/{labelId}" \
-H "Authorization: Bearer $STILLMORE_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{}'Response 200#
data holds the object below.
idstringnamestringstatusstring- One of
ACTIVE,ARCHIVED. parentLabelIdstring or nullcontactEmailstring or nullreleaseDefaultsobjectreleaseDefaults.string or nullcLineHolder releaseDefaults.string or nullpLineHolder
Show 7 more fieldsHide 7 fields
releaseDefaults.string or nullprimaryGenre releaseDefaults.string or nulllanguage 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.
{
"data": {
"id": "6731c2a1b3c4d5e6f7a8b9c0",
"name": "June Hale",
"status": "ACTIVE",
"parentLabelId": "6731c2a1b3c4d5e6f7a8b9c0",
"contactEmail": "dana@example.com",
"releaseDefaults": {
"cLineHolder": "…",
"pLineHolder": "…",
"primaryGenre": "Pop",
"language": "en"
},
"externalId": "6731c2a1b3c4d5e6f7a8b9c0",
"metadata": {
"catalogueId": "1042"
},
"createdAt": "2026-11-01T09:30:00.000Z",
"updatedAt": "2026-11-01T09:30:00.000Z",
"revision": "…"
}
}Errors#
| Code | What it means |
|---|---|
LABEL_NOT_FOUND | From the workspace rule behind this endpoint; message says what to change. |
REVISION_MISMATCH | The record changed since you read it (If-Match). Read it again and retry. |
EXTERNAL_ID_IN_USE | Another 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.