Tickets API

Bounded handoff-session capability handles

const ticket = await rtc.tickets.issue('invite-42', {
  identity: 'session',
  maxPeers: 2,
});
await ticket.close();

Ticket contains id, token, invite, peers, channels, diagnostics, closed, watchInvite(), issuerNode(), and close(). invite is present only for a mesh ticket issued with mesh: true or joined from an invitation.

close() retires this local handle and its refresh owner. The opaque token field is bound to the issuing install key and expires with its capability. It is credential material, not a transferable invitation: do not log, display, or send it to another installation.

The root API has no tickets.accept() or server-side ticket.revoke(). Direct ticket participants activate the same application-owned, high-entropy ID and explicitly select the discovered peer. Mesh guests instead call tickets.join(invite). See Tickets for the direct flow and Ticket mesh for the transferable flow.

Tickets are bounded handoff avenues, not room topology controls. They do not accept room architecture or the deprecated advancedFanout option. Join a room when a group needs adaptive fan-out.

maxPeers counts all members, including the issuer. Set mesh: true to issue the shareable invitation described on Ticket mesh.