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. |
| isInvisible | boolean | User is invisible. Do not expose any data of invisible users. |
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).
TV1FanClubTier
Fan club subscription tier. Ordered from lowest to highest:
| Value | Description |
|---|---|
soldier | First tier with basic benefits. |
lord | Second tier with more benefits than soldier. |
prince | Third tier with the most benefits. |
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 | TV1FanClubTier | The tier of the fan club subscription. Could be soldier, lord or prince. Higher tiers provide more benefits. |
TV1UsersFanClubNotSubscribed
| Field | Type | Description |
|---|---|---|
isSubscribed | false | Whether user is subscribed to the model's fan club or not. |
TV1PaymentHash
Payment hash used for authentication. Do not store or reuse it. Use it only once for the request it authorizes.
Type: string
TV1ShowStatus
| Value | Description |
|---|---|
ticketShow | Ticket show. |
groupShow | Group show. |
off | Model is not on the site. |
private | Private show. |
exclusivePrivate | Exclusive private show. |
public | Public show. |
idle | Model is idle but on the site. |
spy | In spy mode. |
TV1ModelStatus
Status that indicates which type of show model is producing now.
Equivalent to TV1ShowStatus, excluding spy.
TV1UserStatus
Status that indicates which type of show user is watching now.
Equivalent to TV1ShowStatus, excluding idle.
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 | Green. |
connecting | Orange. |
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' | Message visibility: public — visible to everyone in the room; private — visible only to the model. |
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>
TV1GoalData
Regular goal data emitted when a goal is completed or returned from v1.goal.get.
| Field | Type | Description |
|---|---|---|
description | string | Goal description set by the model. |
isCompleted | boolean | Whether the goal is fully completed. |
tokensTarget | number | Target amount of tokens required to complete the goal. |
tokensCollected | number | Amount of tokens already collected. |