The composite pre-send risk verdict
Before you commit an SMS send or a call, you want one answer to “how risky is this destination?” — not four. Orbit’s anti-fraud detectors each answer that question for their own slice (pumping patterns, link reputation, Verify channel fraud, voice anti-spoof), with four different response shapes and four sets of thresholds.POST /risk/score fuses them into one composite
verdict: a 0–100 score, a coarse band, and an advisory recommendation you
read before your send walks the gating chain.
This page is the concept-level map of that model: what each detector
contributes, how the composite is resolved, what the bands mean, and why the
verdict is read-only by design. Field-level request and response shapes live
in the Risk API reference.
What a composite pre-send risk verdict is
A composite risk verdict is one decision artifact per destination. You send the destination you are about to text or call, and optionally the message body and the session scores you already hold; you get back a singlescore (0 = no observed risk, 100 = worst observed risk), a band, a
recommendation, and a per-channel channels breakdown that shows exactly
which detector drove the verdict. Each destination gets its own verdict —
query per send, not per batch.
Four detector channels fold into the verdict:
The always-computed detectors
Two channels require nothing from you beyond the destination and body, and the endpoint runs them on every request:- SMS-pumping score. The artificial-traffic detector aggregates your own send history for the destination — velocity and repetition signals the endpoint reads from your tenant’s traffic — and scores it 0–100. It always produces a channel entry, and its dependencies fail open: if a signal source is unavailable mid-request, that signal degrades to neutral (score 0 contribution) rather than failing your pre-send check.
- URL / link reputation. Pass
message_bodyand every URL in it is reputation-scanned; the channel score is the worst URL in the body, so one bad link in an otherwise clean body still drives the composite. Omitmessage_bodyand the channel is absent — a voice-only caller has no body to scan and loses nothing by keeping it out.
The optional pass-through inputs
The other two detectors need inputs the endpoint must never trigger on your behalf — Verify Fraud Guard runs a paid number-intelligence lookup per send, and Voice Biometrics needs captured caller audio. So the endpoint does not run them for you: you have already run them this session, and you pass their scores in.verify_signal. If you already sent an OTP to this recipient with a Fraud Guard policy, the risk score on thatPOST /verify/sendresponse is the score you fold in. Omit it when no Verify send ran — the verdict stays honest about what the other channels observed, and this channel reportspresent: false.voice_biometrics_signal. If you already ran a Voice Biometrics challenge for this session (enroll or verify), carry the spoof/match score into the composite. Same rule as Verify: omit when no challenge ran.
score: 0 / band: "low".
How the composite is resolved
high means the same thing whether it
came from one channel or from the fused composite.
Score band → advisory action
The
channels array tells you why: each entry reports present, its own
score, and its reason codes — so a critical composite driven by
url_reputation (remove the link and retry) is handled differently from one
driven by sms_pumping (stop sending to that destination).
Why the verdict is read-only and advisory
The Risk endpoint sends nothing, routes nothing, and enforces nothing: you can poll it the entire day and still hold your sends. That is deliberate. Outbound voice and SMS exit exclusively through the Devotel softswitch with the platform’s send-gating chain attached; a score endpoint that could silently refuse or reroute your traffic would be a second, hidden class of gate — one your integration never configured and cannot audit. The verdict is instead an input to your decision: you decide whether the recommendation skips the send, queues it for review, substitutes a Verified-channel OTP, or simply gets logged.Verdict vs. gate: advice before send, enforcement at send
The composite verdict and the send-gating chain are complementary, not overlapping:- The verdict advises, before send. Query it ahead of a dispatch (or a campaign batch) and translate the recommendation into your own policy — skip, review, or proceed. It is a read; the outcome lives in your code.
- The gates enforce, at send time. Wallet posture, opt-out and suppression lists, quiet hours, frequency caps, and throughput caps admit or refuse the actual send — that is where a send is stopped, with a documented error or skipped status.
/risk/score before a high-value send or a
campaign batch, apply your policy to the recommendation, then let the send
walk the gates as it always has. The verdict sharpens what you choose to
send; it never replaces the chain that decides what actually leaves.
See also
- Risk API reference — request fields, response shape, and rate limits
- Send gating and quiet hours — the gate chain a send actually walks
- Verification lifecycle — where the Fraud Guard score you pass in comes from
- Voice biometrics — the anti-spoof challenge behind the biometrics signal
- Fraud reputation: the shared network feed — cross-tenant reputation the detectors draw on