Files
kindexr/docs/TORZNAB.md
T
enki 1b7b70426c feat: Phase 0 bootstrap — kindexr boots, migrates, serves /health
- config: koanf-based loading (defaults → YAML → KINDEXR_ env vars)
- db: embedded SQLite migrations with BEGIN/END-aware statement splitter
- server: chi router, GET /health returns JSON stats
- cmd/kindexr: graceful SIGTERM shutdown
- cmd/kindexr-cli: stub
- deploy: systemd unit, example config, nginx snippet
- all packages covered by race-clean tests
2026-05-16 18:45:15 -07:00

3.1 KiB

Torznab API

nzbstr implements the Torznab spec — a superset of Newznab adapted for BitTorrent. All endpoints are under /api.

Phase availability

Endpoint Phase
GET /health Phase 0
GET /api?t=caps Phase 1
GET /api?t=search Phase 1
GET /api?t=tvsearch Phase 2
GET /api?t=movie Phase 2
GET /api?t=music Phase 2
GET /api?t=audio Phase 2
GET /api?t=book Phase 2

Authentication

Every endpoint except /health requires an apikey query parameter.

GET /api?t=search&q=breaking+bad&apikey=<your-key>

Missing or invalid key returns HTTP 200 with a Torznab error body:

<error code="100" description="Incorrect user credentials"/>

Generate keys with nzbstr-cli apikey create --label sonarr.

GET /api?t=caps

Returns a capabilities XML document. Sonarr/Radarr call this on add to discover supported categories and search modes.

Supported search modes:

  • search — generic FTS5 over title and description
  • tv-searchq, season, ep, imdbid, tvdbid, tmdbid
  • movie-searchq, imdbid, tmdbid
  • music-searchq, artist, album, year
  • audio-searchq, artist, album, year
  • book-searchq, author, title

GET /api?t=search

Parameters: q, cat, limit (default 50, max 100), offset, apikey.

q is passed directly to SQLite FTS5 against the title and description columns. Supports FTS5 query syntax (AND, OR, NOT, "phrase", prefix*).

Returns Torznab RSS XML with <item> elements containing:

  • <title>, <guid>, <link> (magnet URL), <pubDate>, <size>, <description>
  • <enclosure> with magnet URL and file size
  • <torznab:attr> elements for category, infohash, magneturl, seeders, peers, upload/download factors, and ID tags

GET /api?t=tvsearch (Phase 2+)

Additional parameters: tvdbid, imdbid, tmdbid, season, ep.

Structured ID parameters take priority over q. If season and/or ep are set, results are filtered by the parsed season / episode columns in the database.

GET /api?t=movie (Phase 2+)

Additional parameters: imdbid, tmdbid.

GET /api?t=music / t=audio (Phase 2+)

Additional parameters: artist, album, year.

GET /api?t=book (Phase 2+)

Additional parameters: author, title.

Categories (newznab codes)

Code Name
2000 Movies
2030 Movies/SD
2040 Movies/HD
2045 Movies/UHD
2050 Movies/BluRay
3000 Audio
3010 Audio/MP3
3030 Audio/Audiobook
3040 Audio/Lossless
5000 TV
5030 TV/SD
5040 TV/HD
5045 TV/UHD
5070 TV/Anime
7000 Books
7020 Books/EBook
7030 Books/Comics
8000 Other

Categories are sourced from NIP-35 i tags (newznab:NNNN or tcat:...) and fall back to 8000 if unknown.

XML format

nzbstr follows the Torznab RSS 2.0 format. The xmlns:torznab namespace is http://torznab.com/schemas/2015/feed. All <torznab:attr> elements use standard Newznab attribute names so existing *arr configurations work without modification.