Skip to content

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 usage must be sent in snake_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

{
  "jsonapi": {
    "version": "1.0"
  },
  "errors": [
    {
      "status": "404",
      "title": "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

{
  "jsonapi": {
    "version": "1.0"
  },
  "errors": [
    {
      "status": "404",
      "title": "Not Found"
    }
  ]
}