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.
| Endpoint | What it does |
|---|---|
GET /balance | The balance, per currency |
GET /transactions | Ledger entries |
GET /earnings | Earnings by month, release, track, store or territory |
GET /statements | Published royalty statements |
GET /statements/{statementId} | One statement |
GET /statements/{statementId}/lines | The royalty lines behind a statement |
GET /statements/{statementId}/export | The statement's lines as CSV |
GET /payout-methods | Saved payout methods |
GET /payouts | Payout requests |
GET /payouts/{payoutId} | One payout request |
POST /payouts | Request a payout |
POST /payouts/{payoutId}/cancel | Cancel 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.
currencystringavailablestring- 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".
{
"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.
idstringtypestring- 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.
currencystringdescriptionstringoccurredAtstringstatementIdstring or null- The statement a royalty credit came with.
sourceobject- What made the entry: a statement, a payout, an adjustment….
source.stringtype source.stringid
{
"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[].stringkey - The month (YYYY-MM), release id, track id, store, or territory code.
rows[].stringlabel - The month, the release or track title, the store, or the country.
rows[].stringcurrency rows[].numberunits - Streams and downloads as the stores reported them.
rows[].stringgross - As the stores reported it, before Stillmore Group's commission; statements carry the net.
totalsobject[]totals[].stringcurrency totals[].numberunits totals[].stringgross - A decimal amount in its currency, e.g. "1250.40".
{
"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.
idstringstatusstring- VOID: Stillmore Group withdrew it after publishing and a corrected statement follows; its lines and CSV answer 410. One of
PUBLISHED,VOID. periodStartstringperiodEndstringcurrencystringgrossstring- 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.
versionnumberpublishedAtstring or null
{
"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.
idstringstatusstring- VOID: Stillmore Group withdrew it after publishing and a corrected statement follows; its lines and CSV answer 410. One of
PUBLISHED,VOID. periodStartstringperiodEndstringcurrencystringgrossstring- 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.
versionnumberpublishedAtstring or null
{
"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#
| Code | What it means |
|---|---|
STATEMENT_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.
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.
idstringreleaseIdstring or nulltrackIdstring or nullisrcstring or nullupcstring or nullstorestring or nullterritorystring or nullunitsnumber or null
Show 5 more fieldsHide 5 fields
grossstring- A decimal amount in its currency, e.g. "1250.40".
currencystringperiodStartstring or nullperiodEndstring or nullusageDatestring or null
{
"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#
| Code | What it means |
|---|---|
STATEMENT_NOT_FOUND | From the workspace rule behind this endpoint; message says what to change. |
STATEMENT_VOID | Stillmore 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.
id,periodStart,periodEnd,usageDate,releaseId,upc,trackId,isrc,store,territory,units,gross,currency
…Errors#
| Code | What it means |
|---|---|
STATEMENT_NOT_FOUND | From the workspace rule behind this endpoint; message says what to change. |
STATEMENT_VOID | Stillmore 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. labelstringsummarystring- The account, masked: GB•• •••• 4821, •••• 0042, PayPal.
idstringisDefaultboolean
{
"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.
idstringamountstring- A decimal amount in its currency, e.g. "1250.40".
currencystringstatusstring- One of
PENDING,APPROVED,REJECTED,PROCESSING,PAID,FAILED,CANCELLED. destinationobjectdestination.stringtype - One of
IBAN,BANK_ACCOUNT,PAYPAL,PAYONEER. destination.stringlabel destination.stringsummary - The account, masked: GB•• •••• 4821, •••• 0042, PayPal.
Show 7 more fieldsHide 7 fields
notestring or nullreviewNotestring or null- Stillmore Group's note when approving or refusing.
paymentReferencestring or nullpaidAtstring or nullcancelledAtstring or nullrequestedViastring- One of
APP,API. createdAtstring
{
"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.
idstringamountstring- A decimal amount in its currency, e.g. "1250.40".
currencystringstatusstring- One of
PENDING,APPROVED,REJECTED,PROCESSING,PAID,FAILED,CANCELLED. destinationobjectdestination.stringtype - One of
IBAN,BANK_ACCOUNT,PAYPAL,PAYONEER. destination.stringlabel destination.stringsummary - The account, masked: GB•• •••• 4821, •••• 0042, PayPal.
Show 7 more fieldsHide 7 fields
notestring or nullreviewNotestring or null- Stillmore Group's note when approving or refusing.
paymentReferencestring or nullpaidAtstring or nullcancelledAtstring or nullrequestedViastring- One of
APP,API. createdAtstring
{
"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#
| Code | What it means |
|---|---|
PAYOUT_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.
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.
idstringamountstring- A decimal amount in its currency, e.g. "1250.40".
currencystringstatusstring- One of
PENDING,APPROVED,REJECTED,PROCESSING,PAID,FAILED,CANCELLED. destinationobjectdestination.stringtype - One of
IBAN,BANK_ACCOUNT,PAYPAL,PAYONEER. destination.stringlabel destination.stringsummary - The account, masked: GB•• •••• 4821, •••• 0042, PayPal.
Show 7 more fieldsHide 7 fields
notestring or nullreviewNotestring or null- Stillmore Group's note when approving or refusing.
paymentReferencestring or nullpaidAtstring or nullcancelledAtstring or nullrequestedViastring- One of
APP,API. createdAtstring
{
"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#
| Code | What it means |
|---|---|
API_PAYOUTS_OFF | Payout requests through the API are off. An owner or admin turns them on in Workspace › API › Settings. |
PAYOUT_METHOD_NOT_FOUND | From the workspace rule behind this endpoint; message says what to change. |
INSUFFICIENT_BALANCE | From the workspace rule behind this endpoint; message says what to change. |
BELOW_MINIMUM_PAYOUT | 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.
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.
idstringamountstring- A decimal amount in its currency, e.g. "1250.40".
currencystringstatusstring- One of
PENDING,APPROVED,REJECTED,PROCESSING,PAID,FAILED,CANCELLED. destinationobjectdestination.stringtype - One of
IBAN,BANK_ACCOUNT,PAYPAL,PAYONEER. destination.stringlabel destination.stringsummary - The account, masked: GB•• •••• 4821, •••• 0042, PayPal.
Show 7 more fieldsHide 7 fields
notestring or nullreviewNotestring or null- Stillmore Group's note when approving or refusing.
paymentReferencestring or nullpaidAtstring or nullcancelledAtstring or nullrequestedViastring- One of
APP,API. createdAtstring
{
"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#
| Code | What it means |
|---|---|
PAYOUT_NOT_FOUND | From the workspace rule behind this endpoint; message says what to change. |
PAYOUT_NOT_PENDING | 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.