bitwarden/server · error · BadRequestException
Free Bitwarden Families sponsorship has been disabled by you
Error message
Free Bitwarden Families sponsorship has been disabled by your organization administrator.
What it means
Thrown (HTTP 400) when creating a Families-for-Enterprise sponsorship because the sponsoring organization has the FreeFamiliesSponsorshipPolicy enabled. Despite the optimistic policy name, an ENABLED FreeFamiliesSponsorshipPolicy DISABLES sponsorships — an org owner turned the policy on to block the feature org-wide.
Source
Thrown at src/Api/Billing/Controllers/OrganizationSponsorshipsController.cs:94
_userService = userService;
_currentContext = currentContext;
_policyQuery = policyQuery;
_featureService = featureService;
_logger = logger;
}
[Authorize("Application")]
[HttpPost("{sponsoringOrgId}/families-for-enterprise")]
[SelfHosted(NotSelfHostedOnly = true)]
public async Task CreateSponsorship(Guid sponsoringOrgId, [FromBody] OrganizationSponsorshipCreateRequestModel model)
{
var sponsoringOrg = await _organizationRepository.GetByIdAsync(sponsoringOrgId);
var freeFamiliesSponsorshipPolicy = await _policyQuery.RunAsync(sponsoringOrgId,
PolicyType.FreeFamiliesSponsorshipPolicy);
if (freeFamiliesSponsorshipPolicy.Enabled)
{
throw new BadRequestException("Free Bitwarden Families sponsorship has been disabled by your organization administrator.");
}
var sponsorship = await _createSponsorshipCommand.CreateSponsorshipAsync(
sponsoringOrg,
await _organizationUserRepository.GetByOrganizationAsync(sponsoringOrgId, _currentContext.UserId ?? default),
model.PlanSponsorshipType,
model.SponsoredEmail,
model.FriendlyName,
model.IsAdminInitiated.GetValueOrDefault(),
model.Notes);
if (sponsorship.OfferedToEmail != null)
{
await _sendSponsorshipOfferCommand.SendSponsorshipOfferAsync(sponsorship, sponsoringOrg.Name);
}
}
[Authorize("Application")]
[Authorize<ManageUsersRequirement>]View on GitHub (pinned to e93b962371)
Solutions
- Have an organization owner disable the FreeFamiliesSponsorshipPolicy for the sponsoring org (or the governing enterprise).
- Confirm you are targeting the intended sponsoring organization.
- If the policy is intentional, stop attempting to create sponsorships and communicate the restriction to users.
Defensive patterns
Strategy: validation
Validate before calling
// Before offering to create a sponsorship, fetch and check the policy state.
const policy = await getPolicy(sponsoringOrgId, 'FreeFamiliesSponsorshipPolicy');
if (policy.enabled) { disableCreateSponsorshipUI(); } Try / catch
try {
await createSponsorship(sponsoringOrgId, model);
} catch (e) {
if (e.isBadRequest && /sponsorship has been disabled/i.test(e.message)) {
showPolicyNotice('Your organization administrator has disabled sponsorships.');
} else { throw e; }
} Prevention
- Poll policy state before exposing sponsorship actions in the UI.
- Hide the create-sponsorship control when the disable-policy is enabled.
- Communicate enterprise policy changes to affected admins.
When it happens
Trigger: An org admin enabled the 'disable free families sponsorship' policy and a user then calls POST /{sponsoringOrgId}/families-for-enterprise; the sponsoring org is governed by an enterprise policy that cascades this restriction.
Common situations: Enterprise policy rollout that disables sponsorships across member organizations; admin toggled the policy after sponsorships were already being offered.
Related errors
- Can only redeem sponsorship for an organization you own.
- Can only revoke a sponsorship you granted.
- Only the owner of an organization can remove sponsorship.
- Failed to remove organization vault. Please contact support.
- Organization must have at least one confirmed owner.
AI-assisted analysis of bitwarden/server@e93b962371 (2026-08-13).
Data as JSON: /api/errors/007bfc26661f2a55.
Report an issue: GitHub.