STIR/SHAKEN attestation posture
STIR/SHAKEN attaches a cryptographic signature to every outbound call, rated at one of three attestation levels — A (full), B (partial), or C (gateway) — and receivers use that level to weigh robocall risk before they render the call. This page is the single concept reference for how your tenant’s attestation posture works: what feeds the level, the two policy levers you declare, the posture snapshot that measures against them, and how to close a gap. The scattered how-to material this page consolidates lives at the voice-channel page, the attestation model concept page, and the downgrade troubleshooting guide; everything here is cross-checked against the public endpoints so you can hunt-and-verify each claim.1. Ownership-first, BYON-upgradeable
The level a call signs at is resolved at dial time from number ownership, before any policy is consulted. The resolver walks a fixed order of ownership:- Owned number → A (full). A caller ID that is an active number your organization owns through Orbit — purchased or ported in and billed to your org — attests A. Ownership is the only path to full attestation.
- Leased pool number → B (partial). A caller ID that is a pool number with an active assignment to your org attests B. The platform can authenticate your org, but pool ownership is not your verified right-to-use.
- Anything else → C (gateway). A verified external caller ID, a hosted or bring-your-own number (BYON) you legitimately control but do not own in Orbit, or an unattributable caller ID attests C — the weakest signal, and the one downstream carriers most often shade as spam.
2. The tenant’s two policy levers
Only workspace owners and admins can write the policy; any authenticated member can read it. Both levers, plus two reporting flags, are one singleton record per organization. Lever one — the outbound target, with its downgrade handling:
Lever two — the inbound verification floor, with the spoof-risk flag:
Both levers behave the same way operationally:
GET /compliance/attestation/policyalways returns 200 with a full policy object — an org that has never set one gets the safe defaults above, so a reader never has to distinguish “unset” from an error.PUT /compliance/attestation/policyis a partial patch: absent fields keep their current value, so{ "target_attestation": "A" }alone never touches your inbound floor. A successful write lands in your audit log; invalid values return422 VALIDATION_ERROR.
stir_shaken_attestation_policy), and each write updates only that key —
a write here never rewrites the whole settings object, so it cannot clobber
a concurrent writer on another settings key. Delegate certificates sit on
their own sibling key (stir_shaken_delegate_certificates) with the same
one-key-per-write discipline.
3. Technical posture snapshot
GET /compliance/attestation/posture is the read-only measurement: it
classifies what your traffic actually attests at against the levers you
declared. It answers two questions in one call.
Originating: who is below the declared target. The snapshot enumerates
every number you originate from — your owned numbers plus your active pool
leases, with the stronger owned attribution winning if a number appears both
ways — and stamps each with the level the resolver applies, owned → A and
leased → B, plus a meets_target verdict against your
target_attestation. A totals row aggregates the same into counts of numbers
meeting target, below target, and the per-level split (A/B/C). The per-number
table is capped at 500 rows (numbers_truncated flags the cap), so a sender
running thousands of DIDs sees the totals first and the specific held-back
identifiers next — not an aggregate with the offender hidden inside it.
Inbound: Identity-header aggregation against the floor. The same payload
carries a 30-day summary of inbound calls that arrived on DIDs your org
owns, classified against your inbound_min_verification floor: signed calls
at or above the floor count as verified; signed-below-floor and off-net
calls count as unverified; failed and unsigned calls count as
spoof_risk when your flag is on, otherwise they fall into unverified.
verified_rate is the verified share of all inbound calls — or null, not
zero, when there was no inbound traffic in the window, so “no calls” never
reads as “0% verified.”
Both halves are scoped to your organization. Originating rows come from your
own numbers and assignments only; the inbound half counts calls that arrived
on a DID currently assigned to your org, and a released DID that is
reassigned to a new owner starts that owner’s inbound history clean — you
never inherit the prior owner’s verification summary.
Reads fail soft: if an underlying lookup is unavailable, the affected half
returns empty or zeros rather than failing the snapshot.
The snapshot is point-in-time — where the posture stands when you read it.
For the trajectory, the two attestation-analytics endpoints roll up the
same org-scoped traffic over 24h to 90d: the outbound A/B/C mix with
per-tier answer-rate lift and downgrade causes
(GET /numbers/attestation-analytics), and the inbound attestation mix
with the spoof-risk breakdown
(GET /numbers/inbound-attestation-analytics).
Step 7 of the posture guide
walks both endpoints, including how to read a lapsed delegate
certificate off the trend.
4. How to build a verified-number set
The posture snapshot names the gap; this is the order of ownership that closes it. Work top-down — the earlier rung is the stronger instrument.- Own the numbers (the only path to A). Purchase or port the DIDs into Orbit so your org owns them outright, then move outbound traffic onto them. Re-read the posture snapshot: those numbers resolve to A and the below-target count closes. Run this certification step for any order of ownership — a port-in, a new purchase, or moving existing traffic — the posture read is how you confirm the level actually moved.
- Upgrade BYON with delegate certificates (C → B). For numbers you control but do not own in Orbit, obtain the delegate certificate chain (PEM) from your service provider per ATIS-1000092, then register it with its coverage list and validity window:
-
Watch the certificate lifecycle. Covered numbers attest B only while
the certificate’s effective status is active — the registry derives
the status live, so
pending(valid-from still ahead),expired(past valid-until), andrevokedeach mean the numbers have already fallen back to their ownership-based level. List the registry (GET /compliance/attestation/delegate-certs), and re-register a renewed chain before the window closes — the flip is when the drop happens, not after. Revocation (DELETE /compliance/attestation/delegate-certs/:id) is immediate and cannot be undone; the record is kept with a revoked-by line for audit. - Set a target your set can reach. If the snapshot persists in showing leased (B) or uncovered BYON (C) numbers against an A target, either cover the numbers (rungs 1–2) or accept a B target until coverage changes:
5. Posture-agreement with the regulatory frame
These controls are yours to run, not Orbit’s to impose. You pick the target, the downgrade handling, the inbound floor, and the certificate coverage. Orbit records the policy, classifies your traffic against it, and derives effective certificate status — it mandates no level, and it guarantees no STIR attestation outcome. That division is deliberate and holds across the platform’s compliance frame: attestation posture is tenant-owned, never a platform screen. The carrier of record signs at exactly the level the platform attests and no higher, so no policy value, gate, or reroute can turn a below-target flag into call handling. Regulatory judgement about which level a given programme must hold — which traffic should run at A, which floors to enforce — stays with you and your counsel, on your audit ledger.Related references
- STIR/SHAKEN on the voice channel — how the A/B/C levels behave across your voice traffic: signing vs. signalling, inbound parsing, and the per-DID inbound floor.
- The STIR/SHAKEN attestation model — the end-to-end model behind caller-ID trust: PASSporT flow, delegated attestation, and where the gate surfaces.
- Attestation downgrade troubleshooting — the root-cause runs when a call signs lower than you expected.
- The compliance attestation endpoints — policy, delegate certificates, and posture — in the Compliance API reference.
- The attestation-analytics endpoints — outbound mix, lift, and downgrade causes; inbound mix and spoof risk — in the Numbers API reference, walked in Step 7 of the posture guide.