Soundlink engagement export (JSONL)
Streams the full engagement dataset for a soundlink as
newline-delimited JSON (JSONL). Every line is a complete, valid
JSON object conforming to the soundlink_engagement_daily v1.0 schema
— identical to the rows returned by GET /metrics/engagement but
without pagination or an envelope wrapper.
Designed for data pipeline consumers: load directly into BigQuery, Snowflake, or any JSONL-aware ingest tool without cursor logic.
Usage:
GET /v1/soundlinks/{soundlinkId}/metrics/engagement/export
Accept: application/x-ndjson
Response body (one JSON object per line, no trailing comma):
{"provider":"soundlink","report_date":"2026-08-01","streams":89,...}
{"provider":"soundlink","report_date":"2026-08-02","streams":104,...}
Date range: if you omit both dates, defaults to the last 90 days
ending today. Override with startDate / endDate. Responses are
capped at 90 days — a wider range returns 400 invalid_query_parameter.
Page longer histories in 90-day slices.
Mutability: rows for a given report_date can be revised for up to
7 days after the date closes. Re-fetching and re-ingesting on the
primary key is safe (idempotent).
Requires the soundlinks:read scope. Accepts API key or OAuth Bearer.
Authorizations
Pass your Soundlink sk_* API key as a Bearer token:
Authorization: Bearer sk_<prefix>_<token> (not an OAuth token; see
oauthBearer for that). Accepted on all Public API operations. Send
only one Authorization header per request.
Path Parameters
Soundlink identifier (URL-safe string, same ID used in the public sndl.ink URL)
Query Parameters
Inclusive start date (YYYY-MM-DD). When omitted, the default depends
on the endpoint: campaign overview and paginated breakdown use the
campaign start date; engagement and JSONL export endpoints use the
last 90 days ending today (see each operation).
Inclusive end date (YYYY-MM-DD). Defaults to today.
Filter to a single engagement context. Omit to return both.
catalog, playlist Response
JSONL stream. Each line is a soundlink_engagement_daily v1.0 row.
Lines are sorted by (report_date asc, engagement_context, country_code, engaged_spotify_track_id).
One row of the soundlink_engagement_daily v1.0 schema.
Primary key: (provider, account_id, report_date, soundlink_id, engagement_context, country_code, engaged_spotify_track_id).
Rows are idempotent — re-ingesting on the primary key is safe.
Values for a given report_date may be revised for up to 7 days after
the date closes due to delayed Spotify playback events.
No status field: soundlinks do not store per-day lifecycle history.
No financial fields.
Always soundlink. Identifies the data provider for multi-source warehouses.
soundlink Soundlink organization ID (UUID).
Schema version string. Pin your ingest pipeline to this value.
"1.0"
UTC calendar date the metrics belong to (YYYY-MM-DD). Rows can change for up to 7 days after close.
Always UTC.
UTC ISO 8601 UTC timestamp when this row was generated. Use for deduplication if the same report_date is re-delivered.
Unique ID of this soundlink.
"V1StGXR8_Z5jdHi6B-myT"
Human-readable soundlink name.
Whether this soundlink promotes a track or playlist. null if undetermined.
track, playlist Which section this row belongs to.
catalog: plays of the promoted track and same-artist catalog tracks (track soundlinks).
playlist: per-track performance inside the promoted playlist (playlist soundlinks).
catalog, playlist ISO 3166-1 alpha-2. Derived from the listener's IP at time of engagement. Uppercase.
"US"
Spotify track ID of the engaged track. Part of the primary key.
"4cOdK2wGLETKBW3PvgPWqT"
Display name of the engaged track.
Unique listeners whose first play of this track via this soundlink occurred on report_date.
x >= 0Unique listeners who played this track on report_date but whose first play was on an earlier date.
x >= 0Total unique listeners on report_date: new_listeners + returning_listeners.
Do not sum across days — the same listener can appear on multiple report_date rows.
x >= 0Stream count from new listeners on report_date.
x >= 0Stream count from returning listeners on report_date.
x >= 0Total streams on report_date: new_listener_streams + returning_listener_streams.
Safe to sum within a day; summing across days counts repeat listens.
x >= 0Streams per listener (streams / listeners). Zero if listeners is zero.
ISRC of the promoted track. Populated when soundlink_target_type = track; otherwise null.
Spotify track ID of the promoted track. Populated when soundlink_target_type = track; otherwise null.
Spotify playlist ID. Populated when soundlink_target_type = playlist; otherwise null.
ISRC of the track that received listens. May differ from soundlink_target_isrc
for catalog spillover rows. null if ISRC could not be resolved.
1-based slot of the engaged track on the promoted playlist for report_date (1 = top).
Populated only when engagement_context = playlist. Treat null as unavailable, not an error.
x >= 1