Now-playing push
Send the current track from any playout system or encoder to your Soundwaves site.
Network API keys are in early access. Email hello@soundwaveshq.com to get one.
If your station plays out from a system that isn’t connected to Soundwaves, it can push the current track to your site. Pushed tracks appear in the same now-playing feed your site already shows, and live listeners see the change straight away.
Authenticate
Pushes use a network API key with the nowplaying:write permission. Send it as a bearer token, or as an apiKey query parameter for systems that can only call a URL. Prefer the header where you can, because query strings are more likely to end up in logs.
Fields
| Field | Type | Required | Notes |
|---|---|---|---|
title | string | yes | 1–512 characters |
artist | string | yes | 1–512 characters |
album | string | no | |
artworkUrl | URL | no | Leave it out and we’ll find artwork for you |
durationSeconds | integer | no | Track length |
startedAt | ISO 8601 | no | Defaults to when we receive the push |
Push with POST
curl -X POST https://api.staging.swztech.net/ingest/now-playing \
-H "Authorization: Bearer $NETWORK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Midnight City",
"artist": "M83",
"durationSeconds": 240
}'Push with GET
For encoders with a metadata URL hook, send the same fields as query parameters:
curl "https://api.staging.swztech.net/ingest/now-playing?apiKey=$NETWORK_API_KEY&title=Midnight+City&artist=M83"A successful push returns 200 with { "ok": true, "nowPlaying": { … } }.
Artwork
If you don’t send artworkUrl, Soundwaves looks up cover art in the background (Spotify, then Deezer, then Last.fm) and updates your site when it finds some. This never slows down or fails the push.
When both sources are live
If a station has both pushed and natively scheduled now-playing, for example during a migration, the most recent track by start time wins. Recently played history always shows natively scheduled plays.
Errors
| Status | Body | Meaning |
|---|---|---|
401 | { "error": "invalid_api_key" } | Missing, malformed, unknown or revoked key |
403 | { "error": "insufficient_permissions" } | The key lacks nowplaying:write |
400 | { "error": [ … ] } | A field failed validation |
500 | { "error": "server_error" } | Something went wrong on our side |