GET /royalties/artificial-streams
List artificial-stream detections
Return the authenticated user's own artificial-stream DETECTIONS across
Spotify and Apple as a single, newest-first, cursor-paginated collection —
one row per detected track/period, including per-country detail where the
source reports it. This is the detection-level companion to
GET /artificial-streaming-fee/{period}, which exposes only the resulting
fee: quantity here is the count of detected artificial streams; the money
lives on the fee endpoint.
Source asymmetry. country is Spotify-only and is ALWAYS null for
Apple detections (Apple's report carries no country). upc and
penalty_fee_suspended are likewise Spotify-only (null for Apple). Rows
carry a dsp discriminator (spotify | apple) so consumers can branch.
Date rule. Only detections with a report date (date_reported,
YYYY-MM-DD) are returned; Spotify's report date is nullable and any
null-date row is excluded (the cursor keys on the report date).
Pagination. Forward-only opaque cursor from links.next; page until it
is null. The cursor is a signed, stateless keyset token bound to your
account scope and the exact filter set — it never expires, but a tampered
token or a token replayed after you change the scope/filters returns 422
(restart without a cursor). Because detections are append-only historical
rows keyed by report date, a late import whose report date sorts BEFORE a
boundary you have already paged past is only picked up on a fresh pull (start
a new listing without a cursor).
Parameters
- dsp (query)
- start_date (query)
- end_date (query)
- release_id (query)
- isrc (query)
- cursor (query)
- per_page (query)
Responses
- 200
- 401
- 422