Fraud Review Triage — Run the Response Loop
The Fraud Shield reference covers the payloads, categories, severities, and thresholds. This page is the operational side: how to work a single fraud alert end to end, using the four endpoints that make up the triage lifecycle — the list, the single-alert read, acknowledge, and dismiss. All endpoints below are rooted athttps://api.orbit.devotel.io/api/v1/compliance/fraud-reviews. Reads
are open to any authenticated member of your organization; writes are
restricted to owners and admins.
The daily triage loop
- Find it.
GET /compliance/fraud-reviewswith the filters you want —status=open, a severity floor, acategory, or afrom/towindow ondetected_at. The list sorts critical-first, newest-first, and each row carries anactionableflag from your thresholds, so the rows you must look at today surface on page one. - Open it.
GET /compliance/fraud-reviews/:idfor the full row. The id is safe to share with an on-call roster — whoever follows it needs a valid credential, and an id outside your organization returns 404, never someone else’s data. - Acknowledge it.
POST /compliance/fraud-reviews/:id/acknowledgemoves the alert fromopentotriaged. That marks “a human is on this” and stops two teammates from independently investigating the same alert. The call is idempotent on an already-triaged row. - Resolve it. Dismiss with
POST /compliance/fraud-reviews/:id/dismisswhen you close it as a false positive or an accepted risk. If follow-ups belong in your own tooling, stamp the ticket id there — your audit log already records who dismissed the alert, when, and which category it was.
An alert set to
escalated is locked for you: Orbit’s operators own
resolution of irsf_blocked, suspicious_campaign_send, or
voice_deepfake_high_score rows they escalate. You get a 409 back
instead of a silent no-op.Status transitions — the valid moves
The ledger recognizes four statuses, and only these moves are legal:
Anything outside that table returns
409 with a message naming the
blocked transition. That strictness is on purpose: a scripted playbook
that hits 409 can stop instead of writing nonsense to the ledger.
Thresholds drive the loop, not the other way around
GET and PUT /compliance/fraud-reviews/settings carry two fields —
notify_min_severity and muted_categories. They decide which subset
of open rows is actionable: true in your list, which shapes every
step of the loop above.
Set them once, not once per incident: a noisy category like
api_key_geo_anomaly either stays muted forever or needs a tuning
decision, which is exactly what the threshold control encodes. The
contract is
documented on Fraud Shield — thresholds
adjust the view, never the
account.fraud.alert webhook or the in-app notification, and
critical alerts stay actionable regardless of your floor.
When a dispute needs evidence
Triage answers “who is looking at this.” A carrier chargeback dispute answers “prove the block happened.” For that, exportGET /compliance/fraud-reviews/chargeback-evidence.csv over the
disputed window: one row per eligible block, the column set a carrier
can parse, and the export itself written to your audit log. Use it at
the resolve step when the alert you are closing is the kind of traffic
a vendor billed you for — SMS pumping / AIT over messaging, Wangiri /
toll-fraud over voice.
If your org runs a standing incident-response playbook (in PagerDuty,
Opsgenie, or an internal wiki), wire these endpoints in as playbook
steps: the triage loop runs daily, and the CSV export runs only during
a live dispute. Both paths hit the same underlying ledger, so the
evidence pack reflects the triage decisions you made on the queue.
Roles and scopes
- Reads (
GETon the list, one alert, the thresholds, or the CSV) are open to any authenticated member of your organization — on-call members can investigate without an admin. - Writes (acknowledge, dismiss, threshold changes) require the owner or admin role. The ledger records the internal operator id server-side; it is never returned to your side of the API.
- Every endpoint is scoped to your organization. An id from another organization returns 404 on reads and on both triage writes, so a mistyped id or a leaked id leaks nothing.
Where this page sits
- Fraud Shield — the alerts themselves: categories, severities, statuses, the threshold settings, and the chargeback evidence contract.
- Fraud caps — the pre-send guard: velocity and daily-spend limits that make the alerts above rarer, and the per-country clamp for expensive destinations.
- Voice destination auto-blocks — the automatic, self-expiring per-destination voice blocks that land in the same triage queue. A block you acknowledge here is a block that page documents.