API
Rexarr's UI is a client of its own HTTP API; everything it does can be scripted.
Authentication
With authentication off and a local request, nothing is needed. Otherwise send the API key
(Settings → General → Security ):
curl -H "X-Api-Key: $KEY " http://localhost:3939/api/system
curl "http://localhost:3939/api/system?apikey= $KEY "
Session cookies are for the UI. GET /api/health is always public ({ "ok": true, "version": "0.1.6.0" }) — the
Docker HEALTHCHECK uses it.
Library
Method
Path
Description
GET
/api/library/movies
Radarr movies with what is on disk
GET
/api/library/movies/:id
one movie with its files
GET
/api/library/series
Sonarr series
GET
/api/library/series/:id
one series
GET
/api/library/series/:id/episodes
episodes with files and quality
Search
Method
Path
Description
GET
/api/search/smart?q=
library + lookup + local, with parsed query chips
GET
/api/search/local?q=
local media index only
GET
/api/search/lookup?q=
TMDB / TVDB through Radarr / Sonarr
POST
/api/search/add
add a title to Radarr / Sonarr
POST
/api/search/grab
grab a release and create a job
Jobs, queue and events
Method
Path
Description
GET
/api/jobs
job list
POST
/api/jobs
create a job (source.localPath or an *arr file id, plus profileId; audioOnly copies the video)
POST
/api/jobs/bulk
many jobs at once (takes audioOnly too)
POST
/api/jobs/:id/cancel · /retry · /reorder
job actions
DELETE
/api/jobs/:id
remove a finished job
GET
/api/jobs/:id/log
the full ffmpeg log
GET
/api/queue
queue state
POST
/api/queue/limit · /api/queue/pause
encodes at a time, pause / resume
POST
/api/jobs/retry-failed · /api/jobs/clear
bulk queue actions
GET
/api/events
server-sent events for live UI updates
Preview and estimates
Method
Path
Description
GET
/api/jobs/:id/preview/live.jpg
current source frame while encoding
GET
/api/jobs/:id/preview/encoded.jpg
frame from the file being written
GET
/api/jobs/:id/frame?which=source\|output&t=&w=
a frame at a timestamp
POST
/api/estimate
estimated output size for a profile and file; audioOnly estimates the video as copied
GET
/api/image?url=
cached poster / backdrop proxy
Profiles
Method
Path
Description
GET
/api/profiles
profiles and built-in presets
POST
/api/profiles · PUT /api/profiles/:id · DELETE /api/profiles/:id
manage profiles
POST
/api/profiles/:id/clone
clone (the only way to change a preset)
POST
/api/profiles/preview
the ffmpeg command and output name a profile would produce; audioOnly shows the audio-only command
GET
/api/smart-profiles
smart profiles and the two built-in ones
POST
/api/smart-profiles · PUT /api/smart-profiles/:id · DELETE /api/smart-profiles/:id
manage smart profiles
POST
/api/smart-profiles/:id/clone
clone (the only way to change a built-in one)
Discs
Method
Path
Description
GET
/api/disc/status
MakeMKV info, drives, whether ripping is enabled
GET
/api/disc/rips
all discs and rips
POST
/api/disc/detect
poll the drives now
POST
/api/disc/open
open an image or disc folder by path
GET
/api/disc/drives/candidates
optical devices found on the machine
POST
/api/disc/drives · DELETE /api/disc/drives/:id
drives added by device path
GET/POST
/api/disc/virtual · DELETE /api/disc/virtual/:id
linked images as virtual drives
POST
/api/disc/rips/:id/scan · /identify · /start · /cancel
rip lifecycle
PATCH
/api/disc/rips/:id
media match, selected titles, episode map, roles, audio, options
POST
/api/disc/rips/:id/estimate
rip and encode size for a selection
POST
/api/disc/rips/:id/add-to-library
add the show / movie to Sonarr / Radarr now
DELETE
/api/disc/rips/:id
forget a rip
POST
/api/disc/rips/:id/batch
answer the box set a disc was offered ({"accept":true})
DELETE
/api/disc/rips/:id/batch
take a disc out of its box set
POST
/api/disc/rips/:id/slot
file a disc that was not the one expected ({"disc":5} or {"reject":true})
PATCH
/api/disc/batches/:id
rename a box set, or set how many discs it holds
POST
/api/disc/drives/:index/swap
eject, and wait for the next disc of that drive's set
POST
/api/disc/drives/swap-all
the same for every drive whose disc has been copied
GET
/api/disc/rip-directory/check
can Radarr / Sonarr see the rip folder?
POST
/api/disc/import-rips
import what is left in the rip folder
POST
/api/disc/drives/:index/cd
read an audio CD
POST
/api/disc/rips/:id/musicbrainz
choose a MusicBrainz release for a CD
POST
/api/disc/drives/:index/eject
eject
Music
Method
Path
Description
GET
/api/music/artists · /api/music/artists/:id
Lidarr artists
GET
/api/music/albums · /api/music/albums/:id
albums and tracks
POST
/api/music/mqa
scan files for MQA
POST
/api/music/add
add an artist / album through Lidarr
GET
/api/music/cue-splits
image + cue splits in progress
POST
/api/music/import-folder
import a folder through Lidarr
GET
/api/music/freac
fre:ac version and encoders
GET
/api/musicbrainz/search
release search
GET
/api/media/metadata?path=
every tag, stream and format detail of a file
GET /api/local/status, POST /api/local/scan, GET /api/local/items, GET /api/local/items/:id,
GET /api/local/items/:id/candidates, POST /api/local/items/:id/match, POST /api/local/metadata/refresh,
GET /api/local/items/:id/poster.
GET /api/auto/status, POST /api/auto/scan[?dryRun=1], POST /api/auto/reset, POST /api/webhook/radarr|sonarr,
GET /api/anidb/status, POST /api/anidb/refresh, GET /api/anidb/search?q=.
Settings and system
Method
Path
Description
GET/PUT
/api/settings
all settings
GET
/api/settings/host
host settings (port, bind, URL base, SSL)
POST
/api/settings/apikey
reset the API key
POST
/api/settings/test/:app
test a connection (radarr, sonarr, prowlarr, lidarr, slskd)
POST
/api/notifications/test
send one test message to a notification target in the body
GET
/api/scan/qr.svg
QR code for the phone scanning page (experiment)
POST
/api/barcode/lookup
what a barcode is, and what it matches (experiment)
GET/POST
/api/barcode/expected · DELETE /api/barcode/expected/:id
discs a scan says are coming
GET
/api/wanted
the ripping to-do list: what a disc would improve (experiment)
GET
/api/settings/arr-options
root folders and quality profiles from the *arr apps
GET
/api/system · /api/system/health · /api/system/ffmpeg
status, health checks, encoders
GET
/api/system/paths
storage layout with sizes
GET/DELETE
/api/system/events
the Events list
GET
/api/system/tasks · POST /api/system/tasks/:id/run
scheduled tasks
GET/POST
/api/system/backups · GET/DELETE /api/system/backups/:name
backups
POST
/api/system/backups/:name/restore · /api/system/backups/restore
restore a backup or an upload
GET
/api/system/logs · /api/system/logs/:name · DELETE /api/system/logs
log files
GET
/api/system/updates[?refresh=1]
published releases with their notes, and which one is installed
POST
/api/system/shutdown · /api/system/restart
stop or restart the server
GET
/api/transcoding/devices · POST /api/transcoding/test
hardware devices and the encode test
GET
/api/setup/tools · POST /api/setup/dismiss
the first-run tools check
GET
/api/fs/list?path=
the server-side folder browser used by the UI
The API is still beta
Endpoints and payloads can change between releases while Rexarr is in beta. The
release notes call out breaking changes, and the version's second number
(major.backend.feature.minor) is raised when the API or storage layout changes.