replying to @dtinth
Both good.
Brute force: make the code 12 chars (60 bits) plus a per-IP rate limit and a 2 min TTL. Only a few codes are live at once, so a guess almost never hits.
Backend URL: make the pairing string a link, https://<backend>/pair#<code>. The client takes the origin as the…