Fraud detection · decisioning · operations
Every check earns its place. Policy has the last word.
FRAPE scores payments, sign-ups, logins, profile changes and payouts through a fixed sequence of gates. Rules and cached data settle most events cheaply; paid enrichment and the Decision Core run only when they could change the outcome; a deterministic policy makes every final call.
Built for
- Payment service providers
- Marketplaces
- Fintech & lending
- Digital goods & gaming
- Subscription businesses
Platform
Score, understand, operate — in one tenant-isolated platform.
Score
Understand
Operate
Coverage
One API for every risky moment in an account’s life.
POST /v1/score, scored against the same identity and the same policy.- 01
Sign-up
signup
Catch throwaway and repeat identities before they get an account: alias reuse, device history and list hits.
Use case - 02
Login
login
Spot takeover attempts from new devices, unusual networks and bursts of attempts across accounts.
Use case - 03
Profile change
account_update
Treat changes to email, phone or payout details as the high-risk moments they are, with step-up when needed.
Use case - 04
Payment
payment
Score a purchase by card fingerprint, BIN, device and velocity — never by card number, which is refused.
Use case - 05
Payout
payout
Hold money movement that does not fit the identity’s history before it leaves the platform.
Use case
Design principles
Four things FRAPE will not trade away.
01
Cost-aware by construction
Terminal rules and cached data handle what they can first. Paid enrichment and the Decision Core run only when the answer could still change.
02
Explainable to the line
Each decision records the rules that matched, whether the Decision Core was consulted and why not, and the policy version that decided.
03
Private by default
Card numbers are refused at the door. Contact data is stored as keyed hashes. The Decision Core sees a minimised, whitelisted state only.
04
Degrades, never fails open
If the cache, a provider or the Decision Core is unavailable, scoring continues and missing data is never read as safe. Failure never auto-approves.
How it works
Cheap checks first. Expensive ones only when they matter.
- Validate request — POST /v1/score · schema · no card numbers
- Pre-rules #1 — terminal hard rulesterminal hit → decide now
- Cache & local data — cache → local reference dataall local → zero provider calls
- External providers — missing capabilities only · paralleltimeout + circuit breaker each
- Features + pre-rules #2 — velocity · identity · signals
- Decision Core (advisory) — only when rules can’t settle itskipped or unavailable → policy
- Policy engine — deterministic · owns the decision
- Decision — APPROVE · CHALLENGE · REVIEW · DECLINE
Terminal rules stop known-bad traffic
No provider call, no Decision Core call, a decision in the same request.
Cached and local data before the network
A request served entirely locally makes zero external calls.
Decision Core only for the unclear middle
Skipped when rules are confident, disabled, over budget or unavailable.
Solutions
Shaped to the risks of your business.
Payments & PSPs
Score card-not-present payments for many merchants from one platform, with each merchant kept in its own tenant and its own policy.
Typical risks
- Card testing bursts
- Stolen-card purchases
- Merchant-specific risk appetite
Signals FRAPE uses
- Card-fingerprint velocity
- BIN country against IP country
- Device reuse across accounts
Events scored
- payment
- account_update
Developers
One call. A decision you can explain.
- Synchronous JSON over HTTPS with an API key, idempotency keys and problem+json errors.
- Every response carries reason codes, matched rules and the policy version that decided.
- Cards travel as fingerprint, BIN and last four. Card numbers are rejected with a 400.
curl https://api.frape.io/v1/score \
-H "Authorization: Bearer $FRAPE_API_KEY" \
-H "Idempotency-Key: order_81723" \
-d '{ "type": "payment", "external_id": "order_81723", ... }'
→ { "decision": "CHALLENGE", "score": 58,
"reasons": ["new_device_for_account"],
"model_called": true, "policy_version": "pol_2026_09_28_3" }Economics
What it costs to run, published in the open.
Engineering cost estimate
$0.59
per 1k transactions · 10M transactions / month · base case
Model 2026.10.0, as of 2026-10-01. Not commercial pricing.
Infrastructure, Decision Core and provider costs are modelled separately, with every input labelled as a published price, a list-price estimate or an engineering assumption. Change the volume and the mix in the calculator and see what moves.
Security & privacy
Collect less. Isolate everything.
No card numbers, ever
Tenant isolation in depth
A minimised Decision Core
Design partners
Help shape what FRAPE decides next.
We are working with a small number of teams who score payments, sign-ups, logins or payouts and want decisions they can explain line by line. Bring your rules and your edge cases.