Docs menuAll pages, quickstarts and this page’s contents
- Androidsoon
- iOSsoon
- React Nativesoon
- Fluttersoon
Kaidn docs
Kaidn checks a signup, a login or a checkout and tells you whether to let it through, along with the reasons. This page gets you a working call in about five minutes.
What this does
You send one thing that just happened: someone signed up, logged in, tried to check out, asked to withdraw money. You send whatever you already know about it, which might be an email address, an IP, a device, or all three.
Kaidn checks it against everything it knows about those details and sends back one of three answers, with an explanation attached:
| answer | what it means | what people usually do |
|---|---|---|
allow | nothing worth acting on | carry on as normal |
review | worth a human look | hold the reward, queue it, ask for a second factor |
block | act on it | deny the signup, refuse the withdrawal |
You decide what to do with the answer. Kaidn never blocks anyone on your behalf and never talks to your users. It is one HTTP call that returns a judgement, and the rest is your code.
You will not be asked to move your data anywhere. There is nothing to install on your servers, no agent, no database. If you can make an HTTPS request you can use this.
Your first score, in three steps
1. Get a key
Create an account. You get a key immediately, no sales call and no card. The key is shown once, so put it somewhere your server can read it and never put it in a web page.
2. Send one event
event is the only field you have to send, and it is just a name you choose. Everything else is optional: send what you have, and the answer sharpens as you send more.
// npm install @kaidn/sdk import { Kaidn } from "@kaidn/sdk"; const kaidn = new Kaidn({ apiKey: process.env.KAIDN_API_KEY }); const { verdict, reasons, reason_text } = await kaidn.score({ event: "cashout", user_id: "u_8231", ip: req.ip, email: user.email, device_id: fingerprint, // from @kaidn/fp in the browser event_country: offer.country, // optional geo expectation }); if (verdict === "block") return deny(reason_text); if (verdict === "review") await queueForReview(user, reasons); // the SDK covers every endpoint: await kaidn.check.ip("3.5.140.1"); await kaidn.batch.score(rows); // bulk, up to 1000 rows await kaidn.label({ label: "chargeback", event_id });
3. Branch on the answer
Three cases, and the whole integration is usually this small to begin with.
const { verdict, reason_text } = await scoreTheSignup(req); if (verdict === "block") return deny(); if (verdict === "review") return holdForReview(reason_text); return proceed();
That is the integration. Everything else in these docs makes it sharper, and none of it is required to start.
What you get back
The response has a lot in it, and three fields do the work:
| field | use it for |
|---|---|
verdict | Branch on this. allow, review, or block. |
reasons | A list of short, stable names for what was found, like disposable_email. Match on these in code rather than on the number. |
reason_text | The same thing written as a sentence, clear enough to send to the customer who is asking why. |
{
"verdict": "block",
"reasons": ["datacenter_ip", "disposable_email"],
"reason_text": "The IP is a hosting provider address and the email
uses a disposable domain. Risk score 80/100 → block.",
"score": 80,
...
}There is also a score from 0 to 100. It is bookkeeping rather than a probability, so branch on the verdict and the reasons, and treat the number as a dial you can move rather than a fact about the user.
Everything else in the response is evidence: which checks fired, what each one counted for, and the raw numbers behind them. You can ignore all of it on day one and go back to it the first time you disagree with an answer. Every field is listed in the reference.
Where to go next
If you only read one more page, read core concepts. It is six ideas, and it is what makes the rest of the reference obvious instead of dense.
What it costs
The free tier is 10,000 scored events a month, forever, with no card. You are billed per decision, so collecting device information costs nothing extra and the free checkers and dashboard do not count against your allowance. Prices are on the pricing page, where you would expect them to be.
Something missing, or something here that did not make sense? support@kaidn.io. Documentation that assumed knowledge you did not have is a bug, and worth reporting like one.