A clearer picture of each payment
Connect device, network and payment context. See the contributing signals alongside the score.
Payment risk, without the guesswork
Add one script. See what you would have declined, what it cost, and why — beside your current PSP. Start in shadow mode. Change nothing until you’re ready.
npm i @riskcogs/js
Illustrative installation · see integration notes
Scroll to explore · Illustrative console screens
Example: shadow mode flags 312 payments with €18,420 in simulated avoided loss. The inspector explains a score of 0.86. Review that evidence before choosing whether to enforce a card-testing rule. These are illustrative figures, not customer results.
Add the browser SDK to your checkout or cashier. Your backend calls the API with a private key; the browser only sees a public one.
import { RiskCogs } from '@riskcogs/js';
const risk = await RiskCogs.init({
endpoint, publicKey
}); Device, IP and network, email, phone, BIN, geo, account history and behavior. A missing signal is marked as missing, not guessed.
degradation: {
degraded: true,
unavailableSignals: ["bin"]
}A score from 0 to 1, a low, medium or high band, and a recommendation: allow, review or block. Your payment backend makes the final call.
risk_score: 0.52
level: "medium"
recommendation: "review"Shadowaction: observe_onlyShadow Observe in shadow
From evidence to confidence
You keep your payment flow. RiskCogs makes the signals visible, so you can choose what happens next.
Interactive illustration · no live decisions
pay_7f2a910.93Card testing · 14 attempts / 2 minpay_8b4c830.88Device shared across accountspay_9d6e120.86BIN country ≠ IP countrypay_a1f8400.12Trusted returning customerAll decisions simulated. Your PSP stays in control.
€89.00 · Visa debit · just now
Score contributions
Would have declined. No action taken.
You decide when a rule is ready.
card.attempts_2m > 10Illustrative avoided loss, not a guarantee.
Your rules. Your thresholds. Your decision.
Different clues become useful when you can see how they fit together. Start by observing, then decide what deserves a response.
Connect device, network and payment context. See the contributing signals alongside the score.
Move from a payment to its matched rules and supporting evidence, without losing the original context.
Device and browser signals help connect repeated activity. Capture replay only with consent.
Observe a rule in shadow mode before choosing whether to enforce it. A score is evidence to review, not a verdict.
One score, with the evidence attached. Inspect the signals behind each payment decision.
€89.00 · Visa debit · just now
Would have declined. No action taken.
Spot card testing and friendly fraud without adding friction to checkout.
Connect bonus abuse, multi-accounting and deposit velocity in one view.
Set per-merchant rules. One integration covers all your sub-merchants.
Catch account takeover and trial abuse before the next billing cycle.
Every rule shows its precision on your own traffic before you turn it on.
Illustrative evaluation · last 7 days| Name | Condition | Mode | Hits 7d | Precision |
|---|---|---|---|---|
| Card testing | card.attempts_2m > 10 | Shadow | 142 | 99.3% |
| Shared device | device.accounts_7d > 6 | Shadow | 96 | 98.0% |
| Country mismatch | bin.country != ip.country | Shadow | 74 | 94.6% |
| Trusted customer | customer.successful > 3 | Enforce | 1,284 | 99.8% |
| Known blocked device | device.id in blocklist | Enforce | 38 | 100.0% |
From install to your first scored payment.
const { sessionId } = await risk.getContext();Use the language already in your stack.
POST /v1/risk-score
X-API-Key: <server key>
Content-Type: application/jsonClose the loop with confirmed outcomes.
{
"sessionId": "demo-session",
"ip": "198.51.100.10",
"eventAt": "2026-10-01T12:00:00Z",
"eventType": "chargeback"
}