Skip to content

API reference

Money

The balance, transactions, earnings, statements, payout methods and payouts.

On this page

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

EndpointWhat it does
GET /balanceThe balance, per currency
GET /transactionsLedger entries
GET /earningsEarnings by month, release, track, store or territory
GET /statementsPublished royalty statements
GET /statements/{statementId}One statement
GET /statements/{statementId}/linesThe royalty lines behind a statement
GET /statements/{statementId}/exportThe statement's lines as CSV
GET /payout-methodsSaved payout methods
GET /payoutsPayout requests
GET /payouts/{payoutId}One payout request
POST /payoutsRequest a payout
POST /payouts/{payoutId}/cancelCancel a pending payout

The balance, per currency#

GET /balance · scope finance:read

What the organization has earned, the advance still to recoup, payouts on their way, and what can be paid out now.

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/balance" \
  -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.

currencystring
availablestring
What can be paid out now: earnings minus the advance still to recoup and the payouts on their way.
earningsstring
Royalties and adjustments credited, minus fees, payouts and recoupments.
advanceOutstandingstring
Advance granted and not recouped yet.
pendingPayoutsstring
Payouts requested and not paid or refused yet.
minimumPayoutstring or null
A decimal amount in its currency, e.g. "1250.40".
Example response
{
  "data": [
    {
      "currency": "USD",
      "available": "250.00",
      "earnings": "250.00",
      "advanceOutstanding": "…",
      "pendingPayouts": "…",
      "minimumPayout": "…"
    }
  ],
  "hasMore": false,
  "nextCursor": null
}

Ledger entries#

GET /transactions · scope finance:read

Every credit and debit of the balance, newest first: royalties, fees, payouts, adjustments, recoupments, transfers.

Query parameters#

limitinteger
From 1 to 100. Default 25.
cursorstring
Up to 200 characters.
currencystring
A three-letter currency code, such as USD.
typestring
One of ROYALTY_CREDIT, ADJUSTMENT_CREDIT, ADJUSTMENT_DEBIT, PAYOUT_DEBIT, FEE_DEBIT, ADVANCE_RECOUPMENT, TRANSFER_OUT, TRANSFER_IN, REFERRAL_CREDIT, PROMOTION_DEBIT, PROMOTION_REFUND, COVER_LICENSE_DEBIT, COVER_LICENSE_REFUND, ROYALTY_REVERSAL, FEE_REVERSAL.
sincestring (date-time)
Only entries at or after this time.

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/transactions?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
typestring
One of ROYALTY_CREDIT, ADJUSTMENT_CREDIT, ADJUSTMENT_DEBIT, PAYOUT_DEBIT, FEE_DEBIT, ADVANCE_RECOUPMENT, TRANSFER_OUT, TRANSFER_IN, REFERRAL_CREDIT, PROMOTION_DEBIT, PROMOTION_REFUND, COVER_LICENSE_DEBIT, COVER_LICENSE_REFUND, ROYALTY_REVERSAL, FEE_REVERSAL.
amountstring
Signed: credits positive, debits negative.
currencystring
descriptionstring
occurredAtstring
statementIdstring or null
The statement a royalty credit came with.
sourceobject
What made the entry: a statement, a payout, an adjustment….
source.typestring
source.idstring
Example response
{
  "data": [
    {
      "id": "6731c2a1b3c4d5e6f7a8b9c0",
      "type": "ROYALTY_CREDIT",
      "amount": "250.00",
      "currency": "USD",
      "description": "Sent from our catalogue system",
      "occurredAt": "2026-11-01T09:30:00.000Z",
      "statementId": "6731c2a1b3c4d5e6f7a8b9c0",
      "source": {
        "type": "…",
        "id": "6731c2a1b3c4d5e6f7a8b9c0"
      }
    }
  ],
  "hasMore": false,
  "nextCursor": null
}

Earnings by month, release, track, store or territory#

GET /earnings · scope finance:read

What the stores reported, summed by groupBy over the royalty lines matched to the catalogue, biggest first (months in order). Filter by reporting months, currency, release, track, store or territory. Gross, before commission: statements carry the net.

Query parameters#

groupBystring
One of month, release, track, store, territory. Default "month".
fromstring
First reporting month, YYYY-MM.
tostring
Last reporting month, YYYY-MM.
currencystring
A three-letter currency code, such as USD.
releaseIdstring
An id.
trackIdstring
An id.
storestring
1 to 80 characters.
territorystring
A two-letter country code, such as GB.
limitinteger
From 1 to 500. Default 100.

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/earnings" \
  -H "Authorization: Bearer $STILLMORE_API_KEY"

Response 200#

data holds the object below.

groupBystring
One of month, release, track, store, territory.
rowsobject[]
rows[].keystring
The month (YYYY-MM), release id, track id, store, or territory code.
rows[].labelstring
The month, the release or track title, the store, or the country.
rows[].currencystring
rows[].unitsnumber
Streams and downloads as the stores reported them.
rows[].grossstring
As the stores reported it, before Stillmore Group's commission; statements carry the net.
totalsobject[]
totals[].currencystring
totals[].unitsnumber
totals[].grossstring
A decimal amount in its currency, e.g. "1250.40".
Example response
{
  "data": {
    "groupBy": "month",
    "rows": [
      {
        "key": "…",
        "label": "…",
        "currency": "USD",
        "units": 1200,
        "gross": "250.00"
      }
    ],
    "totals": [
      {
        "currency": "USD",
        "units": 1200,
        "gross": "250.00"
      }
    ]
  }
}

Published royalty statements#

GET /statements · scope finance:read

Statements Stillmore Group published to the organization, newest first. Drafts never show; one withdrawn after publishing stays listed with status VOID.

Query parameters#

limitinteger
From 1 to 100. Default 25.
cursorstring
Up to 200 characters.
currencystring
A three-letter currency code, such as USD.
periodstring
Only statements covering this month.

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/statements?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
statusstring
VOID: Stillmore Group withdrew it after publishing and a corrected statement follows; its lines and CSV answer 410. One of PUBLISHED, VOID.
periodStartstring
periodEndstring
currencystring
grossstring
What the stores reported for the period.
feesstring
A decimal amount in its currency, e.g. "1250.40".
netstring
What was credited to the balance.
revenueSharePercentstring or null
The organization's share applied, when an agreement set one.
versionnumber
publishedAtstring or null
Example response
{
  "data": [
    {
      "id": "6731c2a1b3c4d5e6f7a8b9c0",
      "status": "PUBLISHED",
      "periodStart": "…",
      "periodEnd": "…",
      "currency": "USD",
      "gross": "250.00",
      "fees": "250.00",
      "net": "250.00",
      "revenueSharePercent": "…",
      "version": 1,
      "publishedAt": "2026-11-01T09:30:00.000Z"
    }
  ],
  "hasMore": false,
  "nextCursor": null
}

One statement#

GET /statements/{statementId} · scope finance:read

Path parameters#

statementIdstring
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/statements/{statementId}" \
  -H "Authorization: Bearer $STILLMORE_API_KEY"

Response 200#

data holds the object below.

idstring
statusstring
VOID: Stillmore Group withdrew it after publishing and a corrected statement follows; its lines and CSV answer 410. One of PUBLISHED, VOID.
periodStartstring
periodEndstring
currencystring
grossstring
What the stores reported for the period.
feesstring
A decimal amount in its currency, e.g. "1250.40".
netstring
What was credited to the balance.
revenueSharePercentstring or null
The organization's share applied, when an agreement set one.
versionnumber
publishedAtstring or null
Example response
{
  "data": {
    "id": "6731c2a1b3c4d5e6f7a8b9c0",
    "status": "PUBLISHED",
    "periodStart": "…",
    "periodEnd": "…",
    "currency": "USD",
    "gross": "250.00",
    "fees": "250.00",
    "net": "250.00",
    "revenueSharePercent": "…",
    "version": 1,
    "publishedAt": "2026-11-01T09:30:00.000Z"
  }
}

Errors#

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

The royalty lines behind a statement#

GET /statements/{statementId}/lines · scope finance:read

Each store line of the statement's period and currency, up to 500 a page.

Path parameters#

statementIdstring
An id.

Query parameters#

limitinteger
From 1 to 500. Default 100.
cursorstring
Up to 200 characters.
releaseIdstring
An id.
storestring
1 to 80 characters.
territorystring
A two-letter country code, such as GB.

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/statements/{statementId}/lines?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 or null
trackIdstring or null
isrcstring or null
upcstring or null
storestring or null
territorystring or null
unitsnumber or null
Show 5 more fields
grossstring
A decimal amount in its currency, e.g. "1250.40".
currencystring
periodStartstring or null
periodEndstring or null
usageDatestring or null
Example response
{
  "data": [
    {
      "id": "6731c2a1b3c4d5e6f7a8b9c0",
      "releaseId": "6731c2a1b3c4d5e6f7a8b9c0",
      "trackId": "6731c2a1b3c4d5e6f7a8b9c0",
      "isrc": "GBXYZ2600001",
      "upc": "0612345678905",
      "store": "Spotify",
      "territory": "GB",
      "units": 1200,
      "gross": "250.00",
      "currency": "USD",
      "periodStart": "…",
      "periodEnd": "…",
      "usageDate": "2027-01-15"
    }
  ],
  "hasMore": false,
  "nextCursor": null
}

Errors#

CodeWhat it means
STATEMENT_NOT_FOUNDFrom the workspace rule behind this endpoint; message says what to change.
STATEMENT_VOIDStillmore Group withdrew the statement after publishing it; a corrected statement follows. It stays listed with status VOID, without its lines.

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

The statement's lines as CSV#

GET /statements/{statementId}/export · scope finance:read

Every line in one text/csv file (UTF-8, comma separated, a header row), the same columns as the lines endpoint.

Path parameters#

statementIdstring
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/statements/{statementId}/export" \
  -H "Authorization: Bearer $STILLMORE_API_KEY"

Response 200#

A text/csv file: a header row, then one line per royalty line.

Example response
id,periodStart,periodEnd,usageDate,releaseId,upc,trackId,isrc,store,territory,units,gross,currency
…

Errors#

CodeWhat it means
STATEMENT_NOT_FOUNDFrom the workspace rule behind this endpoint; message says what to change.
STATEMENT_VOIDStillmore Group withdrew the statement after publishing it; a corrected statement follows. It stays listed with status VOID, without its lines.

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

Saved payout methods#

GET /payout-methods · scope finance:read

The bank, PayPal and Payoneer accounts saved in the workspace, masked. Payouts through the API can only go to these.

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/payout-methods" \
  -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.

typestring
One of IBAN, BANK_ACCOUNT, PAYPAL, PAYONEER.
labelstring
summarystring
The account, masked: GB•• •••• 4821, •••• 0042, PayPal.
idstring
isDefaultboolean
Example response
{
  "data": [
    {
      "type": "IBAN",
      "label": "…",
      "summary": "…",
      "id": "6731c2a1b3c4d5e6f7a8b9c0",
      "isDefault": false
    }
  ],
  "hasMore": false,
  "nextCursor": null
}

Payout requests#

GET /payouts · scope finance:read

Query parameters#

limitinteger
From 1 to 100. Default 25.
cursorstring
Up to 200 characters.
statusstring
One of PENDING, APPROVED, REJECTED, PROCESSING, PAID, FAILED, CANCELLED.

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/payouts?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
amountstring
A decimal amount in its currency, e.g. "1250.40".
currencystring
statusstring
One of PENDING, APPROVED, REJECTED, PROCESSING, PAID, FAILED, CANCELLED.
destinationobject
destination.typestring
One of IBAN, BANK_ACCOUNT, PAYPAL, PAYONEER.
destination.labelstring
destination.summarystring
The account, masked: GB•• •••• 4821, •••• 0042, PayPal.
Show 7 more fields
notestring or null
reviewNotestring or null
Stillmore Group's note when approving or refusing.
paymentReferencestring or null
paidAtstring or null
cancelledAtstring or null
requestedViastring
One of APP, API.
createdAtstring
Example response
{
  "data": [
    {
      "id": "6731c2a1b3c4d5e6f7a8b9c0",
      "amount": "250.00",
      "currency": "USD",
      "status": "PENDING",
      "destination": {
        "type": "IBAN",
        "label": "…",
        "summary": "…"
      },
      "note": "Sent from our catalogue system",
      "reviewNote": "Sent from our catalogue system",
      "paymentReference": "…",
      "paidAt": "2026-11-01T09:30:00.000Z",
      "cancelledAt": "2026-11-01T09:30:00.000Z",
      "requestedVia": "APP",
      "createdAt": "2026-11-01T09:30:00.000Z"
    }
  ],
  "hasMore": false,
  "nextCursor": null
}

One payout request#

GET /payouts/{payoutId} · scope finance:read

Path parameters#

payoutIdstring
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/payouts/{payoutId}" \
  -H "Authorization: Bearer $STILLMORE_API_KEY"

Response 200#

data holds the object below.

idstring
amountstring
A decimal amount in its currency, e.g. "1250.40".
currencystring
statusstring
One of PENDING, APPROVED, REJECTED, PROCESSING, PAID, FAILED, CANCELLED.
destinationobject
destination.typestring
One of IBAN, BANK_ACCOUNT, PAYPAL, PAYONEER.
destination.labelstring
destination.summarystring
The account, masked: GB•• •••• 4821, •••• 0042, PayPal.
Show 7 more fields
notestring or null
reviewNotestring or null
Stillmore Group's note when approving or refusing.
paymentReferencestring or null
paidAtstring or null
cancelledAtstring or null
requestedViastring
One of APP, API.
createdAtstring
Example response
{
  "data": {
    "id": "6731c2a1b3c4d5e6f7a8b9c0",
    "amount": "250.00",
    "currency": "USD",
    "status": "PENDING",
    "destination": {
      "type": "IBAN",
      "label": "…",
      "summary": "…"
    },
    "note": "Sent from our catalogue system",
    "reviewNote": "Sent from our catalogue system",
    "paymentReference": "…",
    "paidAt": "2026-11-01T09:30:00.000Z",
    "cancelledAt": "2026-11-01T09:30:00.000Z",
    "requestedVia": "APP",
    "createdAt": "2026-11-01T09:30:00.000Z"
  }
}

Errors#

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

Request a payout#

POST /payouts · scope payouts:write

Asks Stillmore Group to pay out part of the available balance to a saved payout method. An owner or admin must first allow payout requests through the API in Workspace › API › Settings (with an authenticator code), and each request is told to them. Stillmore Group reviews it as any other: it stays PENDING until approved, then PAID. Send an Idempotency-Key so a retry never asks twice.

Body#

amountstringRequired
A decimal amount, such as "250.00": at least the minimum payout and at most what is available (GET /v1/balance).
currencystring
Default "USD".
payoutMethodIdstringRequired
One of GET /v1/payout-methods; methods are added in the workspace. An id.
notestring
Up to 500 characters.

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/payouts" \
  -H "Authorization: Bearer $STILLMORE_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": "250.00",
    "payoutMethodId": "6731c2a1b3c4d5e6f7a8b9c0",
    "note": "Sent from our catalogue system"
  }'

Response 201#

data holds the object below.

idstring
amountstring
A decimal amount in its currency, e.g. "1250.40".
currencystring
statusstring
One of PENDING, APPROVED, REJECTED, PROCESSING, PAID, FAILED, CANCELLED.
destinationobject
destination.typestring
One of IBAN, BANK_ACCOUNT, PAYPAL, PAYONEER.
destination.labelstring
destination.summarystring
The account, masked: GB•• •••• 4821, •••• 0042, PayPal.
Show 7 more fields
notestring or null
reviewNotestring or null
Stillmore Group's note when approving or refusing.
paymentReferencestring or null
paidAtstring or null
cancelledAtstring or null
requestedViastring
One of APP, API.
createdAtstring
Example response
{
  "data": {
    "id": "6731c2a1b3c4d5e6f7a8b9c0",
    "amount": "250.00",
    "currency": "USD",
    "status": "PENDING",
    "destination": {
      "type": "IBAN",
      "label": "…",
      "summary": "…"
    },
    "note": "Sent from our catalogue system",
    "reviewNote": "Sent from our catalogue system",
    "paymentReference": "…",
    "paidAt": "2026-11-01T09:30:00.000Z",
    "cancelledAt": "2026-11-01T09:30:00.000Z",
    "requestedVia": "APP",
    "createdAt": "2026-11-01T09:30:00.000Z"
  }
}

Errors#

CodeWhat it means
API_PAYOUTS_OFFPayout requests through the API are off. An owner or admin turns them on in Workspace › API › Settings.
PAYOUT_METHOD_NOT_FOUNDFrom the workspace rule behind this endpoint; message says what to change.
INSUFFICIENT_BALANCEFrom the workspace rule behind this endpoint; message says what to change.
BELOW_MINIMUM_PAYOUTFrom 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.

Cancel a pending payout#

POST /payouts/{payoutId}/cancel · scope payouts:write

Path parameters#

payoutIdstring
An id.

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/payouts/{payoutId}/cancel" \
  -H "Authorization: Bearer $STILLMORE_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)"

Response 200#

data holds the object below.

idstring
amountstring
A decimal amount in its currency, e.g. "1250.40".
currencystring
statusstring
One of PENDING, APPROVED, REJECTED, PROCESSING, PAID, FAILED, CANCELLED.
destinationobject
destination.typestring
One of IBAN, BANK_ACCOUNT, PAYPAL, PAYONEER.
destination.labelstring
destination.summarystring
The account, masked: GB•• •••• 4821, •••• 0042, PayPal.
Show 7 more fields
notestring or null
reviewNotestring or null
Stillmore Group's note when approving or refusing.
paymentReferencestring or null
paidAtstring or null
cancelledAtstring or null
requestedViastring
One of APP, API.
createdAtstring
Example response
{
  "data": {
    "id": "6731c2a1b3c4d5e6f7a8b9c0",
    "amount": "250.00",
    "currency": "USD",
    "status": "PENDING",
    "destination": {
      "type": "IBAN",
      "label": "…",
      "summary": "…"
    },
    "note": "Sent from our catalogue system",
    "reviewNote": "Sent from our catalogue system",
    "paymentReference": "…",
    "paidAt": "2026-11-01T09:30:00.000Z",
    "cancelledAt": "2026-11-01T09:30:00.000Z",
    "requestedVia": "APP",
    "createdAt": "2026-11-01T09:30:00.000Z"
  }
}

Errors#

CodeWhat it means
PAYOUT_NOT_FOUNDFrom the workspace rule behind this endpoint; message says what to change.
PAYOUT_NOT_PENDINGFrom 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.