Screen signups, trials, and checkouts before abuse costs you. One API call returns allow, review, or block — with the reasons behind every decision.
One API call · verdicts in under 100 ms · free to start
Portreeve sits between your customer and your product — screening every event inline, returning a verdict in under 100ms, and remembering it in a per-tenant abuse graph.
See the decision, follow the evidence, and act. Explore an example below to see how event history becomes a clear next step.
Every decision has a history you can inspect.
A fresh email does not mean a fresh start. Shared device history connects this trial to earlier activity.
Sent to your review queue
Inspect the evidence and record your decision in one place.
Illustrative data. Your verdicts use your own event history.
Try it with your trafficBan an abuser and they return on a fresh burner email. A lookup API forgets each request, so it falls for it every time. Portreeve keeps your history, so the same device is judged against everything it has done before — no matter how the email changes.
| Seen | Device | Verdict | |
|---|---|---|---|
| 09:14 | [email protected] | dtk_7f2a91 | allow |
| 11:02 | [email protected] | dtk_7f2a91 | review |
| 11:05 | [email protected] | dtk_7f2a91 | review |
| 11:09 | [email protected] | dtk_7f2a91 | block |

One device, four burner emails — the verdict hardens from allow to review to block.
Drop one call into your signup, trial, checkout, or login path. It returns before you commit the action, with the reason codes that produced it.
import { Portreeve } from "portreeve";
const gate = new Portreeve(process.env.PORTREEVE_SECRET_KEY!);
// at signup, before you create the account
const { verdict, reasons } = await gate.verdict({
event_type: "signup",
email: input.email,
ip: req.ip,
device_token: input.device_token,
});
if (verdict === "block") return reject(reasons);A verdict lands in under 100 milliseconds (p99 ≈ 90), fast enough to gate the action itself, not clean up after it.
One clear decision plus the reason codes behind it. No risk score to interpret, no recommended_action to second-guess.
The engine is the same on every plan. Price scales with how many events you screen each month — a higher tier buys a cheaper rate and more memory.
Connect your signup or checkout flow, see the evidence behind each verdict, and give your team one place to resolve the cases that need a closer look.