One API call at signup, trial, and checkout returns an allow, review, or block verdict in under 100 ms, before it costs you a cent. Not a lookup: the gate remembers what it has already seen.
Card on file, charged only for what you use. First cohort onboarding now.
One event, three frames — stone / dissolution / boundary
We'll man the gate.
{
"verdict": "block",
"reasons": ["disposable_email"],
"latency_ms": 88
}
# fires on every signup, trial, or checkout event
curl https://api.portreeve.dev/v1/verdict \
-H "Authorization: Bearer sk_live_…" \
-d '{
"event_type": "trial_start",
"email": "jm482@tempmailo.net",
"ip": "185.220.101.47",
"device_token": "dtk_9c41d2",
"external_user_id": "usr_31007"
}'
{
"id": "evt_01J8Z3KQ9V",
"verdict": "block",
"reasons": [
{ "code": "disposable_email" },
{ "code": "velocity_cluster_trials",
"detail": { "cluster_trials_30d": 13, "threshold": 3 } }
],
"policy_version": "2026-08-12.1"
}
Clean traffic passes untouched. Your good users never see a CAPTCHA or an extra step.
Gray cases land in a queue you clear with one keystroke each, or auto-resolve on your rules.
Abuse ends at the request. Nothing is provisioned and no charge is attempted, so there is nothing to clean up afterwards.
SDK for Node · Python and Go on the roadmap · webhooks for async flows · sandbox keys on signup
A lookup answers one request and forgets it. The gate keeps a ledger, and the ledger is what the next request is judged against.
identity_cluster with the accounts already linked, and velocity_cluster_trials because this cluster has opened trials before. Same call, same shape, still under 100 ms.same device · new email · trial account no. 4
a lookup sees a brand new customer
A bot finds your checkout and runs thousands of stolen cards through it overnight. You wake up to dispute fees, a spiking decline rate, and a warning email from Stripe. Portreeve kills the burst at the first request.
✕ BLOCKEDThe same person, on their 14th disposable email, burning your compute and your AI credits on a trial they will never convert. The device fingerprint gives them away on account two.
✕ BLOCKEDBot-registered accounts that poison your metrics, fill your database, and get your transactional email domain flagged for spam. Verdicts at signup keep them out of your funnel entirely.
✕ BLOCKEDOne user opens six workspaces and pays for zero seats: coupon stacking, referral farming, dodged per-seat limits. Linked identity across email, device, and payment method surfaces the cluster.
✕ BLOCKEDCard-testers don't check your headcount before they find your checkout. The burst lands between support tickets and deploys, and the dispute fees land on your Stripe account.
the loss · card-testing fees on StripeFake signups don't just sit in the database. They poison activation rates, wreck cohort math, and turn every launch decision into a guess. Verdicts at signup keep the funnel human.
the loss · fake signups poisoning metricsEvery farmed trial burns real inference. One person on their fourteenth burner email is a trial farm spending your AI credits with no intention of ever paying.
the loss · trial farms burning AI creditsDevice and network signals are hashed before they're stored; we keep the fingerprint's shadow. Raw identifiers never sit in our database.
Your users' data exists to judge your traffic and for no other purpose. It is never sold, shared, or pooled into ad tech; the subscription pays the bills.
p99 measured at about 90 ms, fast enough to sit inline at signup and checkout without your users ever feeling the gate. If we're degraded, we fail open and say so in the response, so your funnel never hangs on us.
Rules ship tuned, with false-positive discipline: a wrongly blocked customer costs you more than a wrongly allowed bot, and the defaults are weighted accordingly. Growing teams have better things to do than tune a rules engine; the defaults do that work.
Agent traffic doesn't arrive with a browser and an inbox. It arrives with a wallet. Portreeve treats a payer wallet like any other identity key: email, IP, device, wallet, one more column in the same ledger, judged by the same graph.
The API is designed for x402: when machine payments reach your endpoints, verdicts drop into the SDK's lifecycle hooks. Judge on onProtectedRequest, settle only through onBeforeSettle. There is no parallel fraud stack to run for a second kind of customer.
The abuse ledger nobody else keeps:
this agent's 14th trial account.
// an agent paying per-call is a checkout attempt — same contract
pay402.onProtectedRequest(async (req) => {
const v = await portreeve.verdict({
event_type: "checkout_attempt",
ip: req.ip,
identity: { wallet: req.payer } // one more identity key
});
if (v.verdict === "block") return req.deny(v.id);
});
pay402.onBeforeSettle(assertVerdicted); // no verdict, no settlement
Export your recent payment events, drop the CSV in, and see card-testing bursts, BIN clusters, and probe patterns flagged in seconds, before your processor flags them for you.
portreeve.com/scan · free, launching on this domainPaste any address or domain and check it against the live blocklist Portreeve uses in production: thousands of burner domains, updated continuously.
portreeve.com/check · free, launching on this domainBoth tools launch free on this domain. No signup required, and no verdict on you.
The engine does not change between plans. A free account gets the same verdicts and the same review queue as the largest one. What the price buys is how far back the gate can remember.
early access is free while it lasts · the plans below are what launch looks like
$0 /mo
$19 /mo
$79 /mo
$249 /mo
An event type and the identifiers you already have: email, IP, a device token, your user id. Card numbers and passwords never touch us; for payments we take the processor's card_fingerprint rather than the card itself.
The gray cases land in a queue you clear with one keystroke each, or auto-resolve on rules you set once. Most traffic never sees one; review exists so a household on a VPN is never treated like a bot.
One endpoint, called at signup, trial, or checkout. Most builders ship their first verdict in under an hour with the Node SDK, and sandbox keys come with signup. Python and Go SDKs are on the roadmap.
Yes. Call Portreeve before you create the customer or checkout session. A block verdict means no charge is ever attempted, so card-testers never reach Stripe and your dispute rate stays yours.
Early access is rolling out to the first cohort now. One API call; verdicts you can act on.
free tier at 1,000 events a month · paid plans from $19