Every track in Crate’s library carries a lifecycle status —Documentation Index
Fetch the complete documentation index at: https://mintlify.com/TheOutdoorProgrammer/crate/llms.txt
Use this file to discover all available pages before exploring further.
wanted, downloading, owned, or ignored — and the endpoints below move a track between those states or trigger side-effects like slskd searches and file deletion. All endpoints return JSON; errors always include an "error" string field.
POST /api/tracks/{id}/queue
Adds a single track to the download queue. If the track already has an active queue entry (statuspending, searching, downloading, or organizing) the database unique constraint prevents a duplicate from being created and the request returns an error.
The internal track ID.
Always
"queued" on success.POST /api/tracks/{id}/search
Starts an asynchronous manual search against slskd for the given track. Because a slskd search can take up to 30 seconds, this endpoint returns immediately with asearch_id you can poll. An optional override query can be provided in the request body; if omitted, Crate constructs the query from the track’s artist and title.
The internal track ID.
Custom search string to send to slskd. Defaults to
"Artist Title" when omitted.UUID of the slskd search in progress. Pass this to the poll endpoint.
Echo of the requested track ID.
The exact query string sent to slskd.
GET /api/tracks/{id}/search/{searchId}
Polls the results of a manual search. When the search is still running,status is "pending". Once slskd finishes, status becomes "complete" and results is populated with every file that matched, scored and annotated.
The internal track ID.
The UUID returned by the start-search endpoint.
"pending" while the slskd search is still running, "complete" when results are available.Present and populated when
status is "complete". Each element describes one candidate file.DELETE /api/tracks/{id}/search/{searchId}
Cancels and cleans up a manual search, asking slskd to delete the search on its side. Returns204 No Content on success. This is called automatically by the UI when you close the manual-search modal.
The internal track ID.
The UUID returned by the start-search endpoint.
POST /api/tracks/{id}/download
Manually selects a specific result from a completed manual search and immediately starts downloading it, bypassing the auto-scorer. Thesize and bit_rate fields are stored on the download queue item for progress tracking and upgrade decisions respectively.
The internal track ID.
The slskd username to download from.
The full remote file path, as returned by the poll endpoint.
Expected file size in bytes (used for progress tracking).
Bitrate in kbps;
0 for lossless formats such as FLAC.Always
"downloading" on success.POST /api/tracks/{id}/link
Claims awanted provider track using an owned local track’s file — “this local file is that track”. The local track’s file path and quality metadata are transferred to the target track, which is marked owned. The local track record is then deleted. Both tracks must belong to the same album.
The internal track ID of the owned local track whose file you want to claim.
The Crate internal track ID of the
wanted provider track to claim the file for. Must be in the same album as the source track.Always
"linked" on success.The internal ID of the target track that was claimed.
POST /api/tracks/{id}/reject
Rejects the current copy of an owned track in one atomic operation: the file is deleted from the library, the username+filename pair is added to the permanent blacklist, and the track’s status is reset towanted so Crate will search for a replacement. A Navidrome/Music Assistant library rescan is triggered asynchronously after rejection.
This endpoint only works on tracks with status
owned. Attempting to reject a track that is not owned returns 400 Bad Request with "track is not owned".The internal track ID.
Always
"rejected" on success.POST /api/tracks/reject
Rejects an owned track identified by artist name and title rather than by internal ID. This endpoint is used by the Music Assistant integration — when you add a track to the reject playlist in Music Assistant, MA calls this endpoint with the track metadata, and Crate handles the deletion, blacklisting, and re-queue automatically. Request bodyThe artist name to look up. Matched case-insensitively against owned tracks.
The track title to look up. Matched case-insensitively against owned tracks.
Always
"rejected" on success.PUT /api/tracks/{id}/ignore
Marks a track asignored, preventing it from being included in any future download queue scans. Ignored tracks remain in the library and can be un-ignored at any time.
The internal track ID.
Always
"ignored" on success.DELETE /api/tracks/{id}/ignore
Removes the ignored status from a track, restoring it towanted. From the next scheduled scan, Crate will include this track in search runs again.
The internal track ID.
Always
"wanted" on success.DELETE /api/tracks/{id}
Removes a track from Crate’s watch list entirely. Accepts an optionaldelete=true query parameter: when set and the track status is owned, Crate also deletes the file from disk and triggers an async library rescan.
The internal track ID.
When
true, deletes the physical file from the library directory (only if the track is owned). Defaults to false.204 No Content on success.
POST /api/relink/track/{id}
Relinks a track to a different provider ID within the currently active primary provider. This is a leaf operation — unlike artist or album relinks, there is no downstream reconciliation. Use this to correct a track that was matched to the wrong provider entry during an import or sync.The internal track ID.
The new provider-specific track ID to assign (e.g. a MusicBrainz recording MBID).
Always
"relinked" on success.Always
false for track relinks — tracks are leaf nodes with nothing to reconcile beneath them.