STIR/SHAKEN attestation
STIR/SHAKEN is the caller-ID authentication framework the FCC mandates for US voice traffic. Every outbound call you place through Orbit is assigned an attestation level (A, B, or C), and every inbound PSTN call arriving at your numbers carries an attestation result you can read and enforce policy against. This page explains what the levels mean, where signing happens, and which levers you control.What the attestation levels mean
The attestation level (ATIS-1000074) states two things: whether the originating provider authenticated the customer, and whether it verified that customer’s right to use the calling number.
Downstream carriers treat these very differently. A- and B-attested calls are
eligible for “caller verified” treatment; C-attested calls are the ones
carriers routinely label “Spam Likely.” Field data across the industry shows
answer rates on A-attested traffic run dramatically higher than on C-attested
traffic — attestation level is the single biggest caller-identity lever you
have.
A delegate certificate raises a number you don’t own on Orbit from C to
B only — never to A. Orbit does not cryptographically validate the
certificate chain or bind coverage to its real TNAuthList, so number
authorization is not provider-verified. Full (A) attestation stays reserved
for numbers owned through Orbit. This ceiling is deliberate: treating a
self-registered artifact as A would let anyone spoof full attestation for
arbitrary numbers.
Signing vs. signalling: who does what
Orbit never signs a PASSporT itself. The split of responsibility is:- Orbit computes the level. On every outbound call — API-initiated calls, dialer campaigns, transfers, conference dial-out, verification calls — Orbit resolves the caller ID against your ownership and lease records and any delegate certificates you registered, producing A, B, or C.
- Orbit signals the level. The resolved level travels on the outbound
INVITE as the custom
X-Devotel-Attest: <A|B|C>SIP header. - Devotel’s wholesale softswitch signs. Every outbound leg terminates on the carrier-of-record softswitch Devotel operates. It holds the STIR/SHAKEN signing certificate, reads the signalled level, and cryptographically signs the PASSporT at that level — it will never sign higher than what the platform attests.
Reading attestation on inbound calls
Inbound PSTN calls arrive with attestation signalling from the upstream carrier, and Orbit parses it on the routing path. Two forms are recognized:- Pre-verified results (the common case). Devotel’s softswitch verifies
the PASSporT signature upstream and forwards the result as an RFC 8588
Verstat/P-Attestation-Indicatorvalue (TN-Validation-Passed-A/B/C,TN-Validation-Failed,No-TN-Validation). This is the state for roughly all PSTN inbound traffic. - Raw
Identityheader. When no pre-verified result is present, Orbit decodes the PASSporT payload and surfaces the claimed attestation level — flagged as not yet verified.
You can also set a minimum attestation policy per DID that rejects inbound
calls below a floor — for example, accept only A and B, or accept any signed
call. With no policy set (the default), every call is admitted. Rejected
calls receive a SIP 603 Decline.
Tenant attestation policy
Beyond the per-DID inbound floor, Orbit keeps an org-level attestation policy: a declared target level for your outbound traffic plus the inbound verification floor your fraud posture is measured against. Three endpoints cover it:The policy fields
A write is a patch:
PUT with { "target_attestation": "A" } alone leaves
your downgrade handling and inbound floor untouched. Invalid values return
422 VALIDATION_ERROR, and every successful write lands in your audit log.
What the policy does — and does not do
The policy is reporting and intent, not a gate. Setting a target level declares the posture you operate under and drives how posture and analytics classify your traffic. It does not raise what gets signed, reroute a call, or block one at dial time. Every outbound call still exits the Devotel wholesale softswitch, which signs at exactly the level Orbit attests — it cannot and will not sign higher than the attested level. If you set targetA while your
traffic runs on leased pool numbers (B), nothing about call handling changes;
your posture snapshot simply starts reporting those numbers as below target
until ownership catches up.
Reading the posture snapshot
GET /compliance/attestation/posture answers two questions at once: which of
your originating numbers meet your target, and how inbound verification looks
against your floor.
originating.numbers[]lists each of your originating numbers with the level calls from it actually attest at:owned(a number your org owns through Orbit) → A,leased(an active pool assignment) → B. A number you hold neither way is never listed.meets_targetcompares that applied level against yourtarget_attestation, andoriginating.summaryaggregates the same intomeeting_target/below_targetcounts. The list caps at 500 numbers (numbers_truncatedtells you when you hit the cap).inbound.summaryclassifies the inbound calls that arrived on your DIDs over the trailing 30-day window: signed calls at or above yourinbound_min_verificationfloor count asverified; signed-but-below-floor and off-net (unknown) calls count asunverified;failedand unsigned (none) calls count asspoof_riskwhenflag_unverified_inboundis on, otherwise they fall intounverified.verified_rateis the verified share of all inbound calls, ornull(not zero) when there was no inbound traffic in the window — so you can tell “no calls” apart from “0% verified.”
Raising from B to A is an ownership play, not a PUT
If your posture shows leased pool numbers stuck at B against an A target, the fix is number ownership, not policy change:- Purchase or port the numbers into Orbit so your org owns them outright.
- Move your outbound traffic onto the owned DIDs.
- Re-read the posture snapshot — those numbers now resolve to A and
meeting_targetcloses the gap.
PUT /attestation/policy can only restate your target and floors; no policy
value raises the level a number signs at.
What you control
Attestation posture is your setting, not Orbit’s. The controls you own:- Number ownership (highest-leverage). Owning a number through Orbit is the only path to A attestation. If your answer rates matter, run your traffic from owned DIDs rather than pool or external caller IDs.
- Delegate certificates. If you legitimately control numbers you don’t own on Orbit — verified external caller IDs, hosted or bring-your-own numbers — register the ATIS-1000092 delegate certificate you obtained from your service provider. Active certificates raise those numbers from C to B. Revoke a certificate and its numbers fall back to their ownership-based level immediately.
- Attestation policy. Set your org’s target attestation level, how below-target downgrades are handled in reporting (monitor or alert), the inbound verification floor treated as verified, and whether unsigned inbound calls are flagged as spoof-risk.
- Branded calling (Rich Call Data). On A-attested calls, registered US carriers can render your verified brand name, logo, and reason-for-call on the recipient’s handset (ATIS-1000095). Orbit passes your brand assets to the softswitch, which matches them against your per-carrier registration. Carriers without RCD support fall back to plain attestation plus CNAM.
- CNAM pairing. Register the calling name carriers display alongside your number. CNAM and attestation work together: attestation proves the number, CNAM names it.
Limits to be aware of
- On-net vs. downstream. Devotel signs every outbound call on-net, at the level Orbit signals. What downstream carriers do with that signature — displaying “caller verified”, rendering RCD, or applying their own spam analytics — is outside Orbit’s control and varies by carrier and handset.
- A is ownership-only. No configuration raises a non-owned number to A. Delegate certificates cap at B by design.
- RCD is carrier-dependent. Branded calling renders only on carriers where your brand registration is complete; elsewhere the call still carries full attestation, just without the rich display.
- Inbound raw Identity is unverified. When only a raw Identity header is present, the level is the caller’s claim, not a cryptographically verified result — the pre-verified Verstat path covers the overwhelming majority of PSTN inbound.
- Certificates are not chain-validated. Registering a delegate certificate stores the authorization artifact you provisioned out-of-band; Orbit checks its status and validity window, not its cryptographic chain.
Responding to ITG traceback requests
Signing your outbound traffic with STIR/SHAKEN attestation carries one downstream obligation: when one of your originating numbers is implicated in a robocall complaint, the Industry Traceback Group (ITG) — operated by USTelecom under the FCC’s TRACED Act framework — sends the originator a traceback request. The request asks you to identify the upstream source of the implicated traffic and file a disposition, typically within one business day. Not responding is itself a compliance red flag: repeat silence escalates toward FCC enforcement and carrier de-peering. Orbit records the full lifecycle of each traceback request as a case on your organization — intake, acknowledgement, disposition, deadline verdict — so the evidence trail lives where your compliance team works. Log a request the moment the ITG reaches you; the deadline clock starts at intake.received → acknowledged → responded → closed. Attempting a transition a
case has already passed — responding to a closed case, acknowledging a
responded one — returns 409 TRACEBACK_INVALID_TRANSITION.
How the SLA verdict is computed
Every case carries a live deadline verdict, recomputed on each read, not cached. The deadline isreceived_at + sla_hours; the window defaults to
24 hours (the ITG’s customary one-business-day window) and you can
override it per case up to 720 hours when a request states a different
deadline. The verdict is one of:
The case payload returns the verdict alongside
due_at,
hours_remaining, and a breached flag. In audit terms a breach means:
every intake, acknowledgement, and response is written to your audit log,
and a breached case sits there as documented evidence you missed the ITG
window — the record regulators and carriers ask for first when a complaint
escalates.
Your posture, Orbit’s ledger
Responding to a traceback is your decision and your filing. Orbit’s role is the ledger: it records the request, your acknowledgement, and your disposition with timestamps, and it computes the deadline verdict. Filing a response never places a call, sends a message, or reconfigures a carrier — it updates the case record, nothing more. Regulatory compliance for your traffic — including responding to the ITG in substance — remains your responsibility; Orbit gives you the record to do it on.Cases are stored on your organization’s settings under
itg_traceback_cases, each persisted as its own entry — logging a new
request or updating one case never rewrites or blocks the others, so
parallel intake from several complaints at once is safe.Deep dives
- Voice channel overview — carrier-of-record architecture
- CNAM & caller ID — register and dispatch calling names
- Voice data residency & retention — where attested call data lives
- Attestation API — delegate certificates, attestation policy, and posture snapshots under Compliance endpoints
- ITG traceback workflow — the traceback case endpoints above, plus the full schema in the Compliance endpoints reference