Skip to content

[Bug] tvsubtitles, subf2m and subsource search requests use stale URLs or methods #207

Description

@Svnow132

Summary

On v1.14.0 (and on master as of 2026-09-11), tvsubtitles and subsource send their search requests to URLs that return 404, and subf2m sends a POST that its search page answers with 405. Each of the three has returned 0 results in more than 300 searches on my install. Bazarr's implementations of the same three providers send a different request at exactly the step that fails.

What actually happened?

Provider stats from GET /api/v1/providers:

tvsubtitles   342 searches, 0 results, 0 downloads
subf2m        332 searches, 0 results, 0 downloads
subsource     366 searches, 0 results, 0 downloads

I probed the search requests from inside the Sublarr container, so same egress and same resolver:

  • tvsubtitles: providers/tvsubtitles.py:141-142 POSTs to https://www.tvsubtitles.net/search.php, which returns 404 Not Found. The site itself is up; / returns 200.
  • subf2m: providers/subf2m.py:120 POSTs to https://subf2m.co/subtitles/searchbytitle, which returns 405 Method Not Allowed. A GET to the same URL with ?query=doctor+who&l= returns 200 with results.
  • subsource: providers/subsource.py:27 sets _API_BASE = "https://subsource.net/api", and both the GET and the POST to {_API_BASE}/search return 404. https://api.subsource.net/ does answer, and a GET to https://api.subsource.net/api/v1/movies/search?searchType=text&q=doctor+who without a key returns 401 with an API key required error.

The bundled tvsubtitles_subliminal adapter fails on the same URL from a different angle: the last 24 hours of my log hold 98 of 403 Client Error: Forbidden for url: https://www.tvsubtitles.net/search.php.

What made this easy to miss is that all three report as no_results ("342 searches, no results, no downloads"), which reads like a provider that has nothing for my library rather than one whose search request is failing.

What should have happened?

Each provider should reach the site's current search endpoint. For reference, this is what Bazarr's subliminal_patch providers send instead. I reproduced the tvsubtitles and subf2m request shapes from inside the Sublarr container; for subsource I could only test an unkeyed request.

  • tvsubtitles: POST {server_url}search1.php with form data {"qs": series}. From here that returns 200 and the tvsubtitles search page.
  • subf2m: GET {_BASE_URL}/subtitles/searchbytitle?query={query}&l=. From here that returns 200 with results.
  • subsource: Bazarr sets server_hostname = 'api.subsource.net', uses the base https://api.subsource.net/api/v1/, calls GET movies/search with searchType of imdb or text, and passes the key as an api_key parameter. My unkeyed request to that endpoint returned 401, and I did not test a keyed one. Bazarr wrote 18 subsource subtitles on my install in the last 10 days through this provider, so it looks like Sublarr needs the new URL plus a way to supply the API key, not just a URL change.

A smaller suggestion, in the spirit of the #201 work on naming why a provider is unhealthy: a 404 or 405 from a provider's own search endpoint could count as a failure rather than as "no results", so a search request that no longer works shows up as broken instead of as empty.

Steps to reproduce

From the Docker host, outside the container:

  1. curl -s -o /dev/null -w '%{http_code}' -X POST https://www.tvsubtitles.net/search.php -d 'qs=doctor who' returns 404
  2. curl -s -o /dev/null -w '%{http_code}' -X POST https://subf2m.co/subtitles/searchbytitle -d 'query=doctor who' returns 405
  3. curl -s -o /dev/null -w '%{http_code}' https://subsource.net/api/search returns 404

Sublarr version

v1.14.0

Deployment

docker compose (with Postgres / Redis)

Database

SQLite (default)

Logs / Support Export

GET /api/v1/providers (excerpt):
  tvsubtitles             status_reason=no_results  342 searches, no results, no downloads
  subf2m                  status_reason=no_results  332 searches, no results, no downloads
  subsource               status_reason=no_results  366 searches, no results, no downloads
  tvsubtitles_subliminal  status_reason=no_results  381 searches, no results, no downloads

Probes from inside the container, 2026-09-11:
  POST https://www.tvsubtitles.net/search.php  q=doctor who                               404
  POST https://www.tvsubtitles.net/search1.php  qs=doctor who                             200
  POST https://subf2m.co/subtitles/searchbytitle  query=doctor who&l=                     405
  GET  https://subf2m.co/subtitles/searchbytitle?query=doctor+who&l=                      200
  GET  https://subsource.net/api/search                                                   404
  GET  https://api.subsource.net/api/v1/movies/search?searchType=text&q=doctor+who (no key)  401 API key required

Adapter log, last 24 h:
  providers.subliminal_adapter: Subliminal provider tvsubtitles_subliminal failed search: 403 Client Error: Forbidden for url: https://www.tvsubtitles.net/search.php   (98x)

Additional context

I have turned tvsubtitles, tvsubtitles_subliminal and subf2m off on my install for now, and left subsource on so I can confirm a fix against it. Happy to test a fix against a live library.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions