Skip to content
Fluxer API

Experiments

An experiment is an instance-wide rollout that decides whether an account gets a feature. One request returns every experiment for the caller, along with how often to poll for changes. Ignore experiments you don’t know and treat a missing one as off.

FieldTypeDescription
poll_interval_secondsintegerSeconds to wait before the next poll (60-86400)
poll_jitter_percentintegerThe largest random offset to the wait, as a percentage of it (0-50)
assignmentsassignment map objectOne entry per experiment
FieldTypeDescription
plutonium_page?Plutonium page assignment objectThe caller’s Plutonium page assignment
channel_threads?channel threads assignment objectThe caller’s channel threads assignment
voice_p2p?peer-to-peer voice assignment objectThe caller’s peer-to-peer voice assignment
guild_visits?guild visits assignment objectThe caller’s guild visits assignment
FieldTypeDescription
enabledbooleanAlways true

Threads, forum channels and media channels also need the channel_threads client capability.

FieldTypeDescription
activebooleanAlways true
config_versionintegerThe instance’s threads configuration version, the same for every account
FieldTypeDescription
enabledbooleanWhether the caller can start a peer-to-peer voice call
max_participantsintegerThe most participants a peer-to-peer call allows (2-4)

The instance admin sets the rollout in the peer-to-peer voice configuration. If it lists rollout countries, the sampled share of accounts only includes requests from those countries, based on the request’s IP address, so the same account can get a different answer on another network. A join to a peer-to-peer call that already has max_participants people is refused as full.

FieldTypeDescription
enabledbooleanWhether the caller can visit a guild before joining it

The instance admin sets the rollout in the guild visits configuration.

GET/v1/experimentsBot

Returns an experiment assignments object for the caller.

FieldTypeDescription
If-None-Match?stringThe ETag from your last response

Experiment assignments object.

StatusBodyCondition
200response bodyThe assignments were returned
304emptyIf-None-Match matched the current ETag

The rate limit is 60 requests per 10 seconds, on the default bucket.

FieldTypeDescription
ETagstringA tag for the response body, sent on 200 and 304

Call this route when a session starts and again every poll_interval_seconds, with a random offset of up to poll_jitter_percent either way. Send the last ETag in If-None-Match, and keep your current assignments when you get a 304. Until you get a 200, use 300 seconds with 15 percent jitter.