bitwarden/server · error · BadRequestException
Free Bitwarden Families sponsorship has been disabled by…
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.
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.
- An organization the user is a part of has enabled Automatic…
- Failed to parse sponsorship token.
AI-assisted analysis of bitwarden/server@e93b962371 (2026-08-13).
Data as JSON: /api/errors/007bfc26661f2a55.
Report an issue: GitHub.
Appendix: 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)