Docs/Sessions

Sessions

Create a live-view session, send the customer an invite, and poll its status. Timestamps are ISO-8601 UTC (…Z).

Two ways to authenticate
Creating a session and checking its status accept either a dashboard JWT or a team API key. Listing sessions, getting a session, and minting an agent token are dashboard-only (JWT).

Create a session

POST/sessions

Creates a session and its invitation, then dispatches the invite link over the chosen channel. Pass teamId with a dashboard JWT; an API key implies its own team.

FieldDescription
teamIdThe team's UUID. Required when authenticating with a dashboard JWT; inferred automatically from an API key.
channelHow the invite is delivered: sms, email, or link (nothing is sent — you distribute the URL yourself).
recipientPhoneThe customer's phone number in E.164 format (e.g. +15555550123). Required when channel is sms.
recipientEmailThe customer's email address. Required when channel is email — the message includes the link plus an inline QR code.
noteAn optional internal label, up to 500 characters (e.g. a ticket number), shown alongside the session in the dashboard.
ttlMinutesHow long the invite stays valid, in minutes (11440). Defaults to 30.
smsConsentRequired when channel is sms: must be true to confirm the recipient agreed to receive a text from seeitlive.io. Carrier fees may apply.
metadataOptional custom key/value pairs (a flat map of strings, e.g. your own external agent id or ticket reference). Stored opaquely and returned on reads. Up to 30 keys; keys up to 64 characters, values up to 500.
curl -X POST https://api.seeitlive.io/v1/sessions \
  -H "Authorization: Bearer sil_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{ "channel": "sms", "recipientPhone": "+15555550123", "smsConsent": true, "note": "Ticket #4821" }'
json
{
  "id": "f74f1305-2222-4a11-8b1e-1234567890ab",
  "status": "pending",
  "inviteCode": "aZ3kQ9",
  "inviteUrl": "https://seeitlive.io/u/aZ3kQ9#3n9F1Qk7xY2zR8vB5tW6uL0mC4pD1sA...",
  "agentViewUrl": "https://seeitlive.io/a/pL2mN8#7dR2Xa4Wq9Kj6bV3nF1yT8sH5cE0uZ...",
  "expiresAt": "2026-07-07T09:42:00.000Z"
}
Shown once
inviteUrl and agentViewUrl carry the plaintext session tokens in their URL fragment. They're returned only on creation — store them immediately.

Session status

GET/sessions/:id/status

Poll this to know when the customer is on camera.

status moves through pendingringingliveended as the customer joins and leaves, or short-circuits to expired (the invite was never opened) or cancelled.

json
{
  "id": "f74f1305-2222-4a11-8b1e-1234567890ab",
  "status": "live",
  "startedAt": "2026-07-07T09:14:03.000Z",
  "endedAt": null,
  "producerCount": 1,
  "hasVideo": true
}

Resolve an invite (public)

GET/u/:code

The public endpoint the guest page calls to resolve an invite code into its session and brand — no token or key required. Joining the stream is authenticated separately, with the token embedded in the invite URL's fragment.

json
{
  "sessionId": "f74f1305-2222-4a11-8b1e-1234567890ab",
  "brand": {
    "name": "Acme Support",
    "brandLogoUrl": null,
    "brandColor": "#1a2b3c"
  },
  "status": "pending"
}
Rate limited
Limited to 20 requests per minute per IP, since it's unauthenticated and reachable from anywhere.
Sessions