{"openapi":"3.0.0","info":{"title":"cosine.club API","description":"Search and discover similar music using vector similarity. All list endpoints support page-based pagination (`?page=2&limit=20`).\n\n## Rate Limits\nAll endpoints are limited to 120 requests per minute per API key. Every response includes `X-RateLimit-Limit`, `X-RateLimit-Remaining`, and `X-RateLimit-Reset` headers. Exceeding the limit returns a `429` response with a `Retry-After` header.\n\n## User-Agent\nPlease include a `User-Agent` header identifying your application (e.g. `my-app/1.0`).","version":"1.0.0"},"servers":[{"url":"https://cosine.club/api/v1","description":"Production API"}],"paths":{"/playlists":{"get":{"operationId":"listPlaylists","summary":"List playlists","description":"Get all your playlists","parameters":[{"name":"limit","in":"query","description":"Results per page","required":false,"schema":{"type":"integer","default":20,"maximum":100,"minimum":1}},{"name":"page","in":"query","description":"Page number","required":false,"schema":{"type":"integer","default":1,"minimum":1}}],"responses":{"200":{"description":"Your playlists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaylistListResponse"},"examples":{"success":{"summary":"List of playlists","value":{"data":[{"created_at":"2024-01-15T10:30:00Z","id":1,"is_public":true,"name":"cheeky bangers","public_id":"abc123","slug":"cheeky-bangers","track_count":3,"updated_at":"2024-02-01T14:20:00Z"}],"meta":{"count":1,"has_more":false,"limit":20,"offset":0,"request_id":"abc123","timestamp":1702123456,"total":1},"success":true}}}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"tags":["playlists"]},"post":{"operationId":"createPlaylist","summary":"Create playlist","description":"Create a new playlist","requestBody":{"description":"Playlist name and visibility","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePlaylistRequest"}}}},"responses":{"201":{"description":"Playlist created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaylistResponse"},"examples":{"success":{"summary":"Created playlist","value":{"data":{"created_at":"2024-01-15T10:30:00Z","id":1,"is_public":false,"name":"cheeky bangers","public_id":"abc123","slug":"cheeky-bangers","track_count":0,"updated_at":"2024-01-15T10:30:00Z"},"meta":{"request_id":"abc123","timestamp":1702123456},"success":true}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"tags":["playlists"]}},"/playlists/{id}":{"get":{"operationId":"getPlaylist","summary":"Get playlist","description":"Get a playlist with its tracks","parameters":[{"name":"id","in":"path","description":"Playlist ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Playlist with tracks","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaylistDetailResponse"},"examples":{"success":{"summary":"Playlist with tracks","value":{"data":{"created_at":"2024-01-15T10:30:00Z","id":1,"is_public":true,"name":"cheeky bangers","public_id":"abc123","slug":"cheeky-bangers","track_count":3,"tracks":[{"artist":"Joy Orbison","id":"185450","name":"Joy Orbison - Hyph Mngo","track":"Hyph Mngo"},{"artist":"Julio Bashmore","id":"264028","name":"Julio Bashmore - Battle For Middle You","track":"Battle For Middle You"},{"artist":"Blawan","id":"5484799","name":"Blawan - Why They Hide Their Bodies Under My Garage","track":"Why They Hide Their Bodies Under My Garage"}],"updated_at":"2024-02-01T14:20:00Z"},"meta":{"request_id":"abc123","timestamp":1702123456},"success":true}}}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Not your playlist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Playlist not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"tags":["playlists"]},"put":{"operationId":"updatePlaylist","summary":"Update playlist","description":"Update a playlist's name or visibility","parameters":[{"name":"id","in":"path","description":"Playlist ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"New name or visibility","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePlaylistRequest"}}}},"responses":{"200":{"description":"Updated playlist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaylistResponse"},"examples":{"success":{"summary":"Updated playlist name","value":{"data":{"created_at":"2024-01-15T10:30:00Z","id":1,"is_public":true,"name":"proper cheeky bangers","public_id":"abc123","slug":"proper-cheeky-bangers","track_count":3,"updated_at":"2024-02-01T16:45:00Z"},"meta":{"request_id":"abc123","timestamp":1702123456},"success":true}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Not your playlist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Playlist not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"tags":["playlists"]},"delete":{"operationId":"deletePlaylist","summary":"Delete playlist","description":"Delete a playlist","parameters":[{"name":"id","in":"path","description":"Playlist ID","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Deleted"},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Not your playlist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Playlist not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"tags":["playlists"]}},"/playlists/{id}/tracks":{"get":{"operationId":"listPlaylistTracks","summary":"List playlist tracks","description":"Get all tracks in a playlist","parameters":[{"name":"id","in":"path","description":"Playlist ID","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Results per page","required":false,"schema":{"type":"integer","default":20,"maximum":100,"minimum":1}},{"name":"page","in":"query","description":"Page number","required":false,"schema":{"type":"integer","default":1,"minimum":1}}],"responses":{"200":{"description":"Tracks in playlist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrackListResponse"},"examples":{"success":{"summary":"Playlist tracks","value":{"data":[{"artist":"Joy Orbison","id":"185450","name":"Joy Orbison - Hyph Mngo","track":"Hyph Mngo"},{"artist":"Julio Bashmore","id":"264028","name":"Julio Bashmore - Battle For Middle You","track":"Battle For Middle You"},{"artist":"Blawan","id":"5484799","name":"Blawan - Why They Hide Their Bodies Under My Garage","track":"Why They Hide Their Bodies Under My Garage"}],"meta":{"count":3,"has_more":false,"limit":20,"offset":0,"request_id":"abc123","timestamp":1702123456,"total":3},"success":true}}}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Not your playlist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Playlist not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"tags":["playlists"]},"post":{"operationId":"addPlaylistTrack","summary":"Add track","description":"Add a track to a playlist","parameters":[{"name":"id","in":"path","description":"Playlist ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Track ID to add","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddTrackRequest"}}}},"responses":{"201":{"description":"Track added","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddTrackResponse"},"examples":{"success":{"summary":"Track added to playlist","value":{"data":{"message":"Track added to playlist","playlist_id":1,"track_id":"185450"},"meta":{"request_id":"abc123","timestamp":1702123456},"success":true}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Not your playlist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Playlist not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Track already in playlist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"tags":["playlists"]}},"/playlists/{id}/tracks/{track_id}":{"delete":{"operationId":"removePlaylistTrack","summary":"Remove track","description":"Remove a track from a playlist","parameters":[{"name":"id","in":"path","description":"Playlist ID","required":true,"schema":{"type":"string"}},{"name":"track_id","in":"path","description":"Track ID","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Track removed"},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Not your playlist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"tags":["playlists"]}},"/search":{"get":{"operationId":"searchTracks","summary":"Search tracks","description":"Search for tracks by artist or title","parameters":[{"name":"q","in":"query","description":"Search query (2-200 characters)","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Results per page","required":false,"schema":{"type":"integer","default":20,"maximum":100,"minimum":1}},{"name":"page","in":"query","description":"Page number","required":false,"schema":{"type":"integer","default":1,"minimum":1}}],"responses":{"200":{"description":"Search results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"},"examples":{"success":{"summary":"Successful search response","value":{"data":[{"artist":"Joy Orbison","id":"185450","name":"Joy Orbison - Hyph Mngo","track":"Hyph Mngo"},{"artist":"Joy Orbison","id":"1446379","name":"Joy Orbison - Hyph Mngo (Andreas Saag's House Perspective)","track":"Hyph Mngo (Andreas Saag's House Perspective)"}],"meta":{"count":2,"has_more":false,"limit":20,"offset":0,"pagination":{"current_page":1,"total_pages":1},"query":"hyph mngo","request_id":"abc123","timestamp":1702123456,"total":2},"success":true}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"missing_query":{"summary":"Missing query","value":{"code":"MISSING_QUERY","error":"Bad Request","message":"Query parameter 'q' is required","request_id":"xyz789","success":false,"timestamp":1702123456}}}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"tags":["search"]}},"/search/bulk":{"post":{"operationId":"bulkSearch","summary":"Bulk search","description":"Search for multiple tracks by exact 'Artist - Track' match and return similar tracks for each match. Maximum 50 tracks per request.","requestBody":{"description":"Array of track queries and optional filters","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkSearchRequest"},"examples":{"basic":{"summary":"Basic bulk search","value":{"similar_limit":10,"tracks":["Joy Orbison - Hyph Mngo","Julio Bashmore - Battle For Middle You"]}},"with_filters":{"summary":"Bulk search with year and collector filters","value":{"end_year":2020,"min_have":10,"similar_limit":5,"start_year":2005,"tracks":["Joy Orbison - Hyph Mngo","Blawan - Why They Hide Their Bodies Under My Garage"]}}}}}},"responses":{"200":{"description":"Bulk search results with similar tracks","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkSearchResponse"},"examples":{"success":{"summary":"Successful bulk search","value":{"data":{"results":[{"query":"Joy Orbison - Hyph Mngo","similar_tracks":[{"artist":"Julio Bashmore","external_link":"https://discogs.com/release/2685751","id":"264028","name":"Julio Bashmore - Battle For Middle You","score":0.87,"source":"Discogs","track":"Battle For Middle You","video_id":"kZOA4dysxDc","video_uri":"https://www.youtube.com/watch?v=kZOA4dysxDc"}],"track":{"artist":"Joy Orbison","id":"185450","name":"Joy Orbison - Hyph Mngo","track":"Hyph Mngo"}},{"query":"Julio Bashmore - Battle For Middle You","similar_tracks":[{"artist":"Blawan","external_link":"https://discogs.com/release/3825372","id":"5484799","name":"Blawan - Why They Hide Their Bodies Under My Garage","score":0.85,"source":"Discogs","track":"Why They Hide Their Bodies Under My Garage","video_id":"KL_Bbyi3ub8","video_uri":"https://www.youtube.com/watch?v=KL_Bbyi3ub8"}],"track":{"artist":"Julio Bashmore","id":"264028","name":"Julio Bashmore - Battle For Middle You","track":"Battle For Middle You"}}],"unmatched":[]},"meta":{"count":2,"request_id":"abc123","timestamp":1702123456,"total":2},"success":true}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"tags":["search"]}},"/tracks/lookup":{"get":{"operationId":"lookupTrack","summary":"Lookup by URL","description":"Find tracks by YouTube, Discogs, or SoundCloud URL. Discogs release URLs return all tracks from that release.","parameters":[{"name":"url","in":"query","description":"YouTube, Discogs, or SoundCloud URL","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Matching tracks","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LookupResponse"},"examples":{"discogs":{"summary":"Discogs release lookup (returns multiple tracks)","value":{"data":[{"artist":"Joy Orbison","id":"185450","name":"Joy Orbison - Hyph Mngo","track":"Hyph Mngo"},{"artist":"Julio Bashmore","id":"264028","name":"Julio Bashmore - Battle For Middle You","track":"Battle For Middle You"}],"meta":{"count":2,"request_id":"abc123","source":"discogs","total":2},"success":true}},"youtube":{"summary":"YouTube URL lookup (returns single track)","value":{"data":[{"artist":"Blawan","id":"5484799","name":"Blawan - Why They Hide Their Bodies Under My Garage","track":"Why They Hide Their Bodies Under My Garage"}],"meta":{"count":1,"request_id":"abc123","source":"youtube","total":1},"success":true}}}}}},"400":{"description":"Unsupported URL","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No tracks found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"tags":["tracks"]}},"/tracks/{id}":{"get":{"operationId":"getTrack","summary":"Get track","description":"Get details for a specific track","parameters":[{"name":"id","in":"path","description":"Track ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Track details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrackResponse"},"examples":{"success":{"summary":"Track details","value":{"data":{"artist":"Joy Orbison","external_link":"https://discogs.com/release/1921107","id":"185450","name":"Joy Orbison - Hyph Mngo","source":"Discogs","track":"Hyph Mngo","video_id":"FkUd5C8ApdI","video_uri":"https://www.youtube.com/watch?v=FkUd5C8ApdI"},"meta":{"request_id":"abc123","timestamp":1702123456},"success":true}}}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Track not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"tags":["tracks"]}},"/tracks/{id}/similar":{"get":{"operationId":"getSimilarTracks","summary":"Find similar tracks","description":"Find tracks that sound similar to the given track","parameters":[{"name":"id","in":"path","description":"Track ID","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Results per page","required":false,"schema":{"type":"integer","default":20,"maximum":100,"minimum":1}},{"name":"page","in":"query","description":"Page number","required":false,"schema":{"type":"integer","default":1,"minimum":1}},{"name":"start_year","in":"query","description":"Minimum release year","required":false,"schema":{"type":"integer","maximum":2030,"minimum":1900}},{"name":"end_year","in":"query","description":"Maximum release year","required":false,"schema":{"type":"integer","maximum":2030,"minimum":1900}},{"name":"min_have","in":"query","description":"Minimum collectors (Discogs)","required":false,"schema":{"type":"integer","minimum":0}},{"name":"max_have","in":"query","description":"Maximum collectors (Discogs)","required":false,"schema":{"type":"integer","minimum":0}},{"name":"min_want","in":"query","description":"Minimum wishlists (Discogs)","required":false,"schema":{"type":"integer","minimum":0}},{"name":"max_want","in":"query","description":"Maximum wishlists (Discogs)","required":false,"schema":{"type":"integer","minimum":0}},{"name":"min_price","in":"query","description":"Minimum price","required":false,"schema":{"type":"number"}},{"name":"max_price","in":"query","description":"Maximum price","required":false,"schema":{"type":"number"}}],"responses":{"200":{"description":"Similar tracks","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimilarTracksResponse"},"examples":{"success":{"summary":"Similar tracks for Hyph Mngo","value":{"data":{"similar_tracks":[{"artist":"Julio Bashmore","external_link":"https://discogs.com/release/2685751","id":"264028","name":"Julio Bashmore - Battle For Middle You","score":0.87,"source":"Discogs","track":"Battle For Middle You","video_id":"kZOA4dysxDc","video_uri":"https://www.youtube.com/watch?v=kZOA4dysxDc"},{"artist":"Blawan","external_link":"https://discogs.com/release/3825372","id":"5484799","name":"Blawan - Why They Hide Their Bodies Under My Garage","score":0.82,"source":"Discogs","track":"Why They Hide Their Bodies Under My Garage","video_id":"KL_Bbyi3ub8","video_uri":"https://www.youtube.com/watch?v=KL_Bbyi3ub8"}],"source_track":{"artist":"Joy Orbison","id":"185450","name":"Joy Orbison - Hyph Mngo","track":"Hyph Mngo"}},"meta":{"count":2,"has_more":false,"limit":20,"offset":0,"request_id":"abc123","timestamp":1702123456,"total":20},"success":true}}}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Track not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"tags":["tracks"]}}},"components":{"schemas":{"AddTrackRequest":{"type":"object","properties":{"track_id":{"type":"string"}},"required":["track_id"]},"AddTrackResponse":{"type":"object","properties":{"data":{"type":"object","properties":{"message":{"type":"string"},"playlist_id":{"type":"integer"},"track_id":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"success":{"type":"boolean"}},"required":["data","meta","success"]},"BulkSearchData":{"type":"object","properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/BulkSearchResult"}},"unmatched":{"type":"array","items":{"type":"string"}}},"required":["results","unmatched"]},"BulkSearchRequest":{"type":"object","properties":{"end_year":{"type":"integer"},"max_have":{"type":"integer"},"max_price":{"type":"number"},"max_want":{"type":"integer"},"min_have":{"type":"integer"},"min_price":{"type":"number"},"min_want":{"type":"integer"},"similar_limit":{"type":"integer"},"start_year":{"type":"integer"},"tracks":{"type":"array","items":{"type":"string"}}},"required":["tracks"]},"BulkSearchResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/BulkSearchData"},"meta":{"$ref":"#/components/schemas/Meta"},"success":{"type":"boolean"}},"required":["data","meta","success"]},"BulkSearchResult":{"type":"object","properties":{"query":{"type":"string"},"similar_tracks":{"type":"array","items":{"$ref":"#/components/schemas/Track"}},"track":{"$ref":"#/components/schemas/Track"}},"required":["query","track","similar_tracks"]},"CreatePlaylistRequest":{"type":"object","properties":{"is_public":{"type":"boolean"},"name":{"type":"string"}},"required":["name"]},"ErrorResponse":{"type":"object","properties":{"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"success":{"type":"boolean"},"timestamp":{"type":"integer","format":"int64"}},"required":["error","message","request_id","timestamp","success"]},"LookupResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Track"}},"meta":{"$ref":"#/components/schemas/Meta"},"success":{"type":"boolean"}},"required":["data","meta","success"]},"Meta":{"type":"object","properties":{"count":{"type":"integer"},"has_more":{"type":"boolean"},"limit":{"type":"integer"},"offset":{"type":"integer"},"pagination":{"type":"object","properties":{"current_page":{"type":"integer"},"next_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_pages":{"type":"integer"}}},"query":{"type":"string"},"request_id":{"type":"string"},"source":{"type":"string"},"timestamp":{"type":"integer","format":"int64"},"total":{"type":"integer"}},"required":["total","count","limit","offset","has_more","request_id","timestamp"]},"Playlist":{"type":"object","properties":{"created_at":{"type":"string","format":"date-time"},"id":{"type":"integer"},"is_public":{"type":"boolean"},"name":{"type":"string"},"public_id":{"type":"string"},"slug":{"type":"string"},"track_count":{"type":"integer"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","public_id","name","slug","is_public","track_count","created_at","updated_at"]},"PlaylistDetailResponse":{"type":"object","properties":{"data":{"type":"object","properties":{"created_at":{"type":"string","format":"date-time"},"id":{"type":"integer"},"is_public":{"type":"boolean"},"name":{"type":"string"},"public_id":{"type":"string"},"slug":{"type":"string"},"track_count":{"type":"integer"},"tracks":{"type":"array","items":{"$ref":"#/components/schemas/Track"}},"updated_at":{"type":"string","format":"date-time"}}},"meta":{"$ref":"#/components/schemas/Meta"},"success":{"type":"boolean"}},"required":["data","meta","success"]},"PlaylistListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Playlist"}},"meta":{"$ref":"#/components/schemas/Meta"},"success":{"type":"boolean"}},"required":["data","meta","success"]},"PlaylistResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Playlist"},"meta":{"$ref":"#/components/schemas/Meta"},"success":{"type":"boolean"}},"required":["data","meta","success"]},"SearchResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Track"}},"meta":{"$ref":"#/components/schemas/Meta"},"success":{"type":"boolean"}},"required":["data","meta","success"]},"SimilarTracksData":{"type":"object","properties":{"similar_tracks":{"type":"array","items":{"$ref":"#/components/schemas/Track"}},"source_track":{"$ref":"#/components/schemas/Track"}},"required":["source_track","similar_tracks"]},"SimilarTracksResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/SimilarTracksData"},"meta":{"$ref":"#/components/schemas/Meta"},"success":{"type":"boolean"}},"required":["data","meta","success"]},"Track":{"type":"object","properties":{"artist":{"type":"string"},"external_link":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"score":{"type":"number"},"source":{"type":"string"},"track":{"type":"string"},"video_id":{"type":"string"},"video_uri":{"type":"string"}},"required":["id","name","artist","track"]},"TrackListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Track"}},"meta":{"$ref":"#/components/schemas/Meta"},"success":{"type":"boolean"}},"required":["data","meta","success"]},"TrackResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Track"},"meta":{"$ref":"#/components/schemas/Meta"},"success":{"type":"boolean"}},"required":["data","meta","success"]},"UpdatePlaylistRequest":{"type":"object","properties":{"is_public":{"type":"boolean"},"name":{"type":"string"}}}},"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Get your API key at https://cosine.club/account/api"}}},"security":[{"BearerAuth":[]}]}