Appearance
Entities
TV1ExtContext
| Field | Type | Description |
|---|---|---|
model | TV1ExtModel | undefined | Broadcaster for the current room. |
user | TV1ExtUser | undefined | Current user running the extension (viewer, model, or studio context). |
slug | string | Unique identifier for the extension. |
TV1ExtViewers
| Field | Type | Description |
|---|---|---|
guests | number | Number of guest (unauthenticated) viewers. |
withTokens | number | Number of viewers who hold tokens. |
total | number | Total number of viewers in the room. |
TV1ExtModel
| Field | Type | Description |
|---|---|---|
id | number | Model user ID. |
username | string | Model username. |
name | string | Model display name. Empty string for models with no display name. |
avatarUrlThumb | string | URL of model avatar thumbnail. |
gender | TV1Genders | Performer composition in the room. |
status | TV1ModelStatus | Current show status. |
isPrivateEnabled | boolean | Whether Private show is enabled. |
isSpyEnabled | boolean | Whether spy feature is enabled for the Private show. When enabled, users can spy on an already started Private show at a lower cost. |
isExclusivePrivateEnabled | boolean | Whether Exclusive Private show is enabled. |
isNonNude | boolean | Whether the model account is configured as non-nude (also known as Flirting Mode). |
TV1ExtUser
Discriminated union on isGuest: TV1ExtGuestUser | TV1ExtLoggedInUser.
TV1ExtGuestUser
Guest user (not logged in).
| Field | Type | Description |
|---|---|---|
isGuest | true | User is a guest (not logged in). |
guestHash | string | Unique identifier for a guest user. |
TV1ExtLoggedInUser
Logged-in user.
| Field | Type | Description |
|---|---|---|
fanClub | TV1UsersFanClub | User's fan club data. Contains information regarding user's subscription to the model's fan club. |
hasPaidBefore | boolean | User previously purchased tokens. |
hasTokens | boolean | User has tokens. |
hasUltimateSubscription | boolean | User currently has Ultimate membership. |
id | number | User ID. |
isGuest | false | User is logged in. |
isKing | boolean | User is the highest tipper in the room over past 12 hours. |
isKnight | boolean | User is a knight of the model. |
isModel | boolean | User has a model account. This can be true for another model visiting the stream. To check whether the current user is the broadcaster, compare context.user.id and context.model.id. |
status | TV1UserStatus | Current show/session state for this user. |
username | string | User username. |
userRanking | TV1UserRanking | undefined | User activity ranking data when available. |
TV1UserRanking
User activity ranking system.
TV1UserRanking fields:
league: League representation of the user's activity level. Could begrey,bronze,silver,gold,diamond,royalorlegend.level: Activity level from 1 to 100.
League values are ordered from lowest to highest activity rank:
grey: new or low-activity users (level 1–9).bronze: early active users (level 10–19).silver: regularly active users (level 20–34).gold: highly active users (level 35–54).diamond: very highly active users (level 55–79).royal: elite activity users (level 80–99).legend: top activity users (level 100).
TV1UsersFanClub
Discriminated union on isSubscribed: TV1UsersFanClubSubscribed | TV1UsersFanClubNotSubscribed.
TV1UsersFanClubSubscribed
| Field | Type | Description |
|---|---|---|
isSubscribed | true | Whether user is subscribed to the model's fan club or not. |
tier | 'soldier' | 'lord' | 'prince' | The tier of the fan club subscription. Could be soldier, lord or prince. The higher the tier, the more benefits the user gets. |
TV1UsersFanClubNotSubscribed
| Field | Type | Description |
|---|---|---|
isSubscribed | false | Whether user is subscribed to the model's fan club or not. |
TV1PaymentData
| Field | Type | Description |
|---|---|---|
amount | string | The amount of tokens spent. |
paymentToken | string | Payment token used for authentication. |
transactionId | string | Transaction identifier. |
userId | string | User's ID. |
TV1ModelStatus
Show status values for the model:
public: public broadcast.private: private show.exclusivePrivate: exclusive private show.groupShow: group show.ticketShow: ticket show.idle: in between private/public shows.off: offline.
TV1UserStatus
Show/session status values for the user:
public: public broadcast context.private: private show context.exclusivePrivate: exclusive private show context.groupShow: group show context.ticketShow: ticket show context.spy: spying on a private show.off: offline.
TV1Genders
Performer composition in the room:
| Value | Description |
|---|---|
male | Male performer. |
female | Female performer. |
group | Group of performers. |
tranny | Transgender performer. |
TMovableOverlayStatus
Status of the movable overlay.
| Value | Description |
|---|---|
active | Pulsing green. |
inactive | Orange. |
connecting | Green. |
error | Red. |
TV1TipData
| Field | Type | Description |
|---|---|---|
amount | number | Amount of tokens spent. |
id | string | Tip id. |
isAnonymous | boolean | Is anonymous tip or not. |
isFromTheCurrentUser | boolean | Is tip sent from the current user or not. |
isOriginalSource | boolean | Is tip sent from the current extension or not. |
message | string | undefined | Message that was sent with the tip. Empty string if no message was sent. |
source | TV1TipSource | Source of the tip. |
type | 'private' | 'public' | Determins whether tip was sent in public or private chat. |
user | TV1ExtUser | null | undefined | User who sent the tip. Can be null in case of anonymous tip. |
TV1TipMenu
Tip menu data.
| Field | Type | Description |
|---|---|---|
isEnabled | boolean | Whether tip menu is enabled or not. If it's disabled, the items array will be empty. |
items | TV1TipMenuItem[] | The list of tip menu items sorted by the model. |
TV1TipMenuItem
Tip menu item defined by the model.
| Field | Type | Description |
|---|---|---|
activity | string | Activity name. |
price | number | Price of the activity for the current user applying all discounts. Discounts can be applied based on the user's fan club membership. |
TV1TipSource
Source of a tip. Possible values:
| Value | Description |
|---|---|
console | Tip was sent using / command. |
tipMenu | Tip was sent using tip menu. |
goal | Tip was sent via goal button. |
epicGoal | Tip was sent to epic goal. |
fullscreen | Tip was sent from the fullscreen view. |
interactiveToy | Tip was sent from the interactive toy. |
publicChat | Tip was sent using public chat, either in public or group show. |
privateChat | Tip was sent from the private chat, in any type of show. |
extension | Tip was sent from one of the extensions. |
sendTipButton | Tip was sent using send tip button. |
feed | Tip was sent from the feed. |
TV1TopWindow
Sliding time horizon for v1.storage.top.get. Determines how far back increments are summed.
| Value | Description |
|---|---|
TOP_UNSPECIFIED | Unspecified top window value. |
TOP_1D | Last 24 hours. |
TOP_7D | Last 7 days. |
TOP_30D | Last 30 days. |
TV1TopIncrementWindowStat
Per-window statistics for a user after calling v1.storage.top.increment.
| Field | Type | Description |
|---|---|---|
value | string | User's summed total within this window after the increment. |
window | TV1TopWindow | Sliding time horizon (1d, 7d, or 30d). |
IV1IntIncrementFailureReason
Failure reason values returned by v1.storage.int.increment when success is false.
| Value | Description |
|---|---|
INT_INCREMENT_FAILURE_REASON_UNSPECIFIED | Unspecified failure reason. |
INT_INCREMENT_FAILURE_REASON_NONE | No failure reason reported. |
INT_INCREMENT_FAILURE_REASON_VALIDATION_DENIED | Increment was rejected by server-side validation. |
TV1TopUserEntry
One ranked user in a top counter window.
| Field | Type | Description |
|---|---|---|
meta | string | An optional string saved for this increment from that user's latest event. |
total | string | Sum of increment amounts within the sliding window for this user. |
userId | string | User ID recorded as incrementer. |
TV1SessionOther
Session exists, but it belongs to a different extension.
| Field | Type | Description |
|---|---|---|
owner | 'other' | The session exists but belongs to a different extension |
TV1SessionSelf
Session exists and belongs to the current extension.
| Field | Type | Description |
|---|---|---|
meta | { sessionId: string; ttlSec: number; } | |
owner | 'self' | The session exists and belongs to this extension |
TV1Session
Discriminated union on owner: TV1SessionSelf | TV1SessionOther.
In runtime API payloads this value can also be null when no session exists.
TV1SessionUpdate
| Field | Type | Description |
|---|---|---|
action | TV1SessionActionType | |
session | TV1Session | null | |
userId | number |
TV1SessionActionType
Session lifecycle action emitted/used by session-related flows.
| Value | Description |
|---|---|
join | Join-related session update. |
finish | Session was explicitly finished. |
TV1SessionWhisperData
Record<string, unknown>