#18084·jellyfin

[12.1] MusicBrainz rate-limiting issue ('The MusicBrainz web server is currently busy. Please try again later.')

Author: torojuroCreated Sep 16, 2026Updated Sep 17, 2026
Labelsbug

Description of the bug

Today I decided to upgrade my Jellyfin instance from 10.7 to 12.1 and the migration process succeded without much issues. But now if I add a music album and try to get the metadata from MusicBrainz, I get this error:

[20:44:04] [ERR] [10] MediaBrowser.Providers.Music.ArtistMetadataService: Error in MusicBrainz for /media/Album/Gang Starr
MetaBrainz.Common.HttpError: The MusicBrainz web server is currently busy. Please try again later.

 ---> MetaBrainz.Common.HttpError: HTTP 503 (ServiceUnavailable) 'Service Temporarily Unavailable'
   at MetaBrainz.Common.HttpUtils.EnsureSuccessfulAsync(HttpResponseMessage response, CancellationToken cancellationToken)
   at MetaBrainz.MusicBrainz.Query.PerformRequestAsync(Uri uri, HttpMethod method, HttpContent body, CancellationToken cancellationToken, String format)
   --- End of inner exception stack trace ---
   at MetaBrainz.MusicBrainz.Query.PerformRequestAsync(Uri uri, HttpMethod method, HttpContent body, CancellationToken cancellationToken, String format)
   at MetaBrainz.MusicBrainz.Query.ApplyDelayAsync[T](Func`2 request, CancellationToken cancellationToken)
   at MetaBrainz.MusicBrainz.Objects.PagedQueryResults`3.PerformRequestAsync(CancellationToken cancellationToken)
   at MetaBrainz.MusicBrainz.Objects.PagedQueryResults`3.NextAsync(CancellationToken cancellationToken)
   at MediaBrowser.Providers.Plugins.MusicBrainz.MusicBrainzArtistProvider.GetSearchResults(ArtistInfo searchInfo, CancellationToken cancellationToken)
   at MediaBrowser.Providers.Plugins.MusicBrainz.MusicBrainzArtistProvider.GetMetadata(ArtistInfo info, CancellationToken cancellationToken)
   at MediaBrowser.Providers.Manager.MetadataService`2.ExecuteRemoteProviders(MetadataResult`1 temp, String logName, Boolean replaceData, TIdType id, IEnumerable`1 providers, CancellationToken cancellationToken)

It seems I am getting rate-limited from the MusicBrainz servers. The strange thing is that I wasn't having this issue before upgrading. So I checked how the User-Agent header is constructed with the MetaBrainz.MusicBrainz library and seems to be correct, because it follows their application/version (contact) format. I also raised the seconds between the requests, but I can still see 503 errors from the logs. The same issue arises if you simply rescan a music album already added to the library.

I tried to execute a query with curl and I can get successful responses most of the times. In some cases I get the 503 error. The output of a successful request is this:

curl -svH "Accept: application/json" -A "Jellyfin/12.1 ([email protected])" https://musicbrainz.org/ws/2/release-group/6b3d273c-0548-3e58-a879-727ef831f4e5 | jq .
* Host musicbrainz.org:443 was resolved.
* IPv6: 2a01:4f8:c011:f68::1
* IPv4: 142.132.241.153
*   Trying [2a01:4f8:c011:f68::1]:443...
* Immediate connect fail for 2a01:4f8:c011:f68::1: Network is unreachable
*   Trying 142.132.241.153:443...
* ALPN: curl offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [1570 bytes data]
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [122 bytes data]
* TLSv1.3 (IN), TLS change cipher, Change cipher spec (1):
{ [1 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [19 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [3251 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [264 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [52 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [52 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 / x25519 / RSASSA-PSS
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=*.musicbrainz.org
*  start date: Sep  9 00:00:00 2025 GMT
*  expire date: Oct 10 23:59:59 2026 GMT
*  subjectAltName: host "musicbrainz.org" matched cert's "musicbrainz.org"
*  issuer: C=FR; O=Gandi SAS; CN=GandiCert
*  SSL certificate verify ok.
*   Certificate level 0: Public key type RSA (2048/112 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 1: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 2: Public key type RSA (2048/112 Bits/secBits), signed using sha256WithRSAEncryption
* Connected to musicbrainz.org (142.132.241.153) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://musicbrainz.org/ws/2/release-group/6b3d273c-0548-3e58-a879-727ef831f4e5
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: musicbrainz.org]
* [HTTP/2] [1] [:path: /ws/2/release-group/6b3d273c-0548-3e58-a879-727ef831f4e5]
* [HTTP/2] [1] [user-agent: Jellyfin.Jellyfin/12.1 ([email protected])]
* [HTTP/2] [1] [accept: application/json]
} [5 bytes data]
> GET /ws/2/release-group/6b3d273c-0548-3e58-a879-727ef831f4e5 HTTP/2
> Host: musicbrainz.org
> User-Agent: Jellyfin.Jellyfin/12.1 ([email protected])
> Accept: application/json
> 
* Request completely sent off
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [57 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [57 bytes data]
< HTTP/2 200 
< date: Wed, 16 Sep 2026 00:00:44 GMT
< content-type: application/json; charset=utf-8
< content-length: 247
< x-ratelimit-limit: 1200
< x-ratelimit-remaining: 60
< x-ratelimit-reset: 1789516845
< server: Plack::Handler::Starlet
< etag: "0808000534bf4223b793450029ee7d97"
< access-control-allow-origin: *
< x-runtime: 0.014636
< x-mb-gateway: rudi
< x-cache-status: STALE
< 
{ [247 bytes data]
* Connection #0 to host musicbrainz.org left intact
{
  "primary-type": "Album",
  "secondary-type-ids": [],
  "id": "6b3d273c-0548-3e58-a879-727ef831f4e5",
  "secondary-types": [],
  "first-release-date": "1994-02-28",
  "title": "Hard to Earn",
  "primary-type-id": "f529b476-6e62-324f-b0aa-1f3e33d313fc",
  "disambiguation": ""
}

This is the output of an unsuccessful request:

curl -svH "Accept: application/json" -A "Jellyfin/12.1 ([email protected])" https://musicbrainz.org/ws/2/release-group/6b3d273c-0548-3e58-a879-727ef831f4e5 | jq .
* Host musicbrainz.org:443 was resolved.
* IPv6: 2a01:4f8:c011:f68::1
* IPv4: 142.132.241.153
*   Trying [2a01:4f8:c011:f68::1]:443...
* Immediate connect fail for 2a01:4f8:c011:f68::1: Network is unreachable
*   Trying 142.132.241.153:443...
* ALPN: curl offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [1570 bytes data]
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [122 bytes data]
* TLSv1.3 (IN), TLS change cipher, Change cipher spec (1):
{ [1 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [19 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [3251 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [264 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [52 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [52 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 / x25519 / RSASSA-PSS
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=*.musicbrainz.org
*  start date: Sep  9 00:00:00 2025 GMT
*  expire date: Oct 10 23:59:59 2026 GMT
*  subjectAltName: host "musicbrainz.org" matched cert's "musicbrainz.org"
*  issuer: C=FR; O=Gandi SAS; CN=GandiCert
*  SSL certificate verify ok.
*   Certificate level 0: Public key type RSA (2048/112 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 1: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 2: Public key type RSA (2048/112 Bits/secBits), signed using sha256WithRSAEncryption
* Connected to musicbrainz.org (142.132.241.153) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://musicbrainz.org/ws/2/release-group/6b3d273c-0548-3e58-a879-727ef831f4e5
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: musicbrainz.org]
* [HTTP/2] [1] [:path: /ws/2/release-group/6b3d273c-0548-3e58-a879-727ef831f4e5]
* [HTTP/2] [1] [user-agent: Jellyfin/12.1 ([email protected])]
* [HTTP/2] [1] [accept: application/json]
} [5 bytes data]
> GET /ws/2/release-group/6b3d273c-0548-3e58-a879-727ef831f4e5 HTTP/2
> Host: musicbrainz.org
> User-Agent: Jellyfin/12.1 ([email protected])
> Accept: application/json
> 
* Request completely sent off
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [57 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [57 bytes data]
< HTTP/2 503 
< server: openresty
< date: Wed, 16 Sep 2026 00:05:39 GMT
< content-type: application/json
< x-ratelimit-limit: 15
< x-ratelimit-remaining: 14
< x-ratelimit-reset: 1789517149
< retry-after: 0
< x-ratelimit-zone: global
< x-ratelimit-who: global
< x-mb-rate-limiter: lua
< access-control-allow-origin: *
< x-mb-gateway: rudi
< 
{ [83 bytes data]
* Connection #0 to host musicbrainz.org left intact
{
  "error": "The MusicBrainz web server is currently busy. Please try again later."
}

Actually every time I try to referesh metadata with Jellyfin, I always get the 503 HTTP error. The User-Agent header I set in the curl request is just an example, I don't know the real values set from Jellyfin at the time of the requests.

The consequences are that Jellyfin is not filling albums/artists metadata correctly.

Reproduction steps

  1. Add an album to your music library
  2. Look at the Jellyfin logs and look for messages like this: 'The MusicBrainz web server is currently busy. Please try again later.'

What is the current bug behavior?

Albums and artists metadata are inconsistent after adding/rescanning them.

What is the expected correct behavior?

Albums and artists should be filled correctly and MusicBrainz metadata fetching should not give errors.

Jellyfin Server version

12.1

Specify commit id

No response

Specify unstable release number

No response

Specify version number

No response

Specify the build version

12.1

Environment

- OS: Raspberry Pi OS
- Linux Kernel: 6.18.39
- Virtualization: Docker
- Clients: Jellyfin Media Player, Finamp
- Browser:
- FFmpeg Version: 8.1
- Playback Method:
- Hardware Acceleration:
- CPU Model:
- GPU Model:
- Plugins: none
- Reverse Proxy: nginx
- Base URL: none
- Networking: Host
- Jellyfin Data Storage & Filesystem: 
- Media Storage & Filesystem: local HDD with software RAID-1, ext4
- External Integrations:

Jellyfin logs

[23:09:35] [ERR] [26] MediaBrowser.Providers.Music.ArtistMetadataService: Error in MusicBrainz for /config/metadata/artists/M.O.P
MetaBrainz.Common.HttpError: The MusicBrainz web server is currently busy. Please try again later.

 ---> MetaBrainz.Common.HttpError: HTTP 503 (ServiceUnavailable) 'Service Temporarily Unavailable'
   at MetaBrainz.Common.HttpUtils.EnsureSuccessfulAsync(HttpResponseMessage response, CancellationToken cancellationToken)
   at MetaBrainz.MusicBrainz.Query.PerformRequestAsync(Uri uri, HttpMethod method, HttpContent body, CancellationToken cancellationToken, String format)
   --- End of inner exception stack trace ---
   at MetaBrainz.MusicBrainz.Query.PerformRequestAsync(Uri uri, HttpMethod method, HttpContent body, CancellationToken cancellationToken, String format)
   at MetaBrainz.MusicBrainz.Query.ApplyDelayAsync[T](Func`2 request, CancellationToken cancellationToken)
   at MetaBrainz.MusicBrainz.Objects.PagedQueryResults`3.PerformRequestAsync(CancellationToken cancellationToken)
   at MetaBrainz.MusicBrainz.Objects.PagedQueryResults`3.NextAsync(CancellationToken cancellationToken)
   at MediaBrowser.Providers.Plugins.MusicBrainz.MusicBrainzArtistProvider.GetSearchResults(ArtistInfo searchInfo, CancellationToken cancellationToken)
   at MediaBrowser.Providers.Plugins.MusicBrainz.MusicBrainzArtistProvider.GetMetadata(ArtistInfo info, CancellationToken cancellationToken)
   at MediaBrowser.Providers.Manager.MetadataService`2.ExecuteRemoteProviders(MetadataResult`1 temp, String logName, Boolean replaceData, TIdType id, IEnumerable`1 providers, CancellationToken cancellationToken)
[23:10:14] [ERR] [39] MediaBrowser.Providers.Music.ArtistMetadataService: Error in MusicBrainz for /config/metadata/artists/Shiggy Sha
MetaBrainz.Common.HttpError: The MusicBrainz web server is currently busy. Please try again later.

 ---> MetaBrainz.Common.HttpError: HTTP 503 (ServiceUnavailable) 'Service Temporarily Unavailable'
   at MetaBrainz.Common.HttpUtils.EnsureSuccessfulAsync(HttpResponseMessage response, CancellationToken cancellationToken)
   at MetaBrainz.MusicBrainz.Query.PerformRequestAsync(Uri uri, HttpMethod method, HttpContent body, CancellationToken cancellationToken, String format)
   --- End of inner exception stack trace ---
   at MetaBrainz.MusicBrainz.Query.PerformRequestAsync(Uri uri, HttpMethod method, HttpContent body, CancellationToken cancellationToken, String format)
   at MetaBrainz.MusicBrainz.Query.ApplyDelayAsync[T](Func`2 request, CancellationToken cancellationToken)
   at MetaBrainz.MusicBrainz.Query.PerformRequestAsync[TI,TO](String entity, String id, IReadOnlyDictionary`2 options, CancellationToken cancellationToken)
   at MediaBrowser.Providers.Plugins.MusicBrainz.MusicBrainzQueryExtensions.NotFoundAsNullAsync[T](Func`1 lookup, String entityType, Guid id, ILogger logger)
   at MediaBrowser.Providers.Plugins.MusicBrainz.MusicBrainzArtistProvider.GetMetadata(ArtistInfo info, CancellationToken cancellationToken)
   at MediaBrowser.Providers.Manager.MetadataService`2.ExecuteRemoteProviders(MetadataResult`1 temp, String logName, Boolean replaceData, TIdType id, IEnumerable`1 providers, CancellationToken cancellationToken)
[23:26:39] [ERR] [30] MediaBrowser.Providers.Music.ArtistMetadataService: Error in MusicBrainz for /config/metadata/artists/M.O.P
MetaBrainz.Common.HttpError: The MusicBrainz web server is currently busy. Please try again later.

 ---> MetaBrainz.Common.HttpError: HTTP 503 (ServiceUnavailable) 'Service Temporarily Unavailable'
   at MetaBrainz.Common.HttpUtils.EnsureSuccessfulAsync(HttpResponseMessage response, CancellationToken cancellationToken)
   at MetaBrainz.MusicBrainz.Query.PerformRequestAsync(Uri uri, HttpMethod method, HttpContent body, CancellationToken cancellationToken, String format)
   --- End of inner exception stack trace ---
   at MetaBrainz.MusicBrainz.Query.PerformRequestAsync(Uri uri, HttpMethod method, HttpContent body, CancellationToken cancellationToken, String format)
   at MetaBrainz.MusicBrainz.Query.ApplyDelayAsync[T](Func`2 request, CancellationToken cancellationToken)
   at MetaBrainz.MusicBrainz.Query.PerformRequestAsync[TI,TO](String entity, String id, IReadOnlyDictionary`2 options, CancellationToken cancellationToken)
   at MediaBrowser.Providers.Plugins.MusicBrainz.MusicBrainzQueryExtensions.NotFoundAsNullAsync[T](Func`1 lookup, String entityType, Guid id, ILogger logger)
   at MediaBrowser.Providers.Plugins.MusicBrainz.MusicBrainzArtistProvider.GetMetadata(ArtistInfo info, CancellationToken cancellationToken)
   at MediaBrowser.Providers.Manager.MetadataService`2.ExecuteRemoteProviders(MetadataResult`1 temp, String logName, Boolean replaceData, TIdType id, IEnumerable`1 providers, CancellationToken cancellationToken)
[23:26:49] [ERR] [30] MediaBrowser.Providers.Music.ArtistMetadataService: Error in MusicBrainz for /config/metadata/artists/Freddie Foxxx
MetaBrainz.Common.HttpError: The MusicBrainz web server is currently busy. Please try again later.

 ---> MetaBrainz.Common.HttpError: HTTP 503 (ServiceUnavailable) 'Service Temporarily Unavailable'
   at MetaBrainz.Common.HttpUtils.EnsureSuccessfulAsync(HttpResponseMessage response, CancellationToken cancellationToken)
   at MetaBrainz.MusicBrainz.Query.PerformRequestAsync(Uri uri, HttpMethod method, HttpContent body, CancellationToken cancellationToken, String format)
   --- End of inner exception stack trace ---
   at MetaBrainz.MusicBrainz.Query.PerformRequestAsync(Uri uri, HttpMethod method, HttpContent body, CancellationToken cancellationToken, String format)
   at MetaBrainz.MusicBrainz.Query.ApplyDelayAsync[T](Func`2 request, CancellationToken cancellationToken)
   at MetaBrainz.MusicBrainz.Query.PerformRequestAsync[TI,TO](String entity, String id, IReadOnlyDictionary`2 options, CancellationToken cancellationToken)
   at MediaBrowser.Providers.Plugins.MusicBrainz.MusicBrainzQueryExtensions.NotFoundAsNullAsync[T](Func`1 lookup, String entityType, Guid id, ILogger logger)
   at MediaBrowser.Providers.Plugins.MusicBrainz.MusicBrainzArtistProvider.GetMetadata(ArtistInfo info, CancellationToken cancellationToken)
   at MediaBrowser.Providers.Manager.MetadataService`2.ExecuteRemoteProviders(MetadataResult`1 temp, String logName, Boolean replaceData, TIdType id, IEnumerable`1 providers, CancellationToken cancellationToken)

FFmpeg logs

Client / Browser logs

No response

Relevant screenshots or videos

No response

Additional information

No response