Independent & Unofficial
Spotycovs is an independent project and is not affiliated with, endorsed by, or officially connected to Spotify AB or Spotify Technology S.A.
Spotify resolution tool, canvas inspection, and operational reference.
Spotycovs helps you look up Spotify tracks, check for available Canvas videos, and explore artist metadata. Use the resolver in your browser or work with the JSON API.
Find a track by link, ID, or title. Inspect its name, artists, album artwork, and Spotify identity.
Find a trackCheck whether a track has a looping Canvas video, preview it, and inspect the returned media URL.
Explore CanvasLook up artist information, releases, top tracks, and related artist data from one place.
Artist referenceOpen the Resolver and select a Spotify URL, search query, track ID, or artist.
Review metadata and Canvas availability. Preview the video when one is returned.
Open the JSON response or copy a returned URL for your next step.
Choose an endpoint for the data you need. The reference explains its inputs, response fields, and examples.
Browse all endpointsNo. Canvas availability depends on the track. Metadata can still be returned when no Canvas video is available.
Track lookups do not require Spotify credentials. The AI assistant uses a separate Discord connection.
Start with the API quick start, check the documented parameters and rate limits, or use Build with AI to create an integration prompt for your coding assistant.
Build with AILearn how the tool works, read the project notices, and find a direct contact.
Use a Spotify URL, share link, track ID, or plain-text query to get one stable track identity and its essential metadata.
Check whether a track has a looping Canvas video and inspect the returned media payload directly.
In-memory sliding window cache and rate limiting ensure fast responses and stable upstream throughput.
Get a normalized artist profile with genres, follower data, top tracks, albums, and related artists.
Candidate tracks are scored across multiple sources so weak or irrelevant matches are filtered out before they reach the result.
Use the built-in playground to set parameters, execute documented routes, and inspect live JSON responses.
Spotify upstream access is handled server-side. Visitors do not provide credentials, and the API never exposes internal authentication tokens.
Inputs are checked across supported data sources. Results are ranked and normalized so the frontend receives one predictable response shape.
Repeated searches and track lookups reuse short-lived in-memory cache entries, reducing duplicate upstream requests and keeping common responses fast.
Spotycovs is an independent project and is not affiliated with, endorsed by, or officially connected to Spotify AB or Spotify Technology S.A.
The API provides track metadata and Canvas media retrieval without altering content.
Users do not provide credentials, and the API never returns private authentication data.
Third-party trademarks, artwork, audio, Canvas media, and related content remain subject to the rights of their respective owners.
If you believe any content infringes your rights or have platform-related inquiries, please contact us directly and all requests will be reviewed.
Tell us what would make your next track lookup or API integration easier.
This form is exclusively for feature suggestions and platform ideas. For technical support or direct inquiries, reach us at [email protected].
Ask about Canvas extraction, endpoint parameters, and working with API responses.
Connect your Discord account to unlock your 20 query credits every 5 hours and access the AI Copilot.
New features and improvements to the workspace and API.
A complete website redesign, a new way to build with AI, and faster API responses.
The entire website has been redesigned with a refreshed style, clearer page organization, and layouts adapted for desktop and mobile.
A new dedicated page generates a complete integration prompt for AI coding agents that have access to your project. It includes API endpoints, useful context, and implementation guidance.
The AI assistant has been fixed and can now respond in any language.
API requests now complete much faster, making track, Canvas, and artist lookups more responsive.
This release adds an integrated assistant, refines API responses, and increases request limits.
Guidance for Spotify Canvas, API usage, and troubleshooting.
Refined response formats make returned data easier to inspect and use.
More room for requests across the platform.
Look up a track or artist, inspect the result, and explore available visual media.
Use a public Spotify track URL when you already have the shared link.
Useful when testing the search resolver or when only the song title is known.
Best option for deterministic lookups when the canonical Spotify ID is available.
Use query, ID, or URL. Limit controls related payload size.
Give your coding assistant everything it needs to integrate Spotycovs into your website.
A self-contained brief for your coding assistant. Copy all of it, or download it as a file.
Preparing your integration prompt…
A practical guide to track resolution, Canvas media, and artist data.
Try a route name such as canvas, or a parameter such as trackId.
Use the Spotycovs API to look up Spotify tracks, inspect their metadata, check Canvas availability, and explore artist profiles. Each chapter walks through its own inputs, examples, and results.
An endpoint is a URL that returns data for your app. You
send a GET request with values in the URL,
and usually receive JSON: named fields your
code can read. No Spotify login or API key is required for
the public lookups documented here.
Choose a route below. If you only want to try it, open its chapter and select Test API; you do not need to write any code.
/api/resolveTurn a track link, ID, or search query into a Spotify
track ID.GET/api/canvasCheck for a Canvas clip and get its video URL when
available.GET/api/searchSearch by artist and song title, then inspect the
matched track.GET/api/trackGet title, artists, album artwork, and other track
metadata.GET/api/artistLook up an artist profile, releases, and available
statistics.
Use Canvas media to check for a clip, or Resolve a track to obtain a reusable track ID first.
Use Search tracks with the artist and title. Check the returned match before using its ID.
Use Artist profiles with an artist link, artist ID, or name. Track IDs and artist IDs are different.
Follow the quick start for a complete browser and JavaScript example. You can search these docs by endpoint, parameter, or error code.
Start with a track lookup in the built-in tester, then use the same request in your own app.
Go to Resolve a track and select Test API, then Use example. The tester fills an example input and shows the request URL.
Select Send request. Read the HTTP status and JSON response on the right, or below the form on smaller screens. You can copy the request URL and response.
A successful lookup contains
success: true and a
trackId. Reuse that ID with
Track metadata
or
Canvas media. If it fails, check the
error code.
Append this path to this website’s address, or paste the full address copied from the tester into your browser. The word GET describes the HTTP method; do not type it into the address bar.
/api/resolve?id=0VjIjW4GlUZAMYd2vXMi3b
/api/resolveThe endpoint: which operation to perform.
?Starts the query parameters. Parameters are inputs
written as name=value.
id=0VjIjW4GlUZAMYd2vXMi3bOne input: the Spotify track ID. Use
& to separate additional parameters,
such as &results=1.
Run this inside an async function on this site, or in a browser console that supports top-level await. For a separate app or server, replace window.location.origin with this service’s full address. URLSearchParams encodes spaces and special characters for you.
const baseUrl = window.location.origin;
const params = new URLSearchParams({
track: "The Weeknd - Blinding Lights"
});
const response = await fetch(
baseUrl + "/api/resolve?" + params
);
const data = await response.json();
if (!response.ok || !data.success) {
throw new Error(data.error || "Request failed");
}
console.log(data.trackId);
console.log(data.track?.name ?? "Metadata unavailable");
Send one input method per request. A successful resolution identifies a track; it does not guarantee that the track has a Canvas clip. The Canvas chapter explains how to check that separately.
These are URL-encoded characters: %20 is
a space and %3A is a colon. Use
URLSearchParams instead of manually
joining user input into a URL, especially when a value
contains &, ?, or
non-English characters.
These public lookups use GET with query parameters. They do not require a request body, Spotify credentials, or an Authorization header. The API tester sends the request for you.
/api/resolveUse this when you have a track link or song name and need a reusable Spotify track ID. It also attempts to include track metadata, but does not check Canvas availability.
Send id for a known track,
url for a full Spotify track link or
URI, or track for an artist and song
title.
Read trackId and, when available,
track.name and
track.artistNames. Text searches can
find a different release or version.
Pass the returned trackId as
id to
Canvas media
or
Track metadata.
idOne of id, url, or track is required. Accepts a
22-character Spotify track ID; a full track URL or
spotify:track:… URI is also
recognized.
urlA full
https://open.spotify.com/track/… link or
spotify:track:… URI. Album, artist,
playlist, and shortened share links are not accepted
here.
trackA text query, preferably
The Weeknd - Blinding Lights rather than a
title alone.
results=1Optional. Include available search candidates in
resolution.results when using a text query.
Omit it for a smaller response.
If multiple inputs are provided, the order is
id, then track, then
url. An invalid higher-priority input does
not fall back to another one.
Copy this path after the site’s address. Spaces in the query are encoded as %20.
/api/resolve?track=The%20Weeknd%20-%20Blinding%20Lights&results=1
trackIdThe resolved ID to reuse in other track
endpoints.
trackTrack metadata when available. It can be
null even when the ID was resolved
successfully.
resolutionHow the input was resolved. Text lookups can also
include matched title, artist, and optional candidate
results.
request.apiUrlA reusable URL for the same track lookup by ID.
request.canvasUrlA video streaming URL with stream=1. For a
JSON availability check, call
/api/canvas?id=… without stream.
missing_params means no input was
supplied. For invalid_track_id, copy the
full 22-character track ID. For
track_not_found, use the full Spotify
track link or improve the text query with an artist
name. See
Responses & errors
for other failures.
/api/canvasUse this to find out whether a track has a Spotify Canvas: a short visual clip associated with the song. First request JSON to check availability, then use the returned media URL to play the clip.
Send /api/canvas?id=… without
stream. A known ID avoids repeating a
text search.
Read success, then
hasCanvas. Only access
canvases[0] when the array contains an
item.
When available, open
canvases[0].canvasUrl in the browser or
use it as a video element’s source. That URL returns
video bytes, so do not call
response.json() on it.
idOne of id, url, or track is required. Use the Spotify
track ID returned by resolve or search.
urlAlternative input: a full Spotify track link or
spotify:track:… URI.
trackAlternative input: an artist and title query. Check the
resolved track to confirm the version.
results=1Optional. Include available text-search candidates in
resolution.results.
stream=1Optional. Return the first available Canvas as video
instead of a JSON lookup. Leave this out when checking
availability.
success: true, hasCanvas: false,
and canvases: [] mean the lookup worked but
no clip was returned. Display a “No Canvas available”
state instead of treating this as a failed lookup.
This returns JSON. Availability depends on the track and may change.
/api/canvas?id=0VjIjW4GlUZAMYd2vXMi3b
Run inside an async function. The code checks the array before reading the video URL.
const params = new URLSearchParams({
id: "0VjIjW4GlUZAMYd2vXMi3b"
});
const response = await fetch("/api/canvas?" + params);
const data = await response.json();
if (!response.ok || !data.success) {
throw new Error(data.error || "Canvas lookup failed");
}
const videoUrl = data.hasCanvas
? data.canvases?.[0]?.canvasUrl
: null;
console.log(videoUrl ?? "No Canvas available");
trackIdThe Spotify track ID used for the lookup.
hasCanvasWhether a Canvas was returned. This can be false in a
successful response.
canvasesAn array of available clips. Each item’s
canvasUrl points to this service’s video
streaming route.
trackTrack metadata when available; may be null.
resolutionDetails of how the input was matched to a track.
request.apiUrlThe JSON lookup URL for the resolved track.
The stream request returns HTTP 404 with
canvas_not_found instead of video. Check
JSON availability first, and still handle media
loading errors because availability can change.
Album artwork is a still image, usually in
track.album.imageUrl. It is separate from
the Canvas video. You can show the artwork as a
fallback when it is available.
/api/searchUse this when you know a song’s name but do not have a Spotify track link or ID. It returns the best accepted match and any available candidate results.
Send a track query such as
The Weeknd - Blinding Lights. Extra
context helps distinguish songs with the same title.
Compare matchedTrack and
matchedArtist with what you expected.
Search matching does not guarantee your intended
release.
Send the top-level trackId to
Track metadata
or
Canvas media. For an alternative candidate, use that item’s
trackId.
trackRequired. Non-empty text query containing the song
title and preferably its artist. This endpoint does not
use a query parameter.
The artist and title are encoded together as the track parameter.
/api/search?track=The%20Weeknd%20-%20Blinding%20Lights
trackIdThe ID of the best accepted match, ready for other
track endpoints.
matchedTrackThe matched song title.
matchedArtistThe matched artist name or names.
spotifyUrlA Spotify track link you can open to inspect the
match.
resultsAvailable candidate track objects, with fields such as
trackId, name, and
artistNames. The list may be empty even
when a best match is returned.
Try the artist plus exact title, or use a direct
Spotify track link with
Resolve a track
for a specific version. A query without an accepted
match returns HTTP 404 with
track_not_found; an empty query returns
HTTP 400 with missing_query.
Search is focused on text queries and returns
available candidates directly in results.
Resolve also accepts track IDs and links, and can
include candidates under
resolution.results when
results=1 is supplied.
/api/trackUse this when you already have a Spotify track ID and want its title, artists, album artwork, and available metadata. This endpoint does not search by song name or return a Canvas video.
Request /api/track?id=…. A full track
URL or spotify:track:… URI can also be
passed in id. A plain song title
cannot.
The metadata is inside track, rather
than at the top level. Check optional fields before
displaying them.
idRequired. A Spotify track ID, full track URL, or track
URI. Use the parameter name id, not
trackId or url.
Use this path with the site’s address or open the tester above.
/api/track?id=0VjIjW4GlUZAMYd2vXMi3b
trackIdThe normalized Spotify track ID at the top level.
track.nameThe track title.
track.artistNamesAn array of artist names. Join them with a comma for
display.
track.artistsAvailable artist identities; full entries can include
an ID, name, URI, and Spotify link.
track.albumAvailable album details, including name,
imageUrl, and
releaseDate.
track.durationMsDuration in milliseconds when available. Divide by 1000
for seconds; this may be null.
track.spotifyUrlThe Spotify track link.
track.explicit / track.popularityAdditional metadata when supplied. Treat unavailable
fields as unknown rather than assuming a value.
Some successful lookups contain fewer fields or null values. Check artwork and duration before using them. The album image is not a Canvas; use Canvas media for video.
Check that the ID belongs to a track, has 22 letters
or digits, and is sent as id. Missing or
malformed IDs return HTTP 400 with
invalid_track_id. If no metadata can be
found for the ID, the response is HTTP 404 with
track_not_found.
/api/artistUse this to explore an artist profile, available statistics, releases, top tracks, and related artists. Supply an artist link or ID for an exact lookup, or search by name.
Send id or url for a
specific artist. If you only know the name, send
query; the first matched artist is
selected.
Optionally set limit, such as
5, for supported related-item lists.
This is not a limit on every collection in the
response.
Read summary.name,
summary.avatarUrl, and
summary.stats. Use the deeper objects
for releases or extra profile data when available.
idOne of id, url, or query is required. Accepts a
22-character artist ID, full artist URL, or
spotify:artist:… URI. A track ID is not an
artist ID.
urlAlternative: a full
https://open.spotify.com/artist/… link or
artist URI.
queryAlternative: an artist name, such as
The Weeknd. Unlike track search, the
parameter is query.
limitOptional. Defaults to 10, with values bounded to 1–25.
Controls supported search and related-item lists; not
all lists return the requested count.
This selects the first artist match. Confirm the returned artistName and reuse artistId for later requests.
/api/artist?query=The%20Weeknd&limit=5
Use an artist ID to avoid matching by name.
/api/artist?id=1Xyo4u8uXC1ZmMpatF05PJ&limit=5
artistId / artistNameThe selected artist’s ID and name.
summaryThe normalized profile: name, images, Spotify link,
genres, stats, top tracks, and related artists.
summary.statsAvailable followers, monthly listeners, and popularity.
Some values can be null or unavailable.
artist.profileAdditional profile information such as biography and
external links when available.
artist.discographyAvailable albums, singles, compilations, and popular
releases. Collections may be empty or overlap depending
on the source.
statsAdditional world rank and top-city data when supplied;
these may be null or empty.
relatedContentAvailable appearances and featuring data. Related
artist profiles are in
summary.relatedArtists.
sourceWhich source supplied the response. Fallback responses
can contain less detail while still succeeding.
A successful response does not guarantee a biography, monthly-listener count, or a complete discography. Show an unavailable state for missing values and skip empty lists.
Prefer one. The parser uses id before
url. If no artist ID can be parsed and
query is present, it tries the name
search. A valid ID takes priority over a query.
Use a full Spotify artist link for a precise match.
Missing inputs return missing_params;
malformed input returns
invalid_artist_input; an unresolved
artist returns artist_not_found. Other
statuses are explained in
Responses & errors.
Check both the HTTP status and the response body. JSON lookups use success to indicate the result; Canvas streaming returns video when successful.
HTTP 200 with
success: true means the lookup completed. The
remaining fields depend on the endpoint: a track ID,
metadata, artist data, or Canvas availability. Fields such
as source and request are
endpoint-specific.
This is an illustrative subset of a JSON response, not a live availability result. Other fields are omitted for clarity.
{
"success": true,
"trackId": "0VjIjW4GlUZAMYd2vXMi3b",
"hasCanvas": false,
"canvases": []
}
A handled failure returns a non-2xx HTTP status and a JSON
object with success: false, a readable
error, and a machine-readable
code. Use the code for application decisions
and show a helpful message to the user.
For example, calling /api/resolve without any input returns HTTP 400 with this error shape.
{
"success": false,
"error": "provide id, url, or track",
"code": "missing_params"
}
400 · Invalid inputFix the request. Common codes:
missing_params, missing_query,
invalid_track_id, and
invalid_artist_input.
404 · Not foundtrack_not_found or
artist_not_found: check the input or try a
more precise query. canvas_not_found: the
stream has no clip to return.
405 · Wrong methodmethod_not_allowed: use GET with query
parameters, not POST with a JSON body.
429 · Rate limitedrate_limited or
spotify_rate_limited: pause requests.
Respect Retry-After when present; see
Security & limits.
500 · Lookup failedAn internal lookup failed. Codes vary by route, such as
resolve_failed or
canvas_failed. Show a retry option and
avoid repeated automatic retries.
503 · Unavailableservice_unavailable: the service cannot
complete the lookup now. Retry later rather than
changing a valid input.
504 · Timed outtimeout: the lookup took too long. Offer a
later retry; do not start a rapid retry loop.
fetch() normally resolves even for HTTP
400, 404, or 500. Check response.ok and
data.success, as shown in the
quick start. Network failures can throw before you receive JSON,
so your app should also handle connection errors.
A successful stream=1 request returns
video. Use its URL as media. A hosting or connection
error may also return something other than API JSON;
check the status and Content-Type before assuming a
JSON body.
Public track and artist lookups do not require Spotify credentials. Handle rate limits and temporary failures so your app remains useful when a request cannot be completed.
Send only the public lookup inputs documented in each chapter: track or artist IDs, links, and search text. Do not include account passwords, Spotify access tokens, or private API keys in query strings. URLs can appear in browser history and network logs.
Build query strings with URLSearchParams so
user input is encoded correctly. When displaying returned
names or descriptions, use text content rather than
inserting them as HTML.
HTTP 429 with
rate_limited or
spotify_rate_limited means requests
must pause. Different routes and service conditions
can have different limits.
When a Retry-After header is present,
its value is the number of seconds to wait.
Otherwise use a delayed retry with increasing waits
and a small retry limit.
Reuse resolved IDs, keep recent results in your app, and prevent duplicate submissions while a lookup is running. Search after a deliberate user action instead of every keystroke.
Retry-AfterWhen present, seconds to wait before retrying. Visible
in the browser Network panel; cross-origin browser code
may not be able to read it.
X-RateLimit-LimitWhen present, the limit reported for the current
rate-limit check. It is not a fixed service-wide
allowance.
X-RateLimit-RemainingWhen present, remaining requests reported by that
check.
X-RateLimit-ResetWhen present, seconds until the reported window resets;
this is not a Unix timestamp.
For 503 or 504, show a clear
message and allow a later retry. Avoid unlimited retry
loops. A lookup can succeed with partial metadata or no
Canvas, so handle those states separately from errors.
Requests from the same network may share rate-limit allowances. A 429 response does not necessarily mean the current user alone sent too many requests. Let them wait and try again.
Check for null fields and empty arrays, then hide the missing detail or display “Unavailable”. Do not turn an unknown listener count into a claimed zero, or assume every track has artwork, a duration, or a Canvas.
Check the current health of the service and its Spotify connection.
The dashboard will render after the API responds.