This phone's pairing events (public SSE)
Server-Sent Events, authenticated by the link itself. Each event: event frame's data is { type, occurredAt, pairing } where pairing is the whole PublicPairing after the change — replace the page's state with it. Types: pairing.started, pairing.challenge (a new code), pairing.status, pairing.paired, pairing.ended. id is the stream position for Last-Event-ID. A ping every 5s. Same gates as POST …/pairing.
token*stringthe opaque token from the link
16 <= length <= 4096since?stringresume after this stream id (also honored as the Last-Event-ID header); absent = only what happens from now
^\d+-\d+$text/event-stream
curl -X GET 'http://localhost:3000/consent-requests/stringstringstri/events'Answer WhatsApp's number check (public) POST
When `challenge.kind` is `passkey_confirm`: does the number WhatsApp shows match? `false` ends the pairing (`failure: passkey_refused`) — a mismatch means another device is being linked.
Alerts GET
The account's alerts, newest opened first, by `seat` (a person), `status`, `kind`, `severity` and `since` (opened at or after). `counts` are per status under the same filters, the status aside. Never the excerpt (P2). Any live member.
