Skip to content

API reference

Labels

The labels releases come out under.

On this page

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

EndpointWhat it does
GET /labelsList labels
POST /labelsCreate 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.

idstring
namestring
statusstring
One of ACTIVE, ARCHIVED.
parentLabelIdstring or null
contactEmailstring or null
releaseDefaultsobject
releaseDefaults.cLineHolderstring or null
releaseDefaults.pLineHolderstring or null
Show 7 more fields
releaseDefaults.primaryGenrestring or null
releaseDefaults.languagestring 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",
      "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.cLineHolderstring or null
Up to 180 characters.
releaseDefaults.pLineHolderstring or null
Up to 180 characters.
releaseDefaults.primaryGenrestring or null
A genre name from GET /v1/reference.
releaseDefaults.languagestring or null
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.

idstring
namestring
statusstring
One of ACTIVE, ARCHIVED.
parentLabelIdstring or null
contactEmailstring or null
releaseDefaultsobject
releaseDefaults.cLineHolderstring or null
releaseDefaults.pLineHolderstring or null
Show 7 more fields
releaseDefaults.primaryGenrestring or null
releaseDefaults.languagestring 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",
    "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#

CodeWhat it means
EXTERNAL_ID_IN_USEAnother record of the same kind in your organization already has this externalId.
PLAN_QUOTA_REACHEDFrom the workspace rule behind this endpoint; message says what to change.
DUPLICATEFrom 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.

idstring
namestring
statusstring
One of ACTIVE, ARCHIVED.
parentLabelIdstring or null
contactEmailstring or null
releaseDefaultsobject
releaseDefaults.cLineHolderstring or null
releaseDefaults.pLineHolderstring or null
Show 7 more fields
releaseDefaults.primaryGenrestring or null
releaseDefaults.languagestring 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",
    "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#

CodeWhat it means
LABEL_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 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.cLineHolderstring or null
Up to 180 characters.
releaseDefaults.pLineHolderstring or null
Up to 180 characters.
releaseDefaults.primaryGenrestring or null
A genre name from GET /v1/reference.
releaseDefaults.languagestring or null
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.

idstring
namestring
statusstring
One of ACTIVE, ARCHIVED.
parentLabelIdstring or null
contactEmailstring or null
releaseDefaultsobject
releaseDefaults.cLineHolderstring or null
releaseDefaults.pLineHolderstring or null
Show 7 more fields
releaseDefaults.primaryGenrestring or null
releaseDefaults.languagestring 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",
    "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#

CodeWhat it means
LABEL_NOT_FOUNDFrom 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.
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.