Organization owners and admins can create keys in the Soundlink app — no support ticket required.
Open API keys in Settings
Sign in at Soundlink, open your profile menu → Settings, then Developer
→ API keys. The app uses your current organization automatically — no org ID
in the URL.
1
Open the API keys page
From your profile menu, go to Settings → Developer → API keys. Soundlink scopes this page
to your active organization — you never paste an org ID into the URL.
You’ll see every key for the org — active, expired, and revoked — with scopes, expiration,
and last used.
API keys list in Settings → Developer
2
Create a key
Click Create key. Give the key a name (required), choose an expiration, and select
one or more scopes (at least one required).
Field
Details
Name
A label you’ll recognize later (e.g. Warehouse sync, Staging).
Expiration
Pick one: 7 days, 30 days, 90 days, 1 year, or Never. When the date passes, the API returns 401 with api_key_expired.
Scopes
Any combination of the v1 scopes below — at least one required. See Scopes.
Create key — name, expiration, and scopes
Start with 30 days and both read scopes if you’re exploring the API. Rotate or revoke the
key when you’re done testing.
3
Copy and store the key
After you click Create key, Soundlink shows the full key exactly once. Copy it
immediately and store it in your secrets manager or password vault.
You cannot retrieve the full key later — only revoke it and create a new one. The keys list
never shows the secret, only a masked placeholder.
One-time key reveal — copy before closing
Members (non-admin roles) see API keys in Settings but cannot open the page — ask an owner or
admin to create a key for your integration.
Pass the full string in the Authorization header as a Bearer token (recommended):
-H 'Authorization: Bearer sk_abc123_...'
The x-api-key header is deprecated and retiring 2026-08-17. It still works today, but
migrate to Authorization: Bearer above before then:
-H 'x-api-key: sk_abc123_...'
Send exactly one of the two — sending both, or an unrecognized Authorization value, returns 401 with code mixed_credentials. Do not send Firebase Bearer tokens or legacy product headers on this host.
Typical read-only integrations enable bothcampaigns:read and metrics:read.
Add campaigns:write only when the integration should spend wallet credit or manage delivery.
GET /v1/ping accepts any valid v1 key regardless of which read scopes you
selected — useful for smoke tests after creation.
Prefer a fixed preset over Never for anything you can rotate. A key that never expires only
goes away when someone remembers to revoke it.
After expiresAt, requests fail with 401 and api_key_expired. Keys created with Never have
no expiresAt and only stop working when revoked. Create a replacement key before a fixed-lifetime
key lapses, update your integration, then revoke the old key.