Portreeve

Stop trial abuse
and AI-driven
credit farming.

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

It remembers
what it judged.

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.

Your customerEvery signup, login, and checkout they fire.
Portreeve — the gateScreens each event inline · allow / review / block in <100ms.
signup
trial_start
trial_convert
checkout_attempt
login
The abuse graphEvery identity it has already judged.
Your productRegistration, purchase — reached only by the cleared.

When you're under attack,
know what to do next.

See the decision, follow the evidence, and act. Explore an example below to see how event history becomes a clear next step.

Decision workspace
Example workspace

Recent activity

Select an event ↓

Every decision has a history you can inspect.

Decision evidencereview

One device. More than one trial.

A fresh email does not mean a fresh start. Shared device history connects this trial to earlier activity.

  • Repeated trials on linked identities
  • Multiple accounts share this device

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 traffic

Blocked once,
back in five minutes.

Ban 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.

SeenEmailDeviceVerdict
09:14[email protected]dtk_7f2a91allow
11:02[email protected]dtk_7f2a91review
11:05[email protected]dtk_7f2a91review
11:09[email protected]dtk_7f2a91block
The gate — streams of traffic approach a portcullis; most pass through, one is held for review, one is stopped

One device, four burner emails — the verdict hardens from allow to review to block.

One request.
One verdict.

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.

server.ts
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);
<100ms

Inline, before you commit

A verdict lands in under 100 milliseconds (p99 ≈ 90), fast enough to gate the action itself, not clean up after it.

3

Allow, review, or block

One clear decision plus the reason codes behind it. No risk score to interpret, no recommended_action to second-guess.

Pricing.

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.

Free$0/mo1k events/mo · 7 days of memory
Indie$19/mo10k events/mo · 90 days of memory
Growth$79/mo50k events/mo · 12 months of memory
Scale$249/mo250k events/mo · unlimited memory
Every plan bills for volume — overage kicks in past your included events, even on Free.Memory prunes at your depth, so upgrades apply forward, never back.See the full ladder →

Put a portreeve
at your gate.

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.

Start free with GoogleFree tier · no card to start · screening in minutes