Issuer:
https://api.getsoundlink.com · Access token lifetime: 3600 seconds · PKCE: required (S256) · Refresh tokens: Authorization Code only, 30 days, rotatedWhich grant do I need?
Authorization Code + PKCE
A user signs in and approves scopes. Use this to establish the connection and to read identity via
userinfo.Produces a token that acts as the user.Client Credentials
Your application authenticates as itself for an organization it already has a grant for. Use this for ongoing, unattended access.Produces a token that acts as your application.
When an Authorization Code token expires, refresh it instead of asking the user to consent again. Client Credentials tokens have no refresh token; request a new one at any time.
Discovery
Read endpoint locations from the metadata document rather than hardcoding them.Response
The response is cacheable for 300 seconds (
Cache-Control: public, max-age=300). The values in this document are authoritative — if they ever differ from the paths written here, follow the document.Onboarding your client
Soundlink registers confidential clients for you. There is no self-service or dynamic client registration, and public clients are not supported. Provide the following when requesting a client:Every callback URL your application will use. Must be absolute HTTPS URLs. Matched exactly at authorize time — no wildcards, no path or query flexibility, no trailing-slash tolerance.
The maximum set your client may ever request. Any
scope sent to /authorize must be a subset of this.client_id and a client_secret.
Reference application
A complete, runnable implementation of everything above:soundlink-oauth-example
Next.js app covering the PKCE connect flow, server-side code exchange,
userinfo, minted Client Credentials tokens, the campaign and metrics reads, and grant revocation — with every token held server-side and never sent to the browser.Known limitations
No organization discovery
No endpoint lists the organizations that authorized your client. Persist
organization_id at consent time.No token introspection
No introspection endpoint and no JWKS. Token validity is knowable only by using it.
Confidential clients only
No dynamic client registration and no public-client support.
Next
Authorization Code + PKCE
Connect a user’s organization step by step, then read their identity via
userinfo.Client Credentials
Mint unattended tokens for an existing grant, and revoke a grant when done.
Scopes, endpoints & errors
Which scope unlocks which route, error codes, and a security checklist.