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:
- the account has a per-account override set to
true, or - 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 |
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 |
Example¶
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.