naftiko: 1.0.0-alpha2 info: label: TIDAL Catalog API — Tracks description: TIDAL Catalog API — Tracks. 40 operations. Self-contained Naftiko capability covering one TIDAL business surface. tags: - TIDAL - Music - tracks - trackStatistics - tracksMetadataStatus - credits - lyrics created: '2026-05-25' modified: '2026-05-25' binds: - namespace: env keys: TIDAL_ACCESS_TOKEN: TIDAL_ACCESS_TOKEN capability: consumes: - type: http namespace: catalog-tracks baseUri: https://openapi.tidal.com description: TIDAL Catalog API — Tracks business capability. Self-contained, no shared references. resources: - name: credits path: /credits operations: - name: getcredits method: GET description: Get multiple credits. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: include in: query type: array description: 'Allows the client to customize which related resources should be returned. Available options: artist, category' required: false - name: filter[id] in: query type: array description: List of credit IDs (e.g. `3fG7kLmN2pQrStUv`) required: false - name: credits-id path: /credits/{id} operations: - name: getcredits method: GET description: Get single credit. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string description: Credit id required: true - name: include in: query type: array description: 'Allows the client to customize which related resources should be returned. Available options: artist, category' required: false - name: credits-id-relationships-artist path: /credits/{id}/relationships/artist operations: - name: getcredits method: GET description: Get artist relationship ("to-one"). outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string description: Credit id required: true - name: include in: query type: array description: 'Allows the client to customize which related resources should be returned. Available options: artist' required: false - name: credits-id-relationships-category path: /credits/{id}/relationships/category operations: - name: getcredits method: GET description: Get category relationship ("to-one"). outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string description: Credit id required: true - name: include in: query type: array description: 'Allows the client to customize which related resources should be returned. Available options: category' required: false - name: lyrics path: /lyrics operations: - name: getlyrics method: GET description: Get multiple lyrics. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: include in: query type: array description: 'Allows the client to customize which related resources should be returned. Available options: owners, track' required: false - name: filter[id] in: query type: array description: Lyrics Id (e.g. `nejMcAhh5N8S3EQ4LaqysVdI0cZZ`) required: false - name: postlyrics method: POST description: Create single lyric. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: body in: body type: object description: JSON:API document request body. required: true - name: lyrics-id path: /lyrics/{id} operations: - name: deletelyrics method: DELETE description: Delete single lyric. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string description: Lyrics Id required: true - name: getlyrics method: GET description: Get single lyric. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string description: Lyrics Id required: true - name: include in: query type: array description: 'Allows the client to customize which related resources should be returned. Available options: owners, track' required: false - name: patchlyrics method: PATCH description: Update single lyric. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string description: Lyrics Id required: true - name: body in: body type: object description: JSON:API document request body. required: true - name: lyrics-id-relationships-owners path: /lyrics/{id}/relationships/owners operations: - name: getlyrics method: GET description: Get owners relationship ("to-many"). outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string description: Lyrics Id required: true - name: countryCode in: query type: string description: ISO 3166-1 alpha-2 country code required: false - name: include in: query type: array description: 'Allows the client to customize which related resources should be returned. Available options: owners' required: false - name: page[cursor] in: query type: string description: Server-generated cursor value pointing a certain page of items. Optional, targets first page if not specified required: false - name: lyrics-id-relationships-track path: /lyrics/{id}/relationships/track operations: - name: getlyrics method: GET description: Get track relationship ("to-one"). outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string description: Lyrics Id required: true - name: countryCode in: query type: string description: ISO 3166-1 alpha-2 country code required: false - name: include in: query type: array description: 'Allows the client to customize which related resources should be returned. Available options: track' required: false - name: trackStatistics path: /trackStatistics operations: - name: gettrackstatistics method: GET description: Get multiple trackStatistics. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: include in: query type: array description: 'Allows the client to customize which related resources should be returned. Available options: owners' required: false - name: filter[id] in: query type: array description: List of track IDs (e.g. `75413016`) required: false - name: trackStatistics-id path: /trackStatistics/{id} operations: - name: gettrackstatistics method: GET description: Get single trackStatistic. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string description: Track statistic id required: true - name: include in: query type: array description: 'Allows the client to customize which related resources should be returned. Available options: owners' required: false - name: trackStatistics-id-relationships-owners path: /trackStatistics/{id}/relationships/owners operations: - name: gettrackstatistics method: GET description: Get owners relationship ("to-many"). outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string description: Track statistic id required: true - name: include in: query type: array description: 'Allows the client to customize which related resources should be returned. Available options: owners' required: false - name: page[cursor] in: query type: string description: Server-generated cursor value pointing a certain page of items. Optional, targets first page if not specified required: false - name: tracks path: /tracks operations: - name: gettracks method: GET description: Get multiple tracks. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: page[cursor] in: query type: string description: Server-generated cursor value pointing a certain page of items. Optional, targets first page if not specified required: false - name: sort in: query type: array description: Values prefixed with "-" are sorted descending; values without it are sorted ascending. required: false - name: countryCode in: query type: string description: ISO 3166-1 alpha-2 country code required: false - name: include in: query type: array description: 'Allows the client to customize which related resources should be returned. Available options: albums, artists, credits, download, genres, lyrics, meta' required: false - name: filter[id] in: query type: array description: List of track IDs (e.g. `75413016`) required: false - name: filter[isrc] in: query type: array description: List of ISRCs. When a single ISRC is provided, pagination is supported and multiple tracks may be returned. When multiple ISRCs are provided, one trac required: false - name: filter[owners.id] in: query type: array description: User id. Use `me` for the authenticated user required: false - name: shareCode in: query type: string description: Share code that grants access to UNLISTED resources. When provided, allows non-owners to access resources that would otherwise be restricted. required: false - name: posttracks method: POST description: Create single track. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: body in: body type: object description: JSON:API document request body. required: true - name: tracks-id path: /tracks/{id} operations: - name: deletetracks method: DELETE description: Delete single track. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string description: Track id required: true - name: gettracks method: GET description: Get single track. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string description: Track id required: true - name: countryCode in: query type: string description: ISO 3166-1 alpha-2 country code required: false - name: include in: query type: array description: 'Allows the client to customize which related resources should be returned. Available options: albums, artists, credits, download, genres, lyrics, meta' required: false - name: shareCode in: query type: string description: Share code that grants access to UNLISTED resources. When provided, allows non-owners to access resources that would otherwise be restricted. required: false - name: patchtracks method: PATCH description: Update single track. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string description: Track id required: true - name: body in: body type: object description: JSON:API document request body. required: true - name: tracks-id-relationships-albums path: /tracks/{id}/relationships/albums operations: - name: gettracks method: GET description: Get albums relationship ("to-many"). outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string description: Track id required: true - name: countryCode in: query type: string description: ISO 3166-1 alpha-2 country code required: false - name: include in: query type: array description: 'Allows the client to customize which related resources should be returned. Available options: albums' required: false - name: page[cursor] in: query type: string description: Server-generated cursor value pointing a certain page of items. Optional, targets first page if not specified required: false - name: shareCode in: query type: string description: Share code that grants access to UNLISTED resources. When provided, allows non-owners to access resources that would otherwise be restricted. required: false - name: patchtracks method: PATCH description: Update albums relationship ("to-many"). outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string description: Track id required: true - name: body in: body type: object description: JSON:API document request body. required: true - name: tracks-id-relationships-artists path: /tracks/{id}/relationships/artists operations: - name: gettracks method: GET description: Get artists relationship ("to-many"). outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string description: Track id required: true - name: page[cursor] in: query type: string description: Server-generated cursor value pointing a certain page of items. Optional, targets first page if not specified required: false - name: countryCode in: query type: string description: ISO 3166-1 alpha-2 country code required: false - name: include in: query type: array description: 'Allows the client to customize which related resources should be returned. Available options: artists' required: false - name: shareCode in: query type: string description: Share code that grants access to UNLISTED resources. When provided, allows non-owners to access resources that would otherwise be restricted. required: false - name: tracks-id-relationships-credits path: /tracks/{id}/relationships/credits operations: - name: gettracks method: GET description: Get credits relationship ("to-many"). outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string description: Track id required: true - name: page[cursor] in: query type: string description: Server-generated cursor value pointing a certain page of items. Optional, targets first page if not specified required: false - name: include in: query type: array description: 'Allows the client to customize which related resources should be returned. Available options: credits' required: false - name: shareCode in: query type: string description: Share code that grants access to UNLISTED resources. When provided, allows non-owners to access resources that would otherwise be restricted. required: false - name: tracks-id-relationships-download path: /tracks/{id}/relationships/download operations: - name: gettracks method: GET description: Get download relationship ("to-one"). outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string description: Track id required: true - name: include in: query type: array description: 'Allows the client to customize which related resources should be returned. Available options: download' required: false - name: shareCode in: query type: string description: Share code that grants access to UNLISTED resources. When provided, allows non-owners to access resources that would otherwise be restricted. required: false - name: tracks-id-relationships-genres path: /tracks/{id}/relationships/genres operations: - name: gettracks method: GET description: Get genres relationship ("to-many"). outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string description: Track id required: true - name: countryCode in: query type: string description: ISO 3166-1 alpha-2 country code required: false - name: include in: query type: array description: 'Allows the client to customize which related resources should be returned. Available options: genres' required: false - name: page[cursor] in: query type: string description: Server-generated cursor value pointing a certain page of items. Optional, targets first page if not specified required: false - name: shareCode in: query type: string description: Share code that grants access to UNLISTED resources. When provided, allows non-owners to access resources that would otherwise be restricted. required: false - name: tracks-id-relationships-lyrics path: /tracks/{id}/relationships/lyrics operations: - name: gettracks method: GET description: Get lyrics relationship ("to-many"). outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string description: Track id required: true - name: include in: query type: array description: 'Allows the client to customize which related resources should be returned. Available options: lyrics' required: false - name: page[cursor] in: query type: string description: Server-generated cursor value pointing a certain page of items. Optional, targets first page if not specified required: false - name: shareCode in: query type: string description: Share code that grants access to UNLISTED resources. When provided, allows non-owners to access resources that would otherwise be restricted. required: false - name: tracks-id-relationships-metadataStatus path: /tracks/{id}/relationships/metadataStatus operations: - name: gettracks method: GET description: Get metadataStatus relationship ("to-one"). outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string description: Track id required: true - name: include in: query type: array description: 'Allows the client to customize which related resources should be returned. Available options: metadataStatus' required: false - name: shareCode in: query type: string description: Share code that grants access to UNLISTED resources. When provided, allows non-owners to access resources that would otherwise be restricted. required: false - name: tracks-id-relationships-owners path: /tracks/{id}/relationships/owners operations: - name: gettracks method: GET description: Get owners relationship ("to-many"). outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string description: Track id required: true - name: include in: query type: array description: 'Allows the client to customize which related resources should be returned. Available options: owners' required: false - name: page[cursor] in: query type: string description: Server-generated cursor value pointing a certain page of items. Optional, targets first page if not specified required: false - name: shareCode in: query type: string description: Share code that grants access to UNLISTED resources. When provided, allows non-owners to access resources that would otherwise be restricted. required: false - name: tracks-id-relationships-priceConfig path: /tracks/{id}/relationships/priceConfig operations: - name: gettracks method: GET description: Get priceConfig relationship ("to-one"). outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string description: Track id required: true - name: countryCode in: query type: string description: ISO 3166-1 alpha-2 country code required: false - name: include in: query type: array description: 'Allows the client to customize which related resources should be returned. Available options: priceConfig' required: false - name: shareCode in: query type: string description: Share code that grants access to UNLISTED resources. When provided, allows non-owners to access resources that would otherwise be restricted. required: false - name: tracks-id-relationships-providers path: /tracks/{id}/relationships/providers operations: - name: gettracks method: GET description: Get providers relationship ("to-many"). outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string description: Track id required: true - name: countryCode in: query type: string description: ISO 3166-1 alpha-2 country code required: false - name: include in: query type: array description: 'Allows the client to customize which related resources should be returned. Available options: providers' required: false - name: page[cursor] in: query type: string description: Server-generated cursor value pointing a certain page of items. Optional, targets first page if not specified required: false - name: shareCode in: query type: string description: Share code that grants access to UNLISTED resources. When provided, allows non-owners to access resources that would otherwise be restricted. required: false - name: tracks-id-relationships-radio path: /tracks/{id}/relationships/radio operations: - name: gettracks method: GET description: Get radio relationship ("to-many"). outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string description: Track id required: true - name: include in: query type: array description: 'Allows the client to customize which related resources should be returned. Available options: radio' required: false - name: page[cursor] in: query type: string description: Server-generated cursor value pointing a certain page of items. Optional, targets first page if not specified required: false - name: shareCode in: query type: string description: Share code that grants access to UNLISTED resources. When provided, allows non-owners to access resources that would otherwise be restricted. required: false - name: tracks-id-relationships-replacement path: /tracks/{id}/relationships/replacement operations: - name: gettracks method: GET description: Get replacement relationship ("to-one"). outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string description: Track id required: true - name: countryCode in: query type: string description: ISO 3166-1 alpha-2 country code required: false - name: include in: query type: array description: 'Allows the client to customize which related resources should be returned. Available options: replacement' required: false - name: shareCode in: query type: string description: Share code that grants access to UNLISTED resources. When provided, allows non-owners to access resources that would otherwise be restricted. required: false - name: tracks-id-relationships-shares path: /tracks/{id}/relationships/shares operations: - name: gettracks method: GET description: Get shares relationship ("to-many"). outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string description: Track id required: true - name: include in: query type: array description: 'Allows the client to customize which related resources should be returned. Available options: shares' required: false - name: page[cursor] in: query type: string description: Server-generated cursor value pointing a certain page of items. Optional, targets first page if not specified required: false - name: shareCode in: query type: string description: Share code that grants access to UNLISTED resources. When provided, allows non-owners to access resources that would otherwise be restricted. required: false - name: tracks-id-relationships-similarTracks path: /tracks/{id}/relationships/similarTracks operations: - name: gettracks method: GET description: Get similarTracks relationship ("to-many"). outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string description: Track id required: true - name: page[cursor] in: query type: string description: Server-generated cursor value pointing a certain page of items. Optional, targets first page if not specified required: false - name: countryCode in: query type: string description: ISO 3166-1 alpha-2 country code required: false - name: include in: query type: array description: 'Allows the client to customize which related resources should be returned. Available options: similarTracks' required: false - name: shareCode in: query type: string description: Share code that grants access to UNLISTED resources. When provided, allows non-owners to access resources that would otherwise be restricted. required: false - name: tracks-id-relationships-sourceFile path: /tracks/{id}/relationships/sourceFile operations: - name: gettracks method: GET description: Get sourceFile relationship ("to-one"). outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string description: Track id required: true - name: include in: query type: array description: 'Allows the client to customize which related resources should be returned. Available options: sourceFile' required: false - name: shareCode in: query type: string description: Share code that grants access to UNLISTED resources. When provided, allows non-owners to access resources that would otherwise be restricted. required: false - name: tracks-id-relationships-suggestedTracks path: /tracks/{id}/relationships/suggestedTracks operations: - name: gettracks method: GET description: Get suggestedTracks relationship ("to-many"). outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string description: Track id required: true - name: page[cursor] in: query type: string description: Server-generated cursor value pointing a certain page of items. Optional, targets first page if not specified required: false - name: countryCode in: query type: string description: ISO 3166-1 alpha-2 country code required: false - name: include in: query type: array description: 'Allows the client to customize which related resources should be returned. Available options: suggestedTracks' required: false - name: shareCode in: query type: string description: Share code that grants access to UNLISTED resources. When provided, allows non-owners to access resources that would otherwise be restricted. required: false - name: tracks-id-relationships-trackStatistics path: /tracks/{id}/relationships/trackStatistics operations: - name: gettracks method: GET description: Get trackStatistics relationship ("to-one"). outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string description: Track id required: true - name: include in: query type: array description: 'Allows the client to customize which related resources should be returned. Available options: trackStatistics' required: false - name: shareCode in: query type: string description: Share code that grants access to UNLISTED resources. When provided, allows non-owners to access resources that would otherwise be restricted. required: false - name: tracks-id-relationships-usageRules path: /tracks/{id}/relationships/usageRules operations: - name: gettracks method: GET description: Get usageRules relationship ("to-one"). outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string description: Track id required: true - name: countryCode in: query type: string description: ISO 3166-1 alpha-2 country code required: false - name: include in: query type: array description: 'Allows the client to customize which related resources should be returned. Available options: usageRules' required: false - name: shareCode in: query type: string description: Share code that grants access to UNLISTED resources. When provided, allows non-owners to access resources that would otherwise be restricted. required: false - name: tracksMetadataStatus path: /tracksMetadataStatus operations: - name: gettracksmetadatastatus method: GET description: Get multiple tracksMetadataStatus. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: filter[id] in: query type: array description: List of track IDs (e.g. `75413016`) required: false - name: tracksMetadataStatus-id path: /tracksMetadataStatus/{id} operations: - name: gettracksmetadatastatus method: GET description: Get single tracksMetadataStatu. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: path type: string description: Tracks metadata status id required: true authentication: type: bearer value: '{{env.TIDAL_ACCESS_TOKEN}}' placement: header header: Authorization prefix: 'Bearer ' exposes: - type: rest namespace: catalog-tracks-rest port: 8080 description: REST adapter for TIDAL Catalog API — Tracks. One Spectral-compliant resource per consumed operation, prefixed with /v2. resources: - path: /v2/credits name: credits description: REST surface for credits. operations: - method: GET name: getcredits description: Get multiple credits. call: catalog-tracks.getcredits with: include: rest.query.include filter[id]: rest.query.filter[id] outputParameters: - type: object mapping: $. - path: /v2/credits/{id} name: credits-id description: REST surface for credits-id. operations: - method: GET name: getcredits description: Get single credit. call: catalog-tracks.getcredits with: id: rest.path.id include: rest.query.include outputParameters: - type: object mapping: $. - path: /v2/credits/{id}/relationships/artist name: credits-id-relationships-artist description: REST surface for credits-id-relationships-artist. operations: - method: GET name: getcredits description: Get artist relationship ("to-one"). call: catalog-tracks.getcredits with: id: rest.path.id include: rest.query.include outputParameters: - type: object mapping: $. - path: /v2/credits/{id}/relationships/category name: credits-id-relationships-category description: REST surface for credits-id-relationships-category. operations: - method: GET name: getcredits description: Get category relationship ("to-one"). call: catalog-tracks.getcredits with: id: rest.path.id include: rest.query.include outputParameters: - type: object mapping: $. - path: /v2/lyrics name: lyrics description: REST surface for lyrics. operations: - method: GET name: getlyrics description: Get multiple lyrics. call: catalog-tracks.getlyrics with: include: rest.query.include filter[id]: rest.query.filter[id] outputParameters: - type: object mapping: $. - method: POST name: postlyrics description: Create single lyric. call: catalog-tracks.postlyrics with: body: rest.body outputParameters: - type: object mapping: $. - path: /v2/lyrics/{id} name: lyrics-id description: REST surface for lyrics-id. operations: - method: DELETE name: deletelyrics description: Delete single lyric. call: catalog-tracks.deletelyrics with: id: rest.path.id outputParameters: - type: object mapping: $. - method: GET name: getlyrics description: Get single lyric. call: catalog-tracks.getlyrics with: id: rest.path.id include: rest.query.include outputParameters: - type: object mapping: $. - method: PATCH name: patchlyrics description: Update single lyric. call: catalog-tracks.patchlyrics with: id: rest.path.id body: rest.body outputParameters: - type: object mapping: $. - path: /v2/lyrics/{id}/relationships/owners name: lyrics-id-relationships-owners description: REST surface for lyrics-id-relationships-owners. operations: - method: GET name: getlyrics description: Get owners relationship ("to-many"). call: catalog-tracks.getlyrics with: id: rest.path.id countryCode: rest.query.countryCode include: rest.query.include page[cursor]: rest.query.page[cursor] outputParameters: - type: object mapping: $. - path: /v2/lyrics/{id}/relationships/track name: lyrics-id-relationships-track description: REST surface for lyrics-id-relationships-track. operations: - method: GET name: getlyrics description: Get track relationship ("to-one"). call: catalog-tracks.getlyrics with: id: rest.path.id countryCode: rest.query.countryCode include: rest.query.include outputParameters: - type: object mapping: $. - path: /v2/trackStatistics name: trackStatistics description: REST surface for trackStatistics. operations: - method: GET name: gettrackstatistics description: Get multiple trackStatistics. call: catalog-tracks.gettrackstatistics with: include: rest.query.include filter[id]: rest.query.filter[id] outputParameters: - type: object mapping: $. - path: /v2/trackStatistics/{id} name: trackStatistics-id description: REST surface for trackStatistics-id. operations: - method: GET name: gettrackstatistics description: Get single trackStatistic. call: catalog-tracks.gettrackstatistics with: id: rest.path.id include: rest.query.include outputParameters: - type: object mapping: $. - path: /v2/trackStatistics/{id}/relationships/owners name: trackStatistics-id-relationships-owners description: REST surface for trackStatistics-id-relationships-owners. operations: - method: GET name: gettrackstatistics description: Get owners relationship ("to-many"). call: catalog-tracks.gettrackstatistics with: id: rest.path.id include: rest.query.include page[cursor]: rest.query.page[cursor] outputParameters: - type: object mapping: $. - path: /v2/tracks name: tracks description: REST surface for tracks. operations: - method: GET name: gettracks description: Get multiple tracks. call: catalog-tracks.gettracks with: page[cursor]: rest.query.page[cursor] sort: rest.query.sort countryCode: rest.query.countryCode include: rest.query.include filter[id]: rest.query.filter[id] filter[isrc]: rest.query.filter[isrc] filter[owners.id]: rest.query.filter[owners.id] shareCode: rest.query.shareCode outputParameters: - type: object mapping: $. - method: POST name: posttracks description: Create single track. call: catalog-tracks.posttracks with: body: rest.body outputParameters: - type: object mapping: $. - path: /v2/tracks/{id} name: tracks-id description: REST surface for tracks-id. operations: - method: DELETE name: deletetracks description: Delete single track. call: catalog-tracks.deletetracks with: id: rest.path.id outputParameters: - type: object mapping: $. - method: GET name: gettracks description: Get single track. call: catalog-tracks.gettracks with: id: rest.path.id countryCode: rest.query.countryCode include: rest.query.include shareCode: rest.query.shareCode outputParameters: - type: object mapping: $. - method: PATCH name: patchtracks description: Update single track. call: catalog-tracks.patchtracks with: id: rest.path.id body: rest.body outputParameters: - type: object mapping: $. - path: /v2/tracks/{id}/relationships/albums name: tracks-id-relationships-albums description: REST surface for tracks-id-relationships-albums. operations: - method: GET name: gettracks description: Get albums relationship ("to-many"). call: catalog-tracks.gettracks with: id: rest.path.id countryCode: rest.query.countryCode include: rest.query.include page[cursor]: rest.query.page[cursor] shareCode: rest.query.shareCode outputParameters: - type: object mapping: $. - method: PATCH name: patchtracks description: Update albums relationship ("to-many"). call: catalog-tracks.patchtracks with: id: rest.path.id body: rest.body outputParameters: - type: object mapping: $. - path: /v2/tracks/{id}/relationships/artists name: tracks-id-relationships-artists description: REST surface for tracks-id-relationships-artists. operations: - method: GET name: gettracks description: Get artists relationship ("to-many"). call: catalog-tracks.gettracks with: id: rest.path.id page[cursor]: rest.query.page[cursor] countryCode: rest.query.countryCode include: rest.query.include shareCode: rest.query.shareCode outputParameters: - type: object mapping: $. - path: /v2/tracks/{id}/relationships/credits name: tracks-id-relationships-credits description: REST surface for tracks-id-relationships-credits. operations: - method: GET name: gettracks description: Get credits relationship ("to-many"). call: catalog-tracks.gettracks with: id: rest.path.id page[cursor]: rest.query.page[cursor] include: rest.query.include shareCode: rest.query.shareCode outputParameters: - type: object mapping: $. - path: /v2/tracks/{id}/relationships/download name: tracks-id-relationships-download description: REST surface for tracks-id-relationships-download. operations: - method: GET name: gettracks description: Get download relationship ("to-one"). call: catalog-tracks.gettracks with: id: rest.path.id include: rest.query.include shareCode: rest.query.shareCode outputParameters: - type: object mapping: $. - path: /v2/tracks/{id}/relationships/genres name: tracks-id-relationships-genres description: REST surface for tracks-id-relationships-genres. operations: - method: GET name: gettracks description: Get genres relationship ("to-many"). call: catalog-tracks.gettracks with: id: rest.path.id countryCode: rest.query.countryCode include: rest.query.include page[cursor]: rest.query.page[cursor] shareCode: rest.query.shareCode outputParameters: - type: object mapping: $. - path: /v2/tracks/{id}/relationships/lyrics name: tracks-id-relationships-lyrics description: REST surface for tracks-id-relationships-lyrics. operations: - method: GET name: gettracks description: Get lyrics relationship ("to-many"). call: catalog-tracks.gettracks with: id: rest.path.id include: rest.query.include page[cursor]: rest.query.page[cursor] shareCode: rest.query.shareCode outputParameters: - type: object mapping: $. - path: /v2/tracks/{id}/relationships/metadataStatus name: tracks-id-relationships-metadataStatus description: REST surface for tracks-id-relationships-metadataStatus. operations: - method: GET name: gettracks description: Get metadataStatus relationship ("to-one"). call: catalog-tracks.gettracks with: id: rest.path.id include: rest.query.include shareCode: rest.query.shareCode outputParameters: - type: object mapping: $. - path: /v2/tracks/{id}/relationships/owners name: tracks-id-relationships-owners description: REST surface for tracks-id-relationships-owners. operations: - method: GET name: gettracks description: Get owners relationship ("to-many"). call: catalog-tracks.gettracks with: id: rest.path.id include: rest.query.include page[cursor]: rest.query.page[cursor] shareCode: rest.query.shareCode outputParameters: - type: object mapping: $. - path: /v2/tracks/{id}/relationships/priceConfig name: tracks-id-relationships-priceConfig description: REST surface for tracks-id-relationships-priceConfig. operations: - method: GET name: gettracks description: Get priceConfig relationship ("to-one"). call: catalog-tracks.gettracks with: id: rest.path.id countryCode: rest.query.countryCode include: rest.query.include shareCode: rest.query.shareCode outputParameters: - type: object mapping: $. - path: /v2/tracks/{id}/relationships/providers name: tracks-id-relationships-providers description: REST surface for tracks-id-relationships-providers. operations: - method: GET name: gettracks description: Get providers relationship ("to-many"). call: catalog-tracks.gettracks with: id: rest.path.id countryCode: rest.query.countryCode include: rest.query.include page[cursor]: rest.query.page[cursor] shareCode: rest.query.shareCode outputParameters: - type: object mapping: $. - path: /v2/tracks/{id}/relationships/radio name: tracks-id-relationships-radio description: REST surface for tracks-id-relationships-radio. operations: - method: GET name: gettracks description: Get radio relationship ("to-many"). call: catalog-tracks.gettracks with: id: rest.path.id include: rest.query.include page[cursor]: rest.query.page[cursor] shareCode: rest.query.shareCode outputParameters: - type: object mapping: $. - path: /v2/tracks/{id}/relationships/replacement name: tracks-id-relationships-replacement description: REST surface for tracks-id-relationships-replacement. operations: - method: GET name: gettracks description: Get replacement relationship ("to-one"). call: catalog-tracks.gettracks with: id: rest.path.id countryCode: rest.query.countryCode include: rest.query.include shareCode: rest.query.shareCode outputParameters: - type: object mapping: $. - path: /v2/tracks/{id}/relationships/shares name: tracks-id-relationships-shares description: REST surface for tracks-id-relationships-shares. operations: - method: GET name: gettracks description: Get shares relationship ("to-many"). call: catalog-tracks.gettracks with: id: rest.path.id include: rest.query.include page[cursor]: rest.query.page[cursor] shareCode: rest.query.shareCode outputParameters: - type: object mapping: $. - path: /v2/tracks/{id}/relationships/similarTracks name: tracks-id-relationships-similarTracks description: REST surface for tracks-id-relationships-similarTracks. operations: - method: GET name: gettracks description: Get similarTracks relationship ("to-many"). call: catalog-tracks.gettracks with: id: rest.path.id page[cursor]: rest.query.page[cursor] countryCode: rest.query.countryCode include: rest.query.include shareCode: rest.query.shareCode outputParameters: - type: object mapping: $. - path: /v2/tracks/{id}/relationships/sourceFile name: tracks-id-relationships-sourceFile description: REST surface for tracks-id-relationships-sourceFile. operations: - method: GET name: gettracks description: Get sourceFile relationship ("to-one"). call: catalog-tracks.gettracks with: id: rest.path.id include: rest.query.include shareCode: rest.query.shareCode outputParameters: - type: object mapping: $. - path: /v2/tracks/{id}/relationships/suggestedTracks name: tracks-id-relationships-suggestedTracks description: REST surface for tracks-id-relationships-suggestedTracks. operations: - method: GET name: gettracks description: Get suggestedTracks relationship ("to-many"). call: catalog-tracks.gettracks with: id: rest.path.id page[cursor]: rest.query.page[cursor] countryCode: rest.query.countryCode include: rest.query.include shareCode: rest.query.shareCode outputParameters: - type: object mapping: $. - path: /v2/tracks/{id}/relationships/trackStatistics name: tracks-id-relationships-trackStatistics description: REST surface for tracks-id-relationships-trackStatistics. operations: - method: GET name: gettracks description: Get trackStatistics relationship ("to-one"). call: catalog-tracks.gettracks with: id: rest.path.id include: rest.query.include shareCode: rest.query.shareCode outputParameters: - type: object mapping: $. - path: /v2/tracks/{id}/relationships/usageRules name: tracks-id-relationships-usageRules description: REST surface for tracks-id-relationships-usageRules. operations: - method: GET name: gettracks description: Get usageRules relationship ("to-one"). call: catalog-tracks.gettracks with: id: rest.path.id countryCode: rest.query.countryCode include: rest.query.include shareCode: rest.query.shareCode outputParameters: - type: object mapping: $. - path: /v2/tracksMetadataStatus name: tracksMetadataStatus description: REST surface for tracksMetadataStatus. operations: - method: GET name: gettracksmetadatastatus description: Get multiple tracksMetadataStatus. call: catalog-tracks.gettracksmetadatastatus with: filter[id]: rest.query.filter[id] outputParameters: - type: object mapping: $. - path: /v2/tracksMetadataStatus/{id} name: tracksMetadataStatus-id description: REST surface for tracksMetadataStatus-id. operations: - method: GET name: gettracksmetadatastatus description: Get single tracksMetadataStatu. call: catalog-tracks.gettracksmetadatastatus with: id: rest.path.id outputParameters: - type: object mapping: $. - type: mcp namespace: catalog-tracks-mcp port: 9090 transport: http description: MCP adapter for TIDAL Catalog API — Tracks. One tool per consumed operation. tools: - name: tidal-getcredits description: Get multiple credits. hints: readOnly: true destructive: false idempotent: true call: catalog-tracks.getcredits with: include: tools.include filter[id]: tools.filter[id] outputParameters: - type: object mapping: $. - name: tidal-getcredits description: Get single credit. hints: readOnly: true destructive: false idempotent: true call: catalog-tracks.getcredits with: id: tools.id include: tools.include outputParameters: - type: object mapping: $. - name: tidal-getcredits description: Get artist relationship ("to-one"). hints: readOnly: true destructive: false idempotent: true call: catalog-tracks.getcredits with: id: tools.id include: tools.include outputParameters: - type: object mapping: $. - name: tidal-getcredits description: Get category relationship ("to-one"). hints: readOnly: true destructive: false idempotent: true call: catalog-tracks.getcredits with: id: tools.id include: tools.include outputParameters: - type: object mapping: $. - name: tidal-getlyrics description: Get multiple lyrics. hints: readOnly: true destructive: false idempotent: true call: catalog-tracks.getlyrics with: include: tools.include filter[id]: tools.filter[id] outputParameters: - type: object mapping: $. - name: tidal-postlyrics description: Create single lyric. hints: readOnly: false destructive: false idempotent: false call: catalog-tracks.postlyrics with: body: tools.body outputParameters: - type: object mapping: $. - name: tidal-deletelyrics description: Delete single lyric. hints: readOnly: false destructive: true idempotent: true call: catalog-tracks.deletelyrics with: id: tools.id outputParameters: - type: object mapping: $. - name: tidal-getlyrics description: Get single lyric. hints: readOnly: true destructive: false idempotent: true call: catalog-tracks.getlyrics with: id: tools.id include: tools.include outputParameters: - type: object mapping: $. - name: tidal-patchlyrics description: Update single lyric. hints: readOnly: false destructive: false idempotent: false call: catalog-tracks.patchlyrics with: id: tools.id body: tools.body outputParameters: - type: object mapping: $. - name: tidal-getlyrics description: Get owners relationship ("to-many"). hints: readOnly: true destructive: false idempotent: true call: catalog-tracks.getlyrics with: id: tools.id countryCode: tools.countryCode include: tools.include page[cursor]: tools.page[cursor] outputParameters: - type: object mapping: $. - name: tidal-getlyrics description: Get track relationship ("to-one"). hints: readOnly: true destructive: false idempotent: true call: catalog-tracks.getlyrics with: id: tools.id countryCode: tools.countryCode include: tools.include outputParameters: - type: object mapping: $. - name: tidal-gettrackstatistics description: Get multiple trackStatistics. hints: readOnly: true destructive: false idempotent: true call: catalog-tracks.gettrackstatistics with: include: tools.include filter[id]: tools.filter[id] outputParameters: - type: object mapping: $. - name: tidal-gettrackstatistics description: Get single trackStatistic. hints: readOnly: true destructive: false idempotent: true call: catalog-tracks.gettrackstatistics with: id: tools.id include: tools.include outputParameters: - type: object mapping: $. - name: tidal-gettrackstatistics description: Get owners relationship ("to-many"). hints: readOnly: true destructive: false idempotent: true call: catalog-tracks.gettrackstatistics with: id: tools.id include: tools.include page[cursor]: tools.page[cursor] outputParameters: - type: object mapping: $. - name: tidal-gettracks description: Get multiple tracks. hints: readOnly: true destructive: false idempotent: true call: catalog-tracks.gettracks with: page[cursor]: tools.page[cursor] sort: tools.sort countryCode: tools.countryCode include: tools.include filter[id]: tools.filter[id] filter[isrc]: tools.filter[isrc] filter[owners.id]: tools.filter[owners.id] shareCode: tools.shareCode outputParameters: - type: object mapping: $. - name: tidal-posttracks description: Create single track. hints: readOnly: false destructive: false idempotent: false call: catalog-tracks.posttracks with: body: tools.body outputParameters: - type: object mapping: $. - name: tidal-deletetracks description: Delete single track. hints: readOnly: false destructive: true idempotent: true call: catalog-tracks.deletetracks with: id: tools.id outputParameters: - type: object mapping: $. - name: tidal-gettracks description: Get single track. hints: readOnly: true destructive: false idempotent: true call: catalog-tracks.gettracks with: id: tools.id countryCode: tools.countryCode include: tools.include shareCode: tools.shareCode outputParameters: - type: object mapping: $. - name: tidal-patchtracks description: Update single track. hints: readOnly: false destructive: false idempotent: false call: catalog-tracks.patchtracks with: id: tools.id body: tools.body outputParameters: - type: object mapping: $. - name: tidal-gettracks description: Get albums relationship ("to-many"). hints: readOnly: true destructive: false idempotent: true call: catalog-tracks.gettracks with: id: tools.id countryCode: tools.countryCode include: tools.include page[cursor]: tools.page[cursor] shareCode: tools.shareCode outputParameters: - type: object mapping: $. - name: tidal-patchtracks description: Update albums relationship ("to-many"). hints: readOnly: false destructive: false idempotent: false call: catalog-tracks.patchtracks with: id: tools.id body: tools.body outputParameters: - type: object mapping: $. - name: tidal-gettracks description: Get artists relationship ("to-many"). hints: readOnly: true destructive: false idempotent: true call: catalog-tracks.gettracks with: id: tools.id page[cursor]: tools.page[cursor] countryCode: tools.countryCode include: tools.include shareCode: tools.shareCode outputParameters: - type: object mapping: $. - name: tidal-gettracks description: Get credits relationship ("to-many"). hints: readOnly: true destructive: false idempotent: true call: catalog-tracks.gettracks with: id: tools.id page[cursor]: tools.page[cursor] include: tools.include shareCode: tools.shareCode outputParameters: - type: object mapping: $. - name: tidal-gettracks description: Get download relationship ("to-one"). hints: readOnly: true destructive: false idempotent: true call: catalog-tracks.gettracks with: id: tools.id include: tools.include shareCode: tools.shareCode outputParameters: - type: object mapping: $. - name: tidal-gettracks description: Get genres relationship ("to-many"). hints: readOnly: true destructive: false idempotent: true call: catalog-tracks.gettracks with: id: tools.id countryCode: tools.countryCode include: tools.include page[cursor]: tools.page[cursor] shareCode: tools.shareCode outputParameters: - type: object mapping: $. - name: tidal-gettracks description: Get lyrics relationship ("to-many"). hints: readOnly: true destructive: false idempotent: true call: catalog-tracks.gettracks with: id: tools.id include: tools.include page[cursor]: tools.page[cursor] shareCode: tools.shareCode outputParameters: - type: object mapping: $. - name: tidal-gettracks description: Get metadataStatus relationship ("to-one"). hints: readOnly: true destructive: false idempotent: true call: catalog-tracks.gettracks with: id: tools.id include: tools.include shareCode: tools.shareCode outputParameters: - type: object mapping: $. - name: tidal-gettracks description: Get owners relationship ("to-many"). hints: readOnly: true destructive: false idempotent: true call: catalog-tracks.gettracks with: id: tools.id include: tools.include page[cursor]: tools.page[cursor] shareCode: tools.shareCode outputParameters: - type: object mapping: $. - name: tidal-gettracks description: Get priceConfig relationship ("to-one"). hints: readOnly: true destructive: false idempotent: true call: catalog-tracks.gettracks with: id: tools.id countryCode: tools.countryCode include: tools.include shareCode: tools.shareCode outputParameters: - type: object mapping: $. - name: tidal-gettracks description: Get providers relationship ("to-many"). hints: readOnly: true destructive: false idempotent: true call: catalog-tracks.gettracks with: id: tools.id countryCode: tools.countryCode include: tools.include page[cursor]: tools.page[cursor] shareCode: tools.shareCode outputParameters: - type: object mapping: $. - name: tidal-gettracks description: Get radio relationship ("to-many"). hints: readOnly: true destructive: false idempotent: true call: catalog-tracks.gettracks with: id: tools.id include: tools.include page[cursor]: tools.page[cursor] shareCode: tools.shareCode outputParameters: - type: object mapping: $. - name: tidal-gettracks description: Get replacement relationship ("to-one"). hints: readOnly: true destructive: false idempotent: true call: catalog-tracks.gettracks with: id: tools.id countryCode: tools.countryCode include: tools.include shareCode: tools.shareCode outputParameters: - type: object mapping: $. - name: tidal-gettracks description: Get shares relationship ("to-many"). hints: readOnly: true destructive: false idempotent: true call: catalog-tracks.gettracks with: id: tools.id include: tools.include page[cursor]: tools.page[cursor] shareCode: tools.shareCode outputParameters: - type: object mapping: $. - name: tidal-gettracks description: Get similarTracks relationship ("to-many"). hints: readOnly: true destructive: false idempotent: true call: catalog-tracks.gettracks with: id: tools.id page[cursor]: tools.page[cursor] countryCode: tools.countryCode include: tools.include shareCode: tools.shareCode outputParameters: - type: object mapping: $. - name: tidal-gettracks description: Get sourceFile relationship ("to-one"). hints: readOnly: true destructive: false idempotent: true call: catalog-tracks.gettracks with: id: tools.id include: tools.include shareCode: tools.shareCode outputParameters: - type: object mapping: $. - name: tidal-gettracks description: Get suggestedTracks relationship ("to-many"). hints: readOnly: true destructive: false idempotent: true call: catalog-tracks.gettracks with: id: tools.id page[cursor]: tools.page[cursor] countryCode: tools.countryCode include: tools.include shareCode: tools.shareCode outputParameters: - type: object mapping: $. - name: tidal-gettracks description: Get trackStatistics relationship ("to-one"). hints: readOnly: true destructive: false idempotent: true call: catalog-tracks.gettracks with: id: tools.id include: tools.include shareCode: tools.shareCode outputParameters: - type: object mapping: $. - name: tidal-gettracks description: Get usageRules relationship ("to-one"). hints: readOnly: true destructive: false idempotent: true call: catalog-tracks.gettracks with: id: tools.id countryCode: tools.countryCode include: tools.include shareCode: tools.shareCode outputParameters: - type: object mapping: $. - name: tidal-gettracksmetadatastatus description: Get multiple tracksMetadataStatus. hints: readOnly: true destructive: false idempotent: true call: catalog-tracks.gettracksmetadatastatus with: filter[id]: tools.filter[id] outputParameters: - type: object mapping: $. - name: tidal-gettracksmetadatastatus description: Get single tracksMetadataStatu. hints: readOnly: true destructive: false idempotent: true call: catalog-tracks.gettracksmetadatastatus with: id: tools.id outputParameters: - type: object mapping: $.