Skip to content

Concepts

Requests and pages

Answers, pages, idempotency keys, revisions and your own ids.

On this page

Answers#

Every answer is JSON. One object comes as { data }; a list as { data, hasMore, nextCursor }. Timestamps are ISO 8601 in UTC, dates YYYY-MM-DD, amounts decimal strings. Fields are only ever added within v1: ignore the ones you don't know.

Pages#

Lists are newest first. Pass nextCursor back as cursor until hasMore is false. limit goes up to 100 (500 for statement lines).

curl "https://api.stillmoregroup.com/api/v1/releases?limit=100" -H "Authorization: Bearer $STILLMORE_API_KEY"
curl "https://api.stillmoregroup.com/api/v1/releases?limit=100&cursor=<nextCursor>" -H "Authorization: Bearer $STILLMORE_API_KEY"

To keep a copy in sync, ask only for what changed: updatedSince takes an ISO 8601 time, and every object carries updatedAt.

Idempotency keys#

Send an Idempotency-Key (a UUID) on every write. A retry with the same key and the same body gets the first answer again, with Idempotent-Replayed: true, for 24 hours, so a request that timed out can be sent again safely. The same key with another body answers 422 IDEMPOTENCY_KEY_REUSED.

Revisions#

Every object has a revision, also sent as the ETag header. Send it back as If-Match on a PATCH: when someone changed the object since you read it, the answer is 412 REVISION_MISMATCH and nothing is overwritten. Read it again, merge, and retry.

Header
If-Match: 7

Your own ids#

Labels, artists, releases and tracks take an externalId (your own id, unique per kind in your organization) and metadata (up to 20 string keys). List endpoints filter by externalId, so you never need to store our ids next to yours.