You show a code
A QR code or a link, tied to one signup attempt. That tie is what makes the token useless in anyone else’s login.
Each account is bound to a physical device. Report one as a bot and the device is blocked everywhere it is bound, including at platforms that never spotted it. The platforms stay anonymous to each other, while Debind users stay anonymous to the network itself.
No account with us, no third party in the loop. It costs your user one free app, once. Every platform after yours is a single scan.
A QR code or a link, tied to one signup attempt. That tie is what makes the token useless in anyone else’s login.
Debind makes a key in the phone’s secure hardware and has the manufacturer attest it. Your user confirms at the lock screen; the app posts the token to your callback itself.
Redeem it once and the handle is yours. Store it next to the account and re-check it on every login, at no extra cost.
Nothing on our side records that two bindings sit on the same phone, which is why the phone has to carry the finding itself. The next platform learns that one handle is marked and gets no story with it: not who said so, not what happened, not where else that device is bound.
If a bot is detected, the report goes from one binding to the device, and from the device to all the others.
Nothing goes with it. No evidence, no case file, no name; there is nowhere to put one.
Every platform holding that device finds its own handle marked, in its own system. No value passes between them.
The mark lives on the device maker’s servers rather than in the app, so a reinstall never touches it. A first one can be lifted once, a second never.
Both binding calls come back with an Ed25519 signature that the SDK checks before your code sees the result, so a compromised connection cannot tell your server a comfortable lie.
No user records with us means nothing of yours to lose if we are ever breached. You keep the handle next to the account; we keep a key that is meaningless without it. Two things live on your side because we must not hold them: the route the app posts the token to, and your own table of binding events.
Get a keyimport { createDebind } from "@debind/sdk" const debind = createDebind({ baseUrl: "https://api.debind.app", apiKey: process.env.DEBIND_KEY, history: myHistoryTable, }) // Once, when the app has posted the token to your callback. const { binding } = await debind.claim(userId, token, session) await db.users.update(userId, { handle: binding.handle }) // On every login. Three answers, three different reactions. const { binding: seen } = await debind.verify(userId, handle) if (seen.botMarked) await account.review(userId) else if (!seen.valid) await account.requireRelink(userId) // live = signed inside your window. A phone in a drawer looks like this too. else if (!seen.live) await account.stepUp(userId) // Someone caught this phone — another service, or you. const stop = debind.onEvent( (e) => account.suspendByHandle(e.handle), { cursor: myEventCursor }, )
The SDK comes with the key.
If yours isn’t here, write to us.
The app never asks for a name, an email or a number, and there is no account to create. What leaves the phone is a key its own hardware made, a signature from the company that built it, and the store country of the download. You get back one opaque value and a handful of timestamps. Every platform holds a different value for the same phone, so two of you comparing notes would find nothing in common, and neither can we: no table on our side groups the bindings that share a device.
Every account now has a phone behind it, and that hurdle alone works for every member from the start. On top of it, one report ends the device on every platform it reached, and on every platform it was going to. That lowers the cost for everyone and makes the product better for their users, and it compounds: two reports exclude a device from the network for good, and the more members there are, the sooner those two arrive.
Here a caught bot costs a phone, not a fresh signup. The report lands on the device: the first kills that binding and marks the phone, the second retires it from the network for good, and no factory reset brings it back. One account on that phone or fifty, same bill. Every platform’s own bot detection now works for all of them, so a hit anywhere ends the phone everywhere. The more places a bot works, the sooner one of them catches it. Bot operations live on scale, and the more they scale, the faster the hardware burns.