ppy/osu · error · NotSupportedException
Beatmap submission not supported in this configuration!
Error message
Beatmap submission not supported in this configuration!
What it means
Thrown by PutBeatmapSetRequest.Uri getter when API.Endpoints.BeatmapSubmissionServiceUrl is null. PutBeatmapSetRequest creates a beatmapset (PUT /beatmapsets); without the submission service URL the request has no valid target and the getter throws NotSupportedException. Note the Target property also throws NotSupportedException as a secondary guard.
Source
Thrown at osu.Game/Online/API/Requests/PutBeatmapSetRequest.cs:26
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using osu.Framework.IO.Network;
using osu.Framework.Localisation;
using osu.Game.Localisation;
using osu.Game.Online.API.Requests.Responses;
using osu.Game.Screens.Edit.Submission;
namespace osu.Game.Online.API.Requests
{
public class PutBeatmapSetRequest : APIRequest<PutBeatmapSetResponse>
{
protected override string Uri
{
get
{
// can be removed once the service has been successfully deployed to production
if (API!.Endpoints.BeatmapSubmissionServiceUrl == null)
throw new NotSupportedException("Beatmap submission not supported in this configuration!");
return $@"{API!.Endpoints.BeatmapSubmissionServiceUrl}/beatmapsets";
}
}
protected override string Target => throw new NotSupportedException();
[JsonProperty("beatmapset_id")]
public uint? BeatmapSetID { get; init; }
[JsonProperty("beatmaps_to_create")]
public uint BeatmapsToCreate { get; init; }
[JsonProperty("beatmaps_to_keep")]
public uint[] BeatmapsToKeep { get; init; } = [];
[JsonProperty("target")]
public BeatmapSubmissionTarget SubmissionTarget { get; init; }
View on GitHub (pinned to d9c73e12ad)
Solutions
- Set API.Endpoints.BeatmapSubmissionServiceUrl before exposing/using the submission flow.
- Disable the submission UI entry point when BeatmapSubmissionServiceUrl is null.
- Post-deployment, remove the guard per the inline comment.
Example fix
// before
var req = new PutBeatmapSetRequest { ... };
api.Perform(req); // NotSupportedException from Uri getter
// after
if (api.Endpoints.BeatmapSubmissionServiceUrl == null)
{
submissionButton.Enabled.Value = false;
return;
}
var req = new PutBeatmapSetRequest { ... };
api.Perform(req); Defensive patterns
Strategy: validation
Validate before calling
if (api.Endpoints.BeatmapSubmissionServiceUrl == null)
{ submissionButton.Enabled.Value = false; return; }
var req = new PutBeatmapSetRequest { ... }; Type guard
static bool IsSubmissionEnabled(IAPIEndpointProvider endpoints)
=> !string.IsNullOrWhiteSpace(endpoints.BeatmapSubmissionServiceUrl); Try / catch
try { api.Perform(req); }
catch (NotSupportedException ex) when (ex.Message.Contains("Beatmap submission"))
{ /* 'submission unavailable' notification */ } Prevention
- Bind the create-submission button's Enabled to BeatmapSubmissionServiceUrl != null.
- Configure endpoints before enabling the submission flow in any build.
- Clean up the guard post-production rollout.
When it happens
Trigger: Performing a PutBeatmapSetRequest (create new beatmapset submission) when BeatmapSubmissionServiceUrl is unconfigured. The Uri getter is hit during request execution.
Common situations: Editor 'submit beatmap' flow on a build where the submission service endpoint isn't set; dev/staging configs missing the URL; the feature enabled in code before deployment.
Related errors
- Beatmap submission not supported in this configuration!
- Beatmap submission not supported in this configuration!
- Cannot use this argument in a non-debug build.
- A channel with the name {channelName} could not be found.
- Binary message type not supported.
AI-assisted analysis of ppy/osu@d9c73e12ad (2026-08-13).
Data as JSON: /api/errors/544b7fe99ba76caa.
Report an issue: GitHub.