bitwarden/server · error · BadRequestException
Organizations must not be assigned to any Provider.
Error message
Organizations must not be assigned to any Provider.
What it means
Thrown by ProviderService.AddOrganizationsToReseller after confirming the provider is a Reseller, when GetCountByOrganizationIdsAsync returns > 0 meaning one or more of the requested organizationIds are already linked to some provider. BadRequestException (HTTP 400).
Source
Thrown at bitwarden_license/src/Commercial.Core/AdminConsole/Services/ProviderService.cs:489
});
}
await _eventService.LogProviderOrganizationEventAsync(providerOrganization, EventType.ProviderOrganization_Added);
}
public async Task AddOrganizationsToReseller(Guid providerId, IEnumerable<Guid> organizationIds)
{
var provider = await _providerRepository.GetByIdAsync(providerId);
if (provider.Type != ProviderType.Reseller)
{
throw new BadRequestException("Provider must be of type Reseller in order to assign Organizations to it.");
}
var orgIdsList = organizationIds.ToList();
var existingProviderOrganizationsCount = await _providerOrganizationRepository.GetCountByOrganizationIdsAsync(orgIdsList);
if (existingProviderOrganizationsCount > 0)
{
throw new BadRequestException("Organizations must not be assigned to any Provider.");
}
var providerOrganizationsToInsert = orgIdsList.Select(orgId => new ProviderOrganization { ProviderId = providerId, OrganizationId = orgId });
var insertedProviderOrganizations = await _providerOrganizationRepository.CreateManyAsync(providerOrganizationsToInsert);
await _eventService.LogProviderOrganizationEventsAsync(insertedProviderOrganizations.Select(ipo => (ipo, EventType.ProviderOrganization_Added, (DateTime?)null)));
}
private async Task ApplyProviderPriceRateAsync(Organization organization, Provider provider)
{
// if a provider was created before Nov 6, 2023.If true, the organization plan assigned to that provider is updated to a 2020 plan.
if (provider.CreationDate >= Constants.ProviderCreatedPriorNov62023)
{
return;
}
if (!string.IsNullOrWhiteSpace(organization.GatewaySubscriptionId))
{View on GitHub (pinned to e93b962371)
Solutions
- Call GetCountByOrganizationIdsAsync(orgIds) (or filter GetByOrganizationId per id) and exclude already-linked orgs.
- Remove existing ProviderOrganization rows for orgs you intend to reassign before resubmitting.
- Dedupe the organizationIds list before submission.
Example fix
// before
await providerService.AddOrganizationsToReseller(providerId, orgIds);
// after
var linked = orgIds.Where(id =>
(await providerOrganizationRepository.GetByOrganizationId(id)) != null);
var freeOrgIds = orgIds.Except(linked).Distinct().ToList();
await providerService.AddOrganizationsToReseller(providerId, freeOrgIds); Defensive patterns
Strategy: validation
Validate before calling
var count = await providerOrganizationRepository.GetCountByOrganizationIdsAsync(orgIds);
if (count > 0) { /* filter out already-linked orgs */ } Try / catch
try { await providerService.AddOrganizationsToReseller(providerId, orgIds); }
catch (BadRequestException ex) when (ex.Message.Contains("must not be assigned")) { /* refresh list, retry unlinked */ } Prevention
- Dedupe and pre-filter org IDs against existing links.
- Make the bulk add idempotent by excluding already-linked orgs.
When it happens
Trigger: Bulk-assigning a set of org IDs to a reseller where at least one org already has a ProviderOrganization row (any provider).
Common situations: A partial retry of a failed batch where some orgs already linked; an admin who re-submits the whole list after the first org succeeded; duplicate IDs in the request.
Related errors
- Organization already belongs to a provider.
- Provider must be of type Reseller in order to assign Organiz
- Providers cannot manage organizations with the requested pla
- You cannot remove yourself.
- The organization is subscribed to Secrets Manager. Please co
AI-assisted analysis of bitwarden/server@e93b962371 (2026-08-13).
Data as JSON: /api/errors/10405e95ca9bda35.
Report an issue: GitHub.