Decode a SIP Identity header
and read the attestation
Paste the Identity: header from an INVITE. Get the PASSporT claims in plain
terms — attestation level and what it means, orig and dest, how old the token is, who signed it —
plus the RFC 8224 and 8588 structural checks a verifier runs before it looks at the signature.
The structural checks a verifier runs first
Before any cryptography, a verification service rejects tokens that fail these. Most 438s in the field are one of them, not a bad signature.
| Check | What a failure means |
|---|---|
alg = ES256 | SHAKEN PASSporTs are signed with ECDSA P-256. Anything else is rejected outright. |
typ / ppt | typ must be passport; ppt=shaken selects the SHAKEN extension and must appear both in the JWS header and as a header parameter. |
x5u and info= | The certificate URL in the JWS header and the info parameter must match and be fetchable; otherwise the verifier returns 436 Bad Identity-Info. |
attest | Must be A, B or C. The level drives downstream analytics and the verstat value the called party sees. |
iat age | Verifiers reject tokens older than their freshness window, typically 60 s. Clock skew on the signing SBC or long trunk queueing produces 438 with nothing else wrong. |
orig / dest | Both must be present and must match the calling and called numbers the verifier derives from P-Asserted-Identity/From and the Request-URI; a rewritten number after signing breaks the token. |
origid | Required by SHAKEN for traceback. Missing origid is a sign of a non-compliant signing service. |
Three questions this answers
Each has a guide for the full picture.
STIR/SHAKEN Identity header questions
What the token contains, what the levels mean, and what this tool does not do.
What is in a SIP Identity header?
alg ES256, typ passport, ppt shaken, x5u pointing at the signing certificate), a payload (attest A/B/C, orig and dest telephone numbers, iat timestamp, origid), and an ES256 signature, followed by the info, alg and ppt header parameters. The originating service provider signs it; the terminating provider verifies it and may add a verstat parameter for the called party.What do attestation levels A, B and C mean?
Does this tool verify the signature?
iat age, orig and dest presence, certificate URL consistency. Signature verification requires fetching the x5u certificate, validating it against the STI-CA trust list and checking the signed digest, which is the terminating provider’s verification service’s job. A verifier returns 438 Invalid Identity Header on a bad signature, 436 Bad Identity-Info when the certificate URL cannot be fetched, and 437 Unsupported Credential when the certificate is not trusted.Why would a call get 438 Invalid Identity Header?
iat is older than the verifier’s freshness window (typically 60 seconds, so clock skew or long queueing breaks it), orig or dest in the token does not match the From/P-Asserted-Identity or Request-URI numbers, the signature does not match, or the token was modified by an intermediary. Decoding the header shows which claim is wrong before you open a ticket with the originating carrier.Is the Identity header I paste stored?
The token is one header. The call is the trace.
Whether the 438 came from the token, a rewritten number mid-path, or a verifier that never saw the header at all is in the full INVITE and its responses. The analyzer reads all of it.