Skip to content

Experiments

TEBHOS rolls out optional client features with feature flags. A flag has an instance-wide default, and TEBHOS staff can switch it on or off for individual accounts. The routes on this page let a client read which flags are active for the signed-in account.

Every flag is advice for the client: a client that ignores a flag behaves as if it were off.

Not supported on TEBHOS

Server-assigned experiments with rollout configuration (such as noise-suppression or screen-share delivery assignments) are not implemented. The experiments field of instance discovery (GET /.well-known/tebhos) is always an empty object {}.

Flag resolution

For each account a flag is active when:

  1. the account has a per-account override set to true, or
  2. the account has no override and the flag is enabled globally.

An override set to false switches the flag off for that account even when it is enabled globally. Unknown flag names are simply inactive.

Flag names use lowercase letters, digits and underscores. Flags currently defined by TEBHOS include:

Name Description
message_scheduling Scheduled messages
expression_packs Expression packs
voice_filters Voice filters
custom_themes_advanced Advanced custom themes

Instance staff can create further flags; treat the list as open.

List my active flags

GET /feature-flags/me

Returns the names of every flag active for the caller. User-only: a bot token is rejected with 403 ACCESS_DENIED.

Response

Field Type Description
flags array[string] The names of the active flags
{
  "flags": ["message_scheduling", "expression_packs"]
}

Check one flag

GET /feature-flags/me/{flag_name}

Returns whether one flag is active for the caller. The answer is cached for 30 seconds per account and flag, so a change by staff can take up to 30 seconds to appear.

Response

Field Type Description
flag string The flag name from the path
enabled boolean Whether the flag is active for the caller
{
  "flag": "voice_filters",
  "enabled": false
}

Example

curl "https://tebhos.com/api/v1/feature-flags/me/voice_filters" \
  -H "Authorization: Bearer $TOKEN"

Polling

There is no change notification for flags. A client reads List my active flags once per session; re-reading it occasionally (for example when the app returns to the foreground) is enough to pick up changes.