This guide helps you troubleshoot various situations you might encounter when working with Unleash feature flags, including flags not being returned, users not being exposed as expected, unexpected A/B test results, and CORS errors.
If a feature flag isn’t being returned by the Frontend API or Edge, or if users are not being exposed to a flag you believe is enabled, consider the following. By default, these endpoints do not return feature flags that are not enabled to save bandwidth.
true for your given context.ready eventready event before calling isEnabled('feature-flag') or getVariant('feature-flag'). Calling these functions too early might mean the client hasn’t yet received the latest flag configurations from the server.*: (e.g., *:production:xyz123etc...) provide access to flags in the specified environment across all projects.[]: (e.g., []:production:xyz123etc...) grant access to a specific subset of projects in the given environment. You can see which projects a token has access to on the API Tokens page in the Unleash admin UI.my_fullstack_app:production:xyz123etc...) are restricted to that project and environment.userId, sessionId, or a custom field), the gradual rollout strategy will evaluate to false. Consequently, the flag (or the “on” state for that user) will not be returned by the API.If you need to know about a flag regardless of whether it’s “on” or “off” for a user (e.g., for analytics or UI rendering logic), consider using variants:
First, enable the feature flag itself in the desired environment.
Next, configure strategy variants to represent “enabled” and “disabled” states. You can assign percentages to these variants (e.g., 50% “enabled”, 50% “disabled”).

This flag itself is enabled in development and adds a 50%/50% split between disabled/enabled variants. This is essentially the same as a gradual rollout of 50% but using variants.
Then, in your SDK, use the getVariant() call (or equivalent) instead of isEnabled().
This approach can also be combined with more complex constraint-based targeting.

This flag returns an “enabled” variant for clients with a specific semver and performs a percentage split for the remaining clients.
If your A/B tests or experiments are producing unexpected results:
userId or sessionId (or both, depending on your setup) is consistently provided in the Unleash context from your application.false, and the user will not be part of the A/B test population for that flag.Refer to the documentation on feature flag variants.
For a simple 50-50 A/B test, your variants should be configured accordingly (e.g., two variants, “A” and “B”, with appropriate weighting or rollout distribution if not handled by a parent strategy).

Verify that your application code correctly handles the feature flag variant response. Consult your specific SDK’s documentation.
For example, using the Unleash React SDK, you might follow the check variants section. Given the example variants “A” and “B”, your code might look like this:
Cross-Origin Resource Sharing (CORS) issues can prevent your client-side application from communicating with the Unleash API or Edge. Browsers enforce CORS as a security measure. If you see errors like “No ‘Access-Control-Policy’ header is present on the requested resource,” it’s likely a CORS misconfiguration.
https://your-app.com).
* (a single asterisk) to allow all origins. This helps confirm if CORS is the root cause.* in production is generally discouraged. Always restrict origins to only those that require access.If you are using Unleash Edge, CORS headers are typically configured via command-line flags when starting the Edge instance:
--cors-origin flag multiple times.Access-Control-Allow-Headers, Access-Control-Allow-Methods) can also be set via command-line arguments. Refer to the Unleash Edge deployment documentation for details.Access-Control-Allow-Origin headerYou can use the curl command-line tool to inspect the response headers from your Unleash instance and verify the CORS configuration. Replace <host> and <endpoint> with your Unleash server URL and a relevant API endpoint (e.g., the frontend API endpoint).
If a documented Unleash feature isn’t showing up in your Admin UI, check the following:
When you integrate Unleash with an identity provider (IdP) like Okta or Entra ID via SCIM, your IdP becomes the source of truth for user information. This can have an unintended side effect: users, including the one who set up the integration, might lose their admin permissions.
When your IdP syncs a user with Unleash, it sends over the user’s attributes. However, the standard SCIM protocol does not have a field for user roles. If role information isn’t specified, Unleash defaults the user to the Viewer role for security reasons. This means that even if you manually reassign the Admin role to a user in the Unleash UI, the change will be reset during the next SCIM sync.
By creating a group in Unleash and assigning it an admin role, and then configuring your IdP to push that group and its membership via SCIM, you get fully automated permission management:
Unleash Admins.Unleash Admins group in your IdP will automatically gain admin privileges in Unleash.You can create a dedicated admin account that is not managed by SCIM. This account can be used for initial setup or as an emergency backup if you get locked out:
This ensures that the user’s permissions are managed solely within Unleash and will not be affected by SCIM syncs.
If you’ve already enabled SCIM and lost all admin access, and you are self-hosted, you can enable login with user and password by setting the environment variable UNLEASH_ALLOW_PASSWORD_LOGIN=true. If you are on a hosted plan, please contact our support team. We can create a temporary admin user for you while you correct your SCIM configuration.
If you run into an issue when configuring your Network dashboards, verify that you’ve set up the PROMETHEUS_API URL correctly:
Check the PROMETHEUS_API environment variable: Ensure it points to your Prometheus server and not to your Unleash URL. Pointing it back to Unleash (e.g., https://unleash.example.com/internal-backstage/prometheus) is incorrect and will result in an empty dashboard.
Check network connectivity: Confirm that your Unleash instance can reach the Prometheus server URL you provided. You can test this by running a curl command from within the Unleash container or a pod on the same network.