TrackOffer¶
A track offer is a per-track override inside an Offer. It fine-tunes distribution settings (usage, options, release date) for a single track within an offer — most notably usage.copy_scan to opt a track out of fingerprint DSP scanning. This resource supports full CRUD.
Note: Keys inside
usagemust be sent insnake_case(e.g.copy_scan,on_demand_stream).
Lists TrackOffers¶
GET https://domain.com/api/v1/track-offers
Headers¶
| Name | Type | Description |
|---|---|---|
| Authorization* | String | Bearer \ |
| Content-Type* | String | application/vnd.api+json |
Response — 200 OK
{
"data": [
{
"type": "track-offers",
"id": "<ID>",
"attributes": {
"usage": { "copy_scan": false },
"release-date": null,
"created-at": "2026-04-20T10:30:00.000000Z",
"updated-at": "2026-04-20T10:30:00.000000Z"
},
"relationships": {
"track": {
"links": {
"related": "https://domain.com/api/v1/track-offers/<ID>/track",
"self": "https://domain.com/api/v1/track-offers/<ID>/relationships/track"
}
},
"offer": {
"links": {
"related": "https://domain.com/api/v1/track-offers/<ID>/offer",
"self": "https://domain.com/api/v1/track-offers/<ID>/relationships/offer"
}
}
},
"links": {
"self": "https://domain.com/api/v1/track-offers/<ID>"
}
}
],
"meta": {
"page": {
"currentPage": 1,
"from": 1,
"lastPage": 1,
"perPage": 20,
"to": 1,
"total": 1
}
},
"jsonapi": {
"version": "1.0"
},
"links": {
"first": "https://domain.com/api/v1/track-offers?page[number]=1&page[size]=20",
"last": "https://domain.com/api/v1/track-offers?page[number]=1&page[size]=20"
}
}
Filters¶
| Filter | Example |
|---|---|
| ID | /track-offers?filter[id]=1,2,3 |
| Track ID | /track-offers?filter[track-id]=123 |
| Offer ID | /track-offers?filter[offer-id]=456 |
Get TrackOffer¶
GET https://domain.com/api/v1/track-offers/:id
Path Parameters¶
| Name | Type | Description |
|---|---|---|
| id* | Number | TrackOffer ID |
Headers¶
| Name | Type | Description |
|---|---|---|
| Authorization* | String | Bearer \ |
| Content-Type* | String | application/vnd.api+json |
Response — 200 OK
{
"data": {
"type": "track-offers",
"id": "<ID>",
"attributes": {
"usage": { "copy_scan": false },
"release-date": null,
"created-at": "2026-04-20T10:30:00.000000Z",
"updated-at": "2026-04-20T10:30:00.000000Z"
},
"relationships": {
"track": {
"links": {
"related": "https://domain.com/api/v1/track-offers/<ID>/track",
"self": "https://domain.com/api/v1/track-offers/<ID>/relationships/track"
}
},
"offer": {
"links": {
"related": "https://domain.com/api/v1/track-offers/<ID>/offer",
"self": "https://domain.com/api/v1/track-offers/<ID>/relationships/offer"
}
}
},
"links": {
"self": "https://domain.com/api/v1/track-offers/<ID>"
}
},
"jsonapi": {
"version": "1.0"
},
"links": {
"self": "https://domain.com/api/v1/track-offers/<ID>"
}
}
Response — 404 Not Found
Create TrackOffer¶
POST https://domain.com/api/v1/track-offers
To opt a track out of fingerprint scanning, send usage: { "copy_scan": false }. No track offer at all means the track IS scanned.
Headers¶
| Name | Type | Description |
|---|---|---|
| Authorization* | String | Bearer \ |
| Content-Type* | String | application/vnd.api+json |
Request Body¶
| Name | Required | Type | Description |
|---|---|---|---|
| track | Yes | Object | Track resource (relationship) |
| offer | Yes | Object | Offer resource (relationship) |
| usage | No | Object | Per-track usage overrides (snake_case keys), e.g. { "copy_scan": false } |
| release-date | No | String | Per-track release date override |
Response — 201 Created
{
"data": {
"type": "track-offers",
"id": "<ID>",
"attributes": {
"usage": { "copy_scan": false },
"release-date": null,
"created-at": "2026-05-27T12:00:00.000000Z",
"updated-at": "2026-05-27T12:00:00.000000Z"
},
"relationships": {
"track": {
"links": {
"related": "https://domain.com/api/v1/track-offers/<ID>/track",
"self": "https://domain.com/api/v1/track-offers/<ID>/relationships/track"
}
},
"offer": {
"links": {
"related": "https://domain.com/api/v1/track-offers/<ID>/offer",
"self": "https://domain.com/api/v1/track-offers/<ID>/relationships/offer"
}
}
},
"links": {
"self": "https://domain.com/api/v1/track-offers/<ID>"
}
},
"jsonapi": {
"version": "1.0"
},
"links": {
"self": "https://domain.com/api/v1/track-offers/<ID>"
}
}
Response — 422 Unprocessable Entity
{
"jsonapi": {
"version": "1.0"
},
"errors": [
{
"detail": "The track field is required.",
"source": {
"pointer": "/data/relationships/track"
},
"status": "422",
"title": "Unprocessable Entity"
}
]
}
Update TrackOffer¶
PATCH https://domain.com/api/v1/track-offers/:id
Path Parameters¶
| Name | Type | Description |
|---|---|---|
| id* | Number | TrackOffer ID |
Headers¶
| Name | Type | Description |
|---|---|---|
| Authorization* | String | Bearer \ |
| Content-Type* | String | application/vnd.api+json |
Request Body¶
All fields are optional on PATCH; omitted attributes keep their current values.
| Name | Required | Type | Description |
|---|---|---|---|
| usage | No | Object | Per-track usage overrides (snake_case keys) |
| release-date | No | String | Per-track release date override |
Response — 200 OK
{
"data": {
"type": "track-offers",
"id": "<ID>",
"attributes": {
"usage": { "copy_scan": true },
"release-date": null,
"created-at": "2026-04-20T10:30:00.000000Z",
"updated-at": "2026-04-20T11:00:00.000000Z"
},
"relationships": {
"track": {
"links": {
"related": "https://domain.com/api/v1/track-offers/<ID>/track",
"self": "https://domain.com/api/v1/track-offers/<ID>/relationships/track"
}
},
"offer": {
"links": {
"related": "https://domain.com/api/v1/track-offers/<ID>/offer",
"self": "https://domain.com/api/v1/track-offers/<ID>/relationships/offer"
}
}
},
"links": {
"self": "https://domain.com/api/v1/track-offers/<ID>"
}
},
"jsonapi": {
"version": "1.0"
},
"links": {
"self": "https://domain.com/api/v1/track-offers/<ID>"
}
}
Delete TrackOffer¶
DELETE https://domain.com/api/v1/track-offers/:id
To re-enable a track that was opted out of fingerprint scanning, delete its track offer (preferred) or update it back to copy_scan: true.
Path Parameters¶
| Name | Type | Description |
|---|---|---|
| id* | Number | TrackOffer ID |
Headers¶
| Name | Type | Description |
|---|---|---|
| Authorization* | String | Bearer \ |
| Content-Type* | String | application/vnd.api+json |
Response — 204 No Content (delete OK, empty body)
Response — 404 Not Found