DMCA Radio Quick Start
Overview
The Digital Millennium Copyright Act (DMCA) provides a simplified licensing framework for non-interactive digital radio services operating in the United States. By agreeing to follow a set of operational playback rules and paying pre-determined royalty rates, services can acquire blanket licenses without negotiating directly with individual rightsholders.
Tuned Global's platform supports DMCA-compliant radio implementations through its station, playlist, and playback APIs — including a dedicated DMCA validation endpoint that checks playlist compliance before streaming.
This guide covers:
- What DMCA radio licensing requires
- The playback rules your service must enforce
- How to build a DMCA-compliant radio experience using Tuned Global's APIs
- Which endpoints to use for stations, playlists, playback, and compliance validation
What is DMCA Radio?
DMCA radio covers "non-interactive" streaming services — services where the listener does not have full control over what plays. Think internet radio stations, curated playlists, and lean-back listening experiences rather than on-demand streaming.
Under Sections 106, 112, and 114 of the US Copyright Act, non-interactive services can operate under statutory licenses managed by:
- SoundExchange — administers sound recording licenses and pays royalties to labels and artists
- ASCAP, BMI, SESAC (Performance Rights Organisations) — administer public performance licenses for songwriters and publishers
If your service needs functionality beyond non-interactive radio (on-demand streams, downloads, jukebox plays), you will need direct licenses with labels, publishers, and PROs.
International note: Outside the US, radio services can be implemented in coordination with collection societies in most countries. Tuned Global's catalogue contains locally relevant music globally and can help navigate international licensing processes.
DMCA Playback Rules
DMCA-compliant services must enforce strict playback rules. These are not optional — they are legal requirements under the statutory license.
Track Selection Rules
| Rule | Requirement |
|---|---|
| No on-demand playback | Tracks may not be played on-demand by the listener |
| No user-created playlists | A user may not listen to any playlists that they create |
| No advance programme guides | The service must not publish or pre-announce an order of songs or when particular recordings will be played |
Repetition Limits
| Rule | Limit |
|---|---|
| Same artist per hour | No more than 4 songs by the same artist |
| Same album per hour | No more than 3 songs from one album |
| Consecutive from same album | No more than 2 songs from one album played consecutively |
| Same compilation per hour | No more than 4 songs from a compilation |
| Consecutive from same compilation | No more than 3 songs from a compilation played consecutively |
User Interaction Rules
| Rule | Limit |
|---|---|
| Forward skips | No more than 6 forward skips per hour |
| Rewinding | Not permitted |
| Offline caching | Tracks cannot be cached locally for offline listening |
Programme Length Rules
| Rule | Requirement |
|---|---|
| Continuous looped programmes | Must be at least 3 hours long |
| Archived programmes | Must be at least 5 hours long and cannot be available for more than 2 weeks |
Building DMCA Radio with Tuned Global APIs
A DMCA-compliant radio implementation typically involves four layers:
- Station and playlist management — curate and retrieve radio stations
- DMCA validation — verify playlists comply with DMCA rules before streaming
- Playback and streaming — deliver audio to the listener
- Play logging — record playback events for royalty reporting
Step 1 — Set Up Stations and Playlists
Use the Metadata API to discover, browse, and retrieve stations and playlists for your radio service.
Retrieve all stations:
curl -X GET "https://api-metadata-connect.tunedglobal.com/api/v2.4/stations?offset=1&count=20" \
-H "StoreId: YOUR_STORE_ID"
Get station detail:
curl -X GET "https://api-metadata-connect.tunedglobal.com/api/v2.4/stations/12345" \
-H "StoreId: YOUR_STORE_ID"
Browse trending stations:
curl -X GET "https://api-metadata-connect.tunedglobal.com/api/v2.4/stations/trending" \
-H "StoreId: YOUR_STORE_ID"
Find similar stations (for "more like this" radio continuation):
curl -X GET "https://api-metadata-connect.tunedglobal.com/api/v2.4/stations/12345/similar" \
-H "StoreId: YOUR_STORE_ID"
Browse playlists by tag (for genre or mood-based radio):
curl -X GET "https://api-metadata-connect.tunedglobal.com/api/v2.4/playlists/by-tags?filter.tags=Chill,Acoustic&filter.sortType=Popularity&filter.count=10" \
-H "StoreId: YOUR_STORE_ID"
Retrieve playlist tracks:
curl -X GET "https://api-metadata-connect.tunedglobal.com/api/v2.4/playlists/12345/tracks?offset=1&count=50" \
-H "StoreId: YOUR_STORE_ID"
Key Station & Playlist Endpoints (Metadata API v2.4)
| Endpoint | Method | Description |
|---|---|---|
/api/v2.4/stations |
GET | Retrieve all stations |
/api/v2.4/stations/{id} |
GET | Station detail |
/api/v2.4/stations/trending |
GET | Trending stations |
/api/v2.4/stations/{id}/similar |
GET | Similar stations |
/api/v2.4/stations/trendingartists |
GET | Top 20 artists by liked songs |
/api/v2.4/stations/stationtrendingartists?id={id} |
GET | Top trending artists in a station |
/api/v2.4/stations/{id}/identifiers |
GET | Station identifiers |
/api/v2.4/search/stations?q={query} |
GET | Search stations |
/api/v2.4/playlists/{id} |
GET | Playlist detail |
/api/v2.4/playlists/{id}/tracks |
GET | Playlist tracks |
/api/v2.4/playlists/by-tags |
GET | Playlists by tag |
/api/v2.4/playlists/trending |
GET | Trending playlists |
/api/v2.4/playlists |
GET | All published playlists |
/api/v2.4/search/playlists?q={query} |
GET | Search playlists |
Step 2 — Validate DMCA Compliance
Before streaming a playlist as a radio station, validate it against DMCA rules using the dedicated validation endpoint.
Validate a playlist for DMCA compliance:
curl -X GET "https://api-metadata-connect.tunedglobal.com/api/v2.4/playlists/12345/validate-for-dmca" \
-H "StoreId: YOUR_STORE_ID"
This endpoint checks the playlist's track sequence against DMCA repetition and programming rules, and reports whether the playlist is compliant.
| Endpoint | Method | Description |
|---|---|---|
/api/v2.4/playlists/{id}/validate-for-dmca |
GET | Validate playlist against DMCA rules |
Recommendation: Always validate before streaming. Run this check whenever a playlist is updated or before it enters rotation in your radio service.
Step 3 — Manage Playback Queue
Use the Services API queue endpoints to manage the listener's now-playing experience. The queue system supports groups, shuffle, repeat, and crossfade modes.
Set up a queue from a station or playlist:
curl -X PUT "https://api-services-connect.tunedglobal.com/api/v3/queue" \
-H "StoreId: YOUR_STORE_ID" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"groups": [...]}'
Get currently playing track:
curl -X GET "https://api-services-connect.tunedglobal.com/api/v3/queue/playing" \
-H "StoreId: YOUR_STORE_ID" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Key Queue Endpoints (Services API v3)
| Endpoint | Method | Description |
|---|---|---|
/api/v3/queue |
GET | Retrieve now-playing queue |
/api/v3/queue |
PUT | Replace entire queue |
/api/v3/queue/playing |
GET | Get currently playing item |
/api/v3/queue/playing |
PUT | Set currently playing item |
/api/v3/queue/groups/{id} |
PUT | Add a group to the queue |
/api/v3/queue/groups/{id}/tracks |
GET | Get tracks in a queue group |
/api/v3/queue/groups/{id}/tracks |
POST | Add tracks to a queue group |
/api/v3/queue/shuffle/{mode} |
PUT | Set shuffle mode |
/api/v3/queue/repeat/{mode} |
PUT | Set repeat mode |
/api/v3/queue/crossfade/{mode} |
PUT | Set crossfade mode |
/api/v3/queue/tracks |
POST | Add tracks to queue |
/api/v3/queue/tracks |
DELETE | Remove tracks from queue |
/api/v3/queue/tracks |
PATCH | Reorder tracks in queue |
Step 4 — Stream and Log Playback
Authenticate, stream tracks, and log every play event. Accurate play logging is critical for DMCA compliance — SoundExchange and the PROs require detailed reports to calculate and distribute royalties.
Authenticate:
curl -X POST "https://api-authentication-connect.tunedglobal.com/oauth2/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET"
Request a stream token:
curl -X POST "https://api-services-connect.tunedglobal.com/api/v3/plays/{deviceId}/{trackId}/token" \
-H "StoreId: YOUR_STORE_ID" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Start a stream:
curl -X POST "https://api-services-connect.tunedglobal.com/api/v3/plays/{deviceId}/{trackId}/stream" \
-H "StoreId: YOUR_STORE_ID" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Log the play event:
curl -X POST "https://api-services-connect.tunedglobal.com/api/v3/plays/{deviceId}" \
-H "StoreId: YOUR_STORE_ID" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"trackId": 12345, "duration": 210, "completed": true}'
Key Playback Endpoints (Services API v3)
| Endpoint | Method | Description |
|---|---|---|
/api/v3/plays/{deviceId}/{trackId}/token |
POST | Request stream security token |
/api/v3/plays/{deviceId}/{trackId}/stream |
POST | Prepare and start a stream |
/api/v3/plays/{deviceId} |
POST | Log a play event |
/api/v3/plays/{deviceId}/offline |
POST | Log plays that occurred offline |
/api/v3/plays/playhistory |
GET | Retrieve user play history |
/api/v3/plays/remaining |
GET | Get remaining plays for user |
Step 5 — Enforce Skip Limits
DMCA allows no more than 6 forward skips per hour and no rewinding. Your client application must enforce this — track skip count per rolling hour window and disable the skip button when the limit is reached.
This is a client-side responsibility. Tuned Global does not enforce skip limits at the API level.
Recommended Implementation Flow
1. Authenticate POST /oauth2/token
2. Browse stations GET /api/v2.4/stations or /stations/trending
3. Get playlist tracks GET /api/v2.4/playlists/{id}/tracks
4. Validate for DMCA GET /api/v2.4/playlists/{id}/validate-for-dmca
5. Build queue PUT /api/v3/queue
6. Stream track POST /api/v3/plays/{deviceId}/{trackId}/stream
7. Log play POST /api/v3/plays/{deviceId}
8. Enforce skip limits Client-side (max 6 per hour, no rewind)
9. Repeat from step 6
Compliance Checklist
Before launching a DMCA radio service, confirm:
- [ ] Notice of Use filed with the US Copyright Office
- [ ] SoundExchange classification determined and Statement of Account filed
- [ ] PRO licenses obtained (ASCAP, BMI, SESAC)
- [ ] Label approval obtained via Tuned Global
- [ ] Playlist DMCA validation passing (
/playlists/{id}/validate-for-dmca) - [ ] Skip limits enforced (max 6 forward skips per hour, no rewind)
- [ ] No on-demand playback, no user-created playlist listening
- [ ] No advance programme guides or pre-announced track orders
- [ ] No offline caching of tracks
- [ ] Looped programmes at least 3 hours, archived programmes at least 5 hours
- [ ] Play logging active for all streams
- [ ] Royalty reporting configured for SoundExchange and PROs
Swagger References
- Metadata API (v2.4) — Stations, playlists, DMCA validation, search
- Services API (v3) — Queue management, streaming, play logging
