ForHosting KIT · Developer Utilities

Calculate a deterministic feature rollout percentage bucket

A percentage rollout is useful only when the same user receives the same decision on every request.

● BetaFree · in your browser
Use it from WebAPIEmailTelegramApp soon

This calculator hashes a stable user, account, device, or tenant identifier into one of 10,000 deterministic buckets, then compares that bucket with your rollout percentage. It returns the unsigned hash, the readable percentage bucket, and the final inclusion decision. No random value, clock, network request, or stored assignment influences the result, so identical inputs always produce identical output.

Choose an identifier that represents the rollout subject

Start with an identifier that is stable, unique at the level where the feature should be assigned, and available everywhere the decision is made. A user ID is appropriate for a personal interface experiment, while an account or tenant ID is usually better when every member of an organization must see the same behavior. Device identifiers can work for anonymous experiences, but clearing local storage may change the assignment. The calculator treats the identifier as exact text: capitalization, whitespace, punctuation, and Unicode characters all contribute to the hash. Therefore, normalize identifiers before calling the capability if different systems might serialize them differently. For example, decide whether email-like identifiers are lowercased, whether numeric IDs are padded, and whether a namespace such as production or staging belongs in the value. Do not use mutable profile data such as a display name. Once you select a convention, keep it consistent, because changing the identifier changes the bucket even though the underlying person or account has not changed.

Understand the deterministic bucket calculation

The capability encodes the identifier as UTF-8 and applies the 32-bit FNV-1a hash algorithm. The unsigned hash is reduced to one of 10,000 basis-point buckets, displayed as a number from 0 through 99.99. A subject is included when its bucket is strictly lower than the requested rollout percentage multiplied by 100. This boundary rule guarantees the useful endpoints: zero percent includes nobody and one hundred percent includes everybody. It also permits changes in increments of 0.01 percentage points. Because the process has no random seed, time dependency, storage, or network access, the same identifier and percentage always return the same answer. Increasing the percentage preserves all previously included subjects and adds identifiers from the next bucket range; decreasing it removes subjects from the upper end. The hash is suitable for operational rollout assignment, not cryptographic security. Do not treat the returned value as secret, use it to conceal identifiers, or depend on it for authorization decisions.

Use the result safely in a release workflow

Use the included boolean as one input to feature delivery, alongside explicit eligibility rules, environment checks, and emergency overrides. A typical service first excludes unsupported plans or regions, then calculates the percentage assignment for the remaining audience. Store the rollout configuration, not a separate random assignment for every user, because the deterministic calculation recreates the decision whenever needed. Before increasing exposure, compare monitoring and business metrics for eligible cohorts and prepare a fast global disable path. If multiple independent features use the same identifier alone, their bucket ordering will be correlated; add a stable feature key to the identifier, such as feature-name followed by a separator and the user ID, when each rollout needs an independent audience. Keep that feature key unchanged for the life of the rollout. The endpoint rejects percentages below zero or above one hundred instead of silently clipping them, which helps configuration mistakes fail visibly. Calls are priced at $0.002; the browser version uses the same pure calculation for local checks.

Stage a production release

Expose a new feature to a stable fraction of eligible users, then increase the percentage without reshuffling users already included.

Keep tenant experiences consistent

Hash an account or tenant identifier so every member of the same organization receives the same rollout decision.

Audit rollout configuration

Recalculate a reported user's bucket to explain whether a percentage threshold should have included that user.

Will the same identifier always receive the same result?

Yes. Identical identifier text and rollout percentage produce identical output because the algorithm uses no randomness, date, network, or stored state.

What happens at zero and one hundred percent?

Zero percent includes no identifiers, while one hundred percent includes every valid identifier.

Can I increase a rollout without reshuffling existing users?

Yes. Raising the threshold retains every previously included bucket and adds buckets from the newly opened range.

Is the hash cryptographically secure?

No. FNV-1a is a fast deterministic distribution hash. It must not be used for passwords, authorization, secrecy, or anonymization.

How should I make separate feature rollouts independent?

Prefix or suffix the stable subject identifier with a stable feature key and separator, then keep that combined identifier convention unchanged.

What does an API call cost?

Each request costs $0.002. The browser calculator performs the same deterministic calculation locally.

Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.

POSThttps://api.kit.forhosting.com/dev/feature-toggle-rollout-percent

Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.

curl -X POST https://api.kit.forhosting.com/dev/feature-toggle-rollout-percent \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"identifier":"user_48291","rollout_percentage":25}'
{
  "identifier": "user_48291",
  "rollout_percentage": 25
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "dev.feature_toggle_rollout_percent",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.

Per request$0.002

Published price — no tokens, no invented credits. A failed task is never charged.

HTTPCodeMeaning
401unauthorizedMissing or invalid API key.
402insufficient_balanceYour balance doesn't cover the task price.
404unknown_typeThat task type doesn't exist.
429rate_limitedToo many requests. Use the webhook instead of polling.

Read the full KIT documentation →