Design · Development · Voice · Webhook · Overview dashboard · Changelog
HaSeerr complements the built-in
overseerrintegration (read-only). Both can run side-by-side.
haseerr-card— custom Lovelace card with search, posters, click-to-pick, per-row Seerr links, season picker, and 4K toggle. Auto-registers; no Lovelace resource setup needed.- Services —
search,request,approve_request,decline_request,user_quota. - Smart user mapping — wizard pairs each HA user with a Seerr user (email-exact → name-exact → fuzzy ≥ 0.85). Per-user request quotas displayed on the card.
- Voice (Assist) —
RequestMedia/ConfirmRequest/CancelRequestintents in English and Bulgarian, full multi-turn flow: "request Dune Part Two" → "Did you mean…" → "yes" → submitted. - Status events — Seerr's webhook can post directly to HaSeerr; emits
haseerr_request_status_changedevents for approved / available / declined / failed transitions. No coreoverseerrintegration required. - Music + 4K + TV seasons — request music if Lidarr is configured in Seerr, request 4K if your user has the permission, pick specific TV seasons.
- HACS → Integrations → ⋮ → Custom repositories
- Repository:
https://github.com/svilendotorg/haseerr· Type: Integration - Download HaSeerr, restart Home Assistant
- Settings → Devices & Services → Add Integration → HaSeerr
Copy custom_components/haseerr/ into your HA config/custom_components/ and restart HA.
The setup wizard asks for:
- Seerr URL — e.g.
https://seerr.example.comorhttp://192.168.1.10:5055 - API key — Seerr → Settings → General → API Key
After setup, the Configure button opens the user-mapping wizard: each HA user gets a dropdown pre-filled with the suggested Seerr user. Save to persist. Re-runnable anytime when family members are added.
type: custom:haseerr-card
# all fields optional:
title: "" # default empty (no header)
limit: 5 # search results to show; default 5
poster_size: w200 # tmdb image size; default w200
hide_unavailable: false # if true, skip "already in library" results
allow_season_picker: true # if false, TV always requests all seasons
show_quota: true # show monthly quota in card headerThe card auto-registers from the integration on both YAML and UI-mode Lovelace dashboards. No need to add the JS as a resource manually.
# Search
service: haseerr.search
data: { query: "Dune", media_type: all, limit: 5 }
# response: { results: [...], seerr_url: "..." }
# Request
service: haseerr.request
data:
tmdb_id: 693134
media_type: movie # movie | tv | music
# seasons: "all" # TV: "all" or [1, 2]
# is_4k: true # if user has 4K permission in Seerr
# title: "Dune" # included in haseerr_request_submitted event
# Approve / decline
service: haseerr.approve_request
data: { request_id: 1247 }
service: haseerr.decline_request
data: { request_id: 1247, reason: "too violent" }
# Quota for the caller's mapped user
service: haseerr.user_quota
# response: { movie: {limit, used, ...}, tv: {limit, used, ...} }Full design + event payloads in docs/design.md.
🎤 "Hey Assist, request Dune Part Two" 🔊 "Did you mean Dune: Part Two from 2024, the movie?" 🎤 "Yes." 🔊 "Requested Dune: Part Two."
Confirmation window is 60 seconds. Bulgarian variants: поискай <title> → да / не.
One-time setup: HA's conversation matcher requires sentence patterns to live in <config>/custom_sentences/<lang>/ rather than inside the integration. Copy from docs/voice.md into your config and restart HA.
After installing HaSeerr, your webhook URL is generated automatically. Find it in HA logs at startup — search for HaSeerr webhook URL:. Paste it into Seerr → Settings → Notifications → Webhook. Subsequent status changes fire haseerr_request_status_changed events. Details: docs/webhook.md.
Run both. The built-in overseerr integration provides read-only sensors and a seerr.get_requests action. HaSeerr adds submission + smart user mapping + the card + voice + a richer event stream. No overlapping domains or services.
See docs/automations-examples.yaml. Includes mobile actionable notifications for Approve/Decline, plus a logbook entry on each successful submit.
git clone https://github.com/svilendotorg/haseerr
cd haseerr
python -m venv .venv && source .venv/bin/activate
pip install -r requirements_test.txt aioresponses
pytest -vMore: docs/development.md.
MIT — see LICENSE.
