generated: '2026-07-21' method: derived source: graphql/unlonely-schema.json (GraphQL introspection saved verbatim from github.com/bguan2020/unlonely-alpha server) notes: 'Entity-relationship graph derived mechanically from the Unlonely GraphQL introspection: every object-type field whose unwrapped type is another object type becomes a relationship (LIST wrapper = has_many, else has_one). The hosted API is defunct; this documents the historical surface.' entities: - entity: Asset fields: 6 - entity: AssetStatus fields: 4 - entity: AssetTask fields: 1 - entity: BaseLeaderboard fields: 3 - entity: Channel fields: 32 - entity: ChannelContract1155Mapping fields: 2 - entity: ChannelUserRole fields: 6 - entity: Chat fields: 6 - entity: ChatCommand fields: 2 - entity: ClipNFCOutput fields: 14 - entity: ClipOutput fields: 3 - entity: CreatorToken fields: 8 - entity: DeviceToken fields: 7 - entity: GamblableEventLeaderboard fields: 5 - entity: GamblableInteraction fields: 8 - entity: GetDoesUserAddressMatchResponse fields: 3 - entity: Like fields: 5 - entity: LivepeerClipDataResponse fields: 4 - entity: LivepeerStreamData fields: 4 - entity: LivepeerStreamSessionsData fields: 4 - entity: LivepeerViewershipMetrics fields: 4 - entity: NFC fields: 18 - entity: NumberOfHolders fields: 2 - entity: Package fields: 4 - entity: PackageCooldownMapping fields: 2 - entity: Poap fields: 7 - entity: RequestUploadResponse fields: 4 - entity: Room fields: 5 - entity: SharesEvent fields: 10 - entity: StreamInteraction fields: 8 - entity: Subscription fields: 8 - entity: Task fields: 12 - entity: TempToken fields: 22 - entity: TempTokenWithBalance fields: 18 - entity: UniqueContract1155AddressesResponse fields: 2 - entity: UpdateManyResponse fields: 1 - entity: UpdateUserResponse fields: 4 - entity: User fields: 25 - entity: UserCreatorToken fields: 5 - entity: VibesTransaction fields: 14 - entity: Video fields: 16 relationships: - from: Asset to: AssetStatus kind: has_one via: status - from: BaseLeaderboard to: User kind: has_one via: owner - from: Channel to: User kind: has_one via: owner - from: Channel to: CreatorToken kind: has_one via: token - from: Channel to: ChatCommand kind: has_many via: chatCommands - from: Channel to: SharesEvent kind: has_many via: sharesEvent - from: Channel to: ChannelUserRole kind: has_many via: roles - from: Channel to: NFC kind: has_many via: nfcs - from: Channel to: Channel kind: has_one via: channel - from: Chat to: User kind: has_one via: owner - from: Chat to: Channel kind: has_one via: channel - from: ClipNFCOutput to: User kind: has_one via: owner - from: CreatorToken to: Channel kind: has_one via: channel - from: CreatorToken to: UserCreatorToken kind: has_many via: users - from: GamblableEventLeaderboard to: User kind: has_one via: user - from: GamblableInteraction to: Channel kind: has_one via: channel - from: GamblableInteraction to: User kind: has_one via: user - from: GetDoesUserAddressMatchResponse to: User kind: has_one via: user - from: GetDoesUserAddressMatchResponse to: User kind: has_one via: contextUser - from: Like to: User kind: has_one via: liker - from: Like to: NFC kind: has_one via: nFC - from: NFC to: User kind: has_one via: owner - from: NFC to: Channel kind: has_one via: channel - from: NumberOfHolders to: Channel kind: has_one via: channel - from: Poap to: User kind: has_one via: owner - from: RequestUploadResponse to: AssetTask kind: has_one via: task - from: RequestUploadResponse to: Asset kind: has_one via: asset - from: StreamInteraction to: User kind: has_one via: owner - from: StreamInteraction to: Channel kind: has_one via: channel - from: Task to: User kind: has_one via: owner - from: TempToken to: Channel kind: has_one via: channel - from: UpdateUserResponse to: User kind: has_one via: newUserData - from: User to: Channel kind: has_many via: channel - from: UserCreatorToken to: User kind: has_one via: user - from: UserCreatorToken to: CreatorToken kind: has_one via: token - from: Video to: User kind: has_one via: owner