Skip to main content
POST /v1/soundlinks creates a soundlink that is not tied to a Soundlink-funded campaign. Requires the soundlinks:write scope.
This does not create a campaign and does not appear on GET /v1/campaigns. Ads run in your own Meta account. On create, the Idempotency-Key header is required.

Prerequisites

  • An API key with the soundlinks:write scope — see Authentication
  • A Spotify track or playlist URL that exists on Spotify
Expected (201). data is the same shape as soundlink detail:
The soundlink is active immediately. Use data.url as the public landing page.

Request fields

Spotify URLs

spotifyUrl must be https://open.spotify.com/track/{id} or https://open.spotify.com/playlist/{id}. Locale prefixes (/intl-pt/...) and query strings (?si=...) are accepted. Album, artist, spotify: URIs, and a track or playlist that does not exist on Spotify return 422 invalid_spotify_url.

Meta pixel

To attach a Meta pixel, send both metaPixelId and metaConversionAccessToken. Sending only one returns 400 invalid_request. Omit both to skip Meta tracking.
GET returns metaPixelId when set. The CAPI token is never returned.

Idempotency

The Idempotency-Key header is required on POST /v1/soundlinks.
  • Any unique string up to 255 characters — a UUID or <action>-<date>-<ref> pattern works well
  • Keys are honored for 24 hours
  • Retrying with the same key and same body replays the original 201 — it does not create a second soundlink
  • Reusing a key with a different body returns 409 idempotency_key_conflict
  • If a concurrent request with the same key is still processing, you also get 409 — retry shortly
When a request times out or you never saw the response, retry with the same key. When a request failed with a definitive error (for example 422 invalid_spotify_url) and you have fixed the cause, send the retry as a new request with a new key.

Errors

See Errors for the full list. DELETE /v1/soundlinks/{soundlinkId} — same as Archive in the app. Requires soundlinks:write. No Idempotency-Key.
Expected (200). data.status is archived. The public landing page returns 404 after cache expires. List and detail still return the row. A second delete, unknown id, other org, campaign-linked id, or a soundlink that is not active returns 404 not_found. This cannot be undone via the API.

Next

Syncing soundlinks — list and detail · Soundlink metrics · API Reference