Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
x-logo:
url: https://raw.githubusercontent.com/neustar/tcs-apis/main/docs/newNeustarLogo.jpeg
altText: STIR/SHAKEN Authentication & Verification Service APIs
version: 1.0.0
title: STIR/SHAKEN Authentication Verification Service API
summary: null
description: "# Overview\n Secure Telephone Identity Revisited (STIR) and the Signature-based Handling of Asserted information using toKENs (SHAKEN) framework have already become regulatory mandates in both the United States and Canada for caller identity authentication. These IETF and ATIS standards define how to securely compute, transit and verify SIP Identity headers through an Authentication Service (AS) and Verification Service (VS).\n\n Since their initial implementation, STIR and SHAKEN standards have been (and continue to be) extended in multiple ways. Additionally, the AS and VS can support supplemental features including, but not limited to telephone number ownership validation, subscriber-based policy management and robocall analytics.\n \n The AS and VS implement call authentication and related functions ideally through flexible, extensible, robust and standardized Application Program Interfaces (APIs). Many initial implementations of the SHAKEN framework employ RESTful API clients, but these are constrained to only supporting base functionality. The STIR/SHAKEN API project promotes collaboration to expand functionality, while hopefully also achieving industry alignment amongst various RESTful API implementations and/or applicable standards, where possible.\n\n There are generally two ways to authenticate a RESTful API client - 'apiKey' or 'coming from a whitelisted client IP'. Both are initially supported in the STIR/SHAKEN API project. If a RESTful API client chooses to use 'apiKey' for authentication, an 'apiKey' query parameter, with a pre-provisioned value, is validated to access API calls that are restricted. If the 'apiKey' parameter is not specified, a pre-provisioned client IP address may be used as the backup authentication mechanism. The server first checks for availability of an 'apiKey' in the query parameter and if it doesn't find one, it tries to authenticate via the client IP address.\n\n The primary objective of the STIR/SHAKEN API project is to foster broad and open industry collaboration amongst developers and implementers of (or those desiring to implement) RESTful APIs for timely and extensible support of evolving caller identity authentication standards, including supplemental feature support as required. The core set of ATIS SHAKEN standards supported in this project, including their underlying and/or referenced IETF and 3GPP standards, are:\n * ATIS-1000074, “SHAKEN”\n * ATIS-1000078, “National Security / Emergency Preparedness Priority Service SIP RPH Signing and Verification using PASSporTs”\n * ATIS-1000080, “SHAKEN: Governance Model and Certificate Management”\n * ATIS-1000084, “Operational and Management Considerations for SHAKEN STI Certification Authorities and Policy Administrators”\n * ATIS-1000085, “SHAKEN: SHAKEN Support of “div” PASSporT”\n * ATIS-1000092, “SHAKEN: Delegate Certificates\n * ATIS-1000093, “Toll-Free Numbers in the SHAKEN Framework”\n * ATIS-1000094, “SHAKEN: Calling Name and Rich Call Data Handling Procedures”\n * ATIS-1000098, “SIP Resource-Priority Header and Priority Header Signing in Support of Emergency Calling”\n\nLooking forward to your support, feedback and contributions.\n"
servers:
- url: https://{hostname}:{port}/{optionalRoutingPath}
description: https
tags:
- name: Verification Service
description: "Currently, a RESTful API client is required to provide an 'apiKey' query parameter with a pre-provisioned value to access API calls that are restricted. If the 'apiKey' parameter is not specified, the client IP address may be used as the backup authentication mechanism if pre-provisioned.\n\nThree different API entry points are defined for SIP Identity header verification:\n * Accepts requests in JSON format and produces responses in JSON format\n * Accepts text messages and produces responses in JSON format\n * Accepts text messages and produces responses in SIP format\n"
paths:
/verify/v2/identityj-j:
post:
tags:
- Verification Service
description: 'This API entry point accepts requests and produces responses in JSON Format.
'
summary: Request & Response in JSON Format
operationId: verify/identityj-j
parameters:
- in: query
name: apiKey
schema:
type: string
description: Required, if client chooses to authenticate via apiKey. Not required, if client chooses to authenticate via pre-provisioned client IP
- name: status
in: query
description: Only applicable for SIP INVITE message. The verification status requirement
required: false
style: form
schema:
type: string
- name: origcc
in: query
description: Only applicable for SIP INVITE message. Default country codes for the originator telephone number
required: false
style: form
schema:
type: string
- name: destcc
in: query
required: false
description: Only applicable for SIP INVITE message. Default country code for the destination telephone number
schema:
type: string
- name: cnam
in: query
description: Only applicable for SIP INVITE message. Flag for performing CNAM lookup
required: false
style: form
schema:
type: boolean
- name: robocall
in: query
description: Only applicable for SIP INVITE message. Flag for returning Robocall Call Insight data
required: false
style: form
schema:
type: boolean
- name: cnamPrefix
in: query
description: Only applicable for SIP INVITE message. Prefix applied to to CNAM data field, indicating if SIP Identity header is verified or not
required: false
style: form
schema:
type: string
- name: verstat
in: query
description: Only applicable for SIP INVITE message. Verstat value as defined in ETSI TS 124 299, for performing tagging and SIP Identity headers optionally removed
required: false
style: form
schema:
type: string
- name: identity
in: query
description: Only applicable for SIP INVITE message. Boolean flag for including SIP Identity header when the "verstat" parameter is specified, with the default value as "true"
required: false
style: form
schema:
type: string
requestBody:
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/VerifyIdentity'
text/plain:
examples:
request:
value: 'INVITE sip:+15715550001@proxy.example.com;transport=UDP SIP/2.0
v: SIP/2.0/UDP proxy.example.com:39089;branch=z9hG4bK-d8754za
Max-Forwards: 70
m: "alice" <sip:alice@proxy.example.com:39089;transport=UDP>
f: "alice" <sip:+15715550000@example.com>;tag=1f4e4f40
t: "bob" <sip:+15715550001@example.com>
Date: Fri, 16 Apr 2021 02:56:54 GMT
i: YzRlZDFlYzYyM2IwOTdlMzk0MDA3MTRmZmY3OGIzODM.
y: eyJhbGciOiJFUzI1NiIsInBwdCI6InNoYWtlbiIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cDovL2NhLmV4YW1wbGUuY29tL3Rlc3QuZGVyIn0.eyJhdHRlc3QiOiJBIiwiZGVzdCI6eyJ0biI6WyIxNTcxNTU1MDAwMSJdfSwiaWF0IjoxNjE4NTQxODE0LCJta3kiOlt7ImFsZyI6IlNIQS0xIiwiZGlnIjoiNEFBREI5QjEzRjgyMTgzQjU0MDIxMkRGM0U1RDQ5NkIxOUU1N0NBQiJ9LHsiYWxnIjoiU0hBLTI1NiIsImRpZyI6IjM2M0JBRTEyOTU5NUY1OTcyREY3RTA4NEZFQ0RGMUJDQUQ3QTcwNjRGN0U3NEY3RUE2MDIwNjBFMzc1NENGRjcifV0sIm9yaWciOnsidG4iOiIxNzAzNTU1MDAwMSJ9LCJvcmlnaWQiOiIxMjM0NTYtQUJDRC05OTk5OTkifQ.yd8hFUIVEbXiZI4NTbLeepUkuEpkKAo_DQZmc2BivqJxGAnbZO2j4iljprTrka-3jLOj6ZSXo-y91879cUYZ-A;info=<http://ca.example.com/test.der>;alg=ES256;ppt="shaken"
P-Asserted-Identity: "Alice" <tel:+17035550001>
P-Asserted-Identity: "Alice" <sip:+17035550001@example.com>
CSeq: 2 INVITE
c: application/sdp
User-Agent: Z 3.3.25608 r25552
k: replaces, norefersub, extended-refer, timer
Allow-Events: presence, kpml
l: 439
v=0
o=Z 0 0 IN IP4 10.31.32.251
s=Z
c=IN IP4 10.31.32.251
t=0 0
m=audio 8000 RTP/AVP 8 0 3 110 98 101
a=fingerprint:SHA-1 4A:AD:B9:B1:3F:82:18:3B:54:02:12:DF:3E:5D:49:6B:19:E5:7C:AB
a=fingerprint:SHA-256 36:3B:AE:12:95:95:F5:97:2D:F7:E0:84:FE:CD:F1:BC:AD:7A:70:64:F7:E7:4F:7E:A6:02:06:0E:37:54:CF:F7
a=rtpmap:110 speex/8000
a=rtpmap:98 iLBC/8000
a=fmtp:98 mode=20
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=sendrecv
'
required: true
required: true
x-code-samples:
- lang: curl
label: STIR
source: "Request: \ncurl 'https://{hostname}:{port}/{optionalRoutingPath}/verify/v2/identity?apiKey=10679965b0504406a3f02cc4' -i -X POST \\\n -H 'Content-Type: application/json' \\\n -H 'Accept: application/json' \\\n -d '{\n \"from\" : \"\\\"Alice\\\" <sip:+17035550001@example.com>\",\n \"to\" : \"\\\"Bob\\\" <sip:+15715550000@example.com>\",\n \"identity\" : [ \"eyJhbGciOiJFUzI1NiIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cHM6Ly9jci11YXQuY2NpZC5uZXVzdGFyLmJpei9jY2lkL2F1dGhuL3YyL2NlcnRzLzExNDc1LjEwMDAxIn0.eyJkZXN0Ijp7InRuIjpbIjE1NzE1NTUwMDAwIl19LCJpYXQiOjE2MzQyNDIwMTcsIm9yaWciOnsidG4iOiIxNzAzNTU1MDAwMSJ9fQ.q2JsLmI-ApIqPpPVnsoQNrD4tpdFv5lLD-80PrJ6WB8YDVF_70CEUetBjxI8-4-5gH91Hu3xLkDqmTeNUUatIw;info=<https://cr-uat.ccid.neustar.biz/ccid/authn/v2/certs/11475.10001>;alg=ES256\" ]\n }'\n\nResponse: \n{\n \"status\" : \"ok\"\n}\n"
- lang: curl
label: SHAKEN
source: "Request: \ncurl 'https://{hostname}:{port}/{optionalRoutingPath}/verify/v2/identity?apiKey=10679965b0504406a3f02cc4' -i -X POST \\\n -H 'Content-Type: application/json' \\\n -H 'Accept: application/json' \\\n -d '{\n \"from\" : \"\\\"Alice\\\" <sip:+17035550001@example.com>\",\n \"to\" : \"\\\"Bob\\\" <sip:+15715550000@example.com>\",\n \"identity\" : [ \"eyJhbGciOiJFUzI1NiIsInBwdCI6InNoYWtlbiIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cHM6Ly9jci11YXQuY2NpZC5uZXVzdGFyLmJpei9jY2lkL2F1dGhuL3YyL2NlcnRzLzExNDc1LjEwMDAxIn0.eyJhdHRlc3QiOiJBIiwiZGVzdCI6eyJ0biI6WyIxNTcxNTU1MDAwMCJdfSwiaWF0IjoxNjM0MjQyMTk4LCJvcmlnIjp7InRuIjoiMTcwMzU1NTAwMDEifSwib3JpZ2lkIjoiM0Y5QzI4MzYtN0U0MC0xMUU3LUJBNTgtNzgzMUMxQjhERUJBIn0.j3N_z0Eu7I_dcNQ9BTdoZ7AoBFRCetBX4RzOfj2vNSENJ4EdKUpehijGa8xy-5kZgV3I_alJsKxI8XoV2aTm5w;info=<https://cr-uat.ccid.neustar.biz/ccid/authn/v2/certs/11475.10001>;alg=ES256;ppt=\\\"shaken\\\"\" ]\n }'\n\nResponse: \n{\n \"status\" : \"ok\"\n}\n"
- lang: curl
label: SHAKEN w/verstat
source: "Request: \ncurl 'https://{hostname}:{port}/{optionalRoutingPath}/verify/v2/identity?apiKey=10679965b0504406a3f02cc4' -i -X POST \\\n -H 'Content-Type: application/json' \\\n -H 'Accept: application/json' \\\n -d '{\n \"from\" : \"\\\"Alice\\\" <sip:+17035550001@example.com>\",\n \"to\" : \"\\\"Bob\\\" <sip:+15715550000@example.com>\",\n \"identity\" : [ \"eyJhbGciOiJFUzI1NiIsInBwdCI6InNoYWtlbiIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cHM6Ly9jci11YXQuY2NpZC5uZXVzdGFyLmJpei9jY2lkL2F1dGhuL3YyL2NlcnRzLzExNDc1LjEwMDAxIn0.eyJhdHRlc3QiOiJBIiwiZGVzdCI6eyJ0biI6WyIxNTcxNTU1MDAwMCJdfSwiaWF0IjoxNjM0MjQyMTk4LCJvcmlnIjp7InRuIjoiMTcwMzU1NTAwMDEifSwib3JpZ2lkIjoiM0Y5QzI4MzYtN0U0MC0xMUU3LUJBNTgtNzgzMUMxQjhERUJBIn0.j3N_z0Eu7I_dcNQ9BTdoZ7AoBFRCetBX4RzOfj2vNSENJ4EdKUpehijGa8xy-5kZgV3I_alJsKxI8XoV2aTm5w;info=<https://cr-uat.ccid.neustar.biz/ccid/authn/v2/certs/11475.10001>;alg=ES256;ppt=\\\"shaken\\\"\" ],\n \"verstat\" : true \n }'\n\nResponse: \n{\n \"status\" : \"ok\",\n \"verstat\" : \"TN-Validation-Passed\"\n}\n"
- lang: curl
label: DIV
source: "Request: \ncurl 'https://{hostname}:{port}/{optionalRoutingPath}/verify/v2/identity?apiKey=10679965b0504406a3f02cc4' -i -X POST \\\n -H 'Content-Type: application/json' \\\n -H 'Accept: application/json' \\\n -d '{\n \"from\" : \"\\\"Alice\\\" <sip:+17035550001@example.com>\",\n \"to\" : \"\\\"John\\\" <sip:+15715550002@example.com>\",\n \"identity\" : [ \"eyJhbGciOiJFUzI1NiIsInBwdCI6InNoYWtlbiIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cHM6Ly9jci11YXQuY2NpZC5uZXVzdGFyLmJpei9jY2lkL2F1dGhuL3YyL2NlcnRzLzExNDc1LjEwMDAxIn0.eyJhdHRlc3QiOiJBIiwiZGVzdCI6eyJ0biI6WyIxNTcxNTU1MDAwMCJdfSwiaWF0IjoxNjM1MTc4MDgxLCJvcmlnIjp7InRuIjoiMTcwMzU1NTAwMDEifSwib3JpZ2lkIjoiOWJjM2U2MjktMWViNC00NGY3LTgzMjEtY2Q3ZDAwNGNkNDdiIiwicmNkIjp7Im5hbSI6IkFsaWNlIn0sInJjZGkiOiJzaGEyNTYtL3pnQ1RJaTNXZ3Bmb1VpUUNLYjZtV2R6VTVnT2tpdUVva3U3TklBbDJyYz0ifQ.JNtrzwn9x0zCohIyIxrXm-DhjHJZyKUuTmk70C71DFub411yQYIsAT3QV-5EX2ULLtHpv2uVMHZLJbIdFpR0TQ;info=<https://cr-uat.ccid.neustar.biz/ccid/authn/v2/certs/11475.10001>;alg=ES256;ppt=\\\"shaken\\\"\", \"eyJhbGciOiJFUzI1NiIsInBwdCI6ImRpdiIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cHM6Ly9jci11YXQuY2NpZC5uZXVzdGFyLmJpei9jY2lkL2F1dGhuL3YyL2NlcnRzLzExNDc1LjEwMDAxIn0.eyJkZXN0Ijp7InRuIjpbIjE1NzE1NTUwMDAyIl19LCJkaXYiOnsidG4iOiIxNTcxNTU1MDAwMCJ9LCJpYXQiOjE2MzUxNzgwOTAsIm9yaWciOnsidG4iOiIxNzAzNTU1MDAwMSJ9fQ.vKuA9Chpfkqb4W5b-kf1e76Y8ECSdR8S7v8hFWYtccCpCvzdTfDF6TnNTpuVVhZ560ikECSCxhfqwHUMLJz3TQ;info=<https://cr-uat.ccid.neustar.biz/ccid/authn/v2/certs/11475.10001>;alg=ES256;ppt=\\\"div\\\"\" ],\n \"diversion\" : \"\\\"Bob\\\" <sip:+17035550000@example.com>;reason=away\"\n }'\n\nResponse: \n{\n \"status\" : \"ok\"\n}\n"
- lang: curl
label: RPH w/SPH
source: "Request: \ncurl 'https://{hostname}:{port}/{optionalRoutingPath}/verify/v2/identity?apiKey=10679965b0504406a3f02cc4' -i -X POST \\\n -H 'Content-Type: application/json' \\\n -H 'Accept: application/json' \\\n -d '{\n \"from\" : \"\\\"Alice\\\" <sip:alice@example.com>\",\n \"to\" : \"\\\"Bob\\\" <sip:5715550000@example.com>\",\n \"passport_type\" : \"rph\",\n \"resource_priority\" : [ \"ets.0, wps.1, esnet.1\", \"q735.1\" ],\n \"priority\" : \"psap-callback\",\n \"identity\" : [ \"eyJhbGciOiJFUzI1NiIsInBwdCI6InJwaCIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cDovLzEwLjc1LjMyLjE2OTo4MDgxL2NjaWQvYXV0aG4vdjIvY2VydHMvMTAxODgyLjEwMDQyNiJ9.eyJkZXN0Ijp7InRuIjpbIjU3MTU1NTAwMDAiXX0sImlhdCI6MTY0MzM5NzA5Nywib3JpZyI6eyJ1cmkiOiJzaXA6YWxpY2VAZXhhbXBsZS5jb20ifSwicnBoIjp7ImF1dGgiOlsiZXNuZXQuMSIsImV0cy4wIiwicTczNS4xIiwid3BzLjEiXX0sInNwaCI6InBzYXAtY2FsbGJhY2sifQ.B3bAZvTbTJ-4ggkt_FhB3F7q7RL021_bJ0hevyJ5Gkf3Vn-Ci-kA1estfMvFMGiKw9ODZqVUWUcmz3TayAyoXg;info=<https://{hostname}:{port}/{optionalRoutingPath}/authn/v2/certs/101882.100426>;alg=ES256;ppt=\\\"rph\\\"\" ]\n }'\n\nResponse: \n{\n \"status\" : \"ok\"\n}\n"
- lang: curl
label: SHAKEN w/Request ID & Identity Header Data
source: "Request: \ncurl 'https://{hostname}:{port}/{optionalRoutingPath}/verify/v2/identity?apiKey=10679965b0504406a3f02cc4' -i -X POST \\\n -H 'Content-Type: application/json' \\\n -H 'Accept: application/json' \\\n -d '{\n \"from\" : \"\\\"Alice\\\" <sip:+17035550001@example.com>\",\n \"to\" : \"\\\"Bob\\\" <sip:+15715550000@example.com>\",\n \"identity\" : [ \"eyJhbGciOiJFUzI1NiIsInBwdCI6InNoYWtlbiIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cHM6Ly9jci11YXQuY2NpZC5uZXVzdGFyLmJpei9jY2lkL2F1dGhuL3YyL2NlcnRzLzExNDc1LjEwMDAxIn0.eyJhdHRlc3QiOiJBIiwiZGVzdCI6eyJ0biI6WyIxNTcxNTU1MDAwMCJdfSwiaWF0IjoxNjM0MjQyMTk4LCJvcmlnIjp7InRuIjoiMTcwMzU1NTAwMDEifSwib3JpZ2lkIjoiM0Y5QzI4MzYtN0U0MC0xMUU3LUJBNTgtNzgzMUMxQjhERUJBIn0.j3N_z0Eu7I_dcNQ9BTdoZ7AoBFRCetBX4RzOfj2vNSENJ4EdKUpehijGa8xy-5kZgV3I_alJsKxI8XoV2aTm5w;info=<https://cr-uat.ccid.neustar.biz/ccid/authn/v2/certs/11475.10001>;alg=ES256;ppt=\\\"shaken\\\"\" ],\n \"verstat\" : true,\n \"identity_info\" : true,\n \"request_id\" : \"X-REQUEST-ID-12345\"\n }'\n\nResponse:\n{\n \"status\" : \"ok\",\n \"request_id\" : \"X-REQUEST-ID-12345\",\n \"verstat\" : \"TN-Validation-Passed\",\n \"identity_info\" : [ {\n \"status\" : \"Ok\",\n \"params\" : \"info=<https://cr-uat.ccid.neustar.biz/ccid/authn/v2/certs/11475.10001>;alg=ES256;ppt=\\\"shaken\\\"\",\n \"header\" : {\n \"alg\" : \"ES256\",\n \"ppt\" : \"shaken\",\n \"typ\" : \"passport\",\n \"x5u\" : \"https://cr-uat.ccid.neustar.biz/ccid/authn/v2/certs/11475.10001\"\n },\n \"claim\" : {\n \"attest\" : \"A\",\n \"dest\" : {\n \"tn\" : [ \"15715550000\" ]\n },\n \"iat\" : 1634242198,\n \"orig\" : {\n \"tn\" : \"17035550001\"\n },\n \"origid\" : \"3F9C2836-7E40-11E7-BA58-7831C1B8DEBA\"\n },\n \"certificate_info\" : {\n \"subject\" : \"CN=KEYTOOL-TEST-EC-256, OU=IOT Labs, O=\\\"Neustar, Inc.\\\", L=Sterling, ST=VA, C=US\",\n \"issuer\" : \"CN=KEYTOOL-TEST-EC-256, OU=IOT Labs, O=\\\"Neustar, Inc.\\\", L=Sterling, ST=VA, C=US\"\n }\n } ]\n}\n"
- lang: curl
label: SHAKEN All Data
source: "Request: \ncurl 'https://{hostname}:{port}/{optionalRoutingPath}/verify/v2/identity?apiKey=10679965b0504406a3f02cc4' -i -X POST \\\n -H 'Content-Type: application/json' \\\n -H 'Accept: application/json' \\\n -d '{\n \"from\" : \"\\\"Alice\\\" <sip:+17035550001@example.com>\",\n \"to\" : \"\\\"Bob\\\" <sip:+15715550000@example.com>\",\n \"date\" : \"Thu, 14 Oct 2021 22:11:08 GMT\",\n \"pai\" : [ \"\\\"Alice\\\" <tel:+17035550001>\", \"\\\"Alice\\\" <sip:+17035550001@example.com>\" ],\n \"finger_print\" : [ {\n \"algorithm\" : \"SHA-1\",\n \"digest\" : \"4A:AD:B9:B1:3F:82:18:3B:54:02:12:DF:3E:5D:49:6B:19:E5:7C:AB\"\n }, {\n \"algorithm\" : \"SHA-256\",\n \"digest\" : \"36:3B:AE:12:95:95:F5:97:2D:F7:E0:84:FE:CD:F1:BC:AD:7A:70:64:F7:E7:4F:7E:A6:02:06:0E:37:54:CF:F7\"\n } ],\n \"identity\" : [ \"eyJhbGciOiJFUzI1NiIsInBwdCI6InNoYWtlbiIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cHM6Ly9jci11YXQuY2NpZC5uZXVzdGFyLmJpei9jY2lkL2F1dGhuL3YyL2NlcnRzLzExNDc1LjEwMDAxIn0.eyJhdHRlc3QiOiJBIiwiZGVzdCI6eyJ0biI6WyIxNTcxNTU1MDAwMCJdfSwiaWF0IjoxNjM0MjQ5Njg4LCJta3kiOlt7ImFsZyI6IlNIQS0xIiwiZGlnIjoiNEFBREI5QjEzRjgyMTgzQjU0MDIxMkRGM0U1RDQ5NkIxOUU1N0NBQiJ9LHsiYWxnIjoiU0hBLTI1NiIsImRpZyI6IjM2M0JBRTEyOTU5NUY1OTcyREY3RTA4NEZFQ0RGMUJDQUQ3QTcwNjRGN0U3NEY3RUE2MDIwNjBFMzc1NENGRjcifV0sIm9yaWciOnsidG4iOiIxNzAzNTU1MDAwMSJ9LCJvcmlnaWQiOiIzRjlDMjgzNi03RTQwLTExRTctQkE1OC03ODMxQzFCOERFQkEifQ.Oyz1HateQwUcuFGHoTI1iHiUsQ-b60AoH6BjsSSb__b4Dzw0sNf7yhdl_iE5nHqPPJOY2zShHYfw0XWERIj6SA;info=<https://cr-uat.ccid.neustar.biz/ccid/authn/v2/certs/11475.10001>;alg=ES256;ppt=\\\"shaken\\\"\" ],\n \"dest_cc\" : \"1\",\n \"orig_cc\" : \"1\",\n \"status\" : \"all\",\n \"verstat\" : true,\n \"identity_info\" : true,\n \"cnam\" : true,\n \"ecnam\" : true, \n \"robocall\" : true\n \"request_id\" : \"X-REQUEST-ID-12345\"\n}'\n\nResponse: \n{\n \"status\" : \"ok\",\n \"request_id\" : \"X-REQUEST-ID-12345\",\n \"verstat\" : \"TN-Validation-Passed\",\n \"identity_info\" : [ {\n \"status\" : \"Ok\",\n \"params\" : \"info=<http://ca.example.com/test.der>;alg=ES256;ppt=\\\"shaken\\\"\",\n \"header\" : {\n \"alg\" : \"ES256\",\n \"ppt\" : \"shaken\",\n \"typ\" : \"passport\",\n \"x5u\" : \"http://ca.example.com/test.der\"\n },\n \"claim\" : {\n \"attest\" : \"A\",\n \"dest\" : {\n \"tn\" : [ \"15715550000\" ]\n },\n \"iat\" : 1634249688,\n \"mky\" : [ {\n \"alg\" : \"SHA-1\",\n \"dig\" : \"4AADB9B13F82183B540212DF3E5D496B19E57CAB\"\n }, {\n \"alg\" : \"SHA-256\",\n \"dig\" : \"363BAE129595F5972DF7E084FECDF1BCAD7A7064F7E74F7EA602060E3754CFF7\"\n } ],\n \"orig\" : {\n \"tn\" : \"17035550001\"\n },\n \"origid\" : \"123456-ABCD-999999\",\n \"rcd\" : {\n \"nam\" : \"Alice\"\n }\n },\n \"certificate_info\" : {\n \"subject\" : \"C=US, ST=VA, L=Somewhere, O=\\\"AcmeTelecom, Inc.\\\", OU=VOIP, CN=TEST-EC-256-EXT-TN-JWT\",\n \"issuer\" : \"C=US, O=Neustar IOT Lab, CN=CallAuthnCA\",\n \"tn_auth_list\" : [ {\n \"spc\" : \"X001\"\n }, {\n \"range\" : {\n \"start\" : \"15714340000\",\n \"count\" : 10000\n }\n }, {\n \"one\" : \"17035550000\"\n } ]\n }\n } ],\n \"cnam\" : \"Alice In Wonderland\",\n \"ecnam\" : {\n \"display_template\" : \"none\",\n \"business_name\" : \"Disney World\",\n \"department\" : \"Theme Park\",\n \"line_type\" : \"Wireline\",\n \"subscriber_type\" : \"Business\",\n \"business_type\" : \"Entertainment\",\n \"business_address\" : \"Walt Disney World Resort\",\n \"locality\" : \"Orlando, FL\",\n \"city\" : \"Orlando\",\n \"state\" : \"FL\",\n \"country\" : \"US\",\n \"postal_code\" : \"32830\",\n \"website_url\" : \"http://movies.disney.com/alice-in-wonderland-1951\",\n \"logo_url\" : \"https://static-mh.content.disney.io/matterhorn/assets/goc/nav-logo-dark@2x-2b3eb08c507c.png\",\n \"tagline\" : \"#AliceInWonderLand\",\n \"employee_name\" : \"Alice\",\n \"first_name\" : \"Alice\",\n \"last_name\" : \"Liddell\",\n \"job_title\" : \"Adventurer\",\n \"headshot_url\" : \"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR2Q1GWX6hdmMr2dh10SoTeEKEn4S4toc4V3yAJCrPQHlzWvr_I\",\n \"email\" : \"alice@disney.com\",\n \"cnam\" : \"Alice In Wonderland\",\n \"call_purpose\" : \"Customer Support\",\n \"social_media_info\" : {\n \"Facebook\" : \"https://www.facebook.com/DisneyAliceInWonderland\",\n \"Twitter\" : \"https://twitter.com/Disney\"\n },\n \"p_asserted_identity\" : \"\\\"Alice In Wonderland\\\" <sip:alice@example.com;tmpl=none;bn=Disney%20World;dept=Theme%20Park;lt=Wireline;st=Business;bt=Entertainment;ba=Walt%20Disney%20World%20Resort;cs=Orlando, FL;city=Orlando;state=FL;ct=US;zip=32830;wb=http://movies.disney.com/alice-in-wonderland-1951;lg=https://static-mh.content.disney.io/matterhorn/assets/goc/nav-logo-dark@2x-2b3eb08c507c.png;tg=#AliceInWonderLand;sm=%7B%22Facebook%22%3A%22https%3A%2F%2Fwww.facebook.com%2FDisneyAliceInWonderland%22%2C%22Twitter%22%3A%22https%3A%2F%2Ftwitter.com%2FDisney%22%7D;nm=Alice;fn=Alice;ln=Liddell;jt=Adventurer;hs=https://encrypted-tbn0.gstatic.com/images?q%3dtbn:ANd9GcR2Q1GWX6hdmMr2dh10SoTeEKEn4S4toc4V3yAJCrPQHlzWvr_I;cp=Customer Support;email=alice@disney.com>\"\n },\n \"call_insight\" : {\n \"call_treatment\" : \"allow\",\n \"fraud_score\" : 0,\n \"category_id\" : 0,\n \"data_model\" : \"titan\",\n \"category\" : \"N/A\",\n \"overlay_name\" : \"[V] \",\n \"original_calling_name\" : \"Alice\"\n }\n}\n"
- lang: curl
label: Integrated STIR Verify and SHAKEN Signing
source: "Request: \n<<<<<<<<<<<< VS Profile needs to be configured for Re-Signing >>>>>>>>>>>>>\ncurl 'https://{hostname}:{port}/{optionalRoutingPath}/verify/v2/identity?apiKey=7826148d26e8470ba1be4548' -i -X POST \\\n -H 'Content-Type: application/json' \\\n -H 'Accept: application/json' \\\n -d '{\n \"from\" : \"\\\"Alice\\\" sip:+17035550001@example.com\",\n \"to\" : \"\\\"Bob\\\" sip:+15715550000@example.com\",\n \"identity\" : [ \"eyJhbGciOiJFUzI1NiIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cHM6Ly9jci11YXQuY2NpZC5uZXVzdGFyLmJpei9jY2lkL2F1dGhuL3YyL2NlcnRzLzExNDc1LjEwMDAxIn0.eyJkZXN0Ijp7InRuIjpbIjE1NzE1NTUwMDAwIl19LCJpYXQiOjE2MzQyNDIwMTcsIm9yaWciOnsidG4iOiIxNzAzNTU1MDAwMSJ9fQ.q2JsLmI-ApIqPpPVnsoQNrD4tpdFv5lLD-80PrJ6WB8YDVF_70CEUetBjxI8-4-5gH91Hu3xLkDqmTeNUUatIw;info=https://cr-uat.ccid.neustar.biz/ccid/authn/v2/certs/11475.10001;alg=ES256\" ]\n }'\nResponse: \n{\n \"status\" : \"ok\",\n \"resigned_identity\" : \"eyJhbGciOiJFUzI1NiIsInBwdCI6InNoYWtlbiIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cHM6Ly9jci11YXQuY2NpZC5uZXVzdGFyLmJpei9jY2lkL2F1dGhuL3YyL2NlcnRzLzExNDc5LjEwMDAxIn0.eyJhdHRlc3QiOiJBIiwiZGVzdCI6eyJ0biI6WyIxNTcxNTU1MDAwMCJdfSwiaWF0IjoxNjM3MDc5MjYwLCJvcmlnIjp7InRuIjoiMTcwMzU1NTAwMDEifSwib3JpZ2lkIjoiNzUyM2Y1YWMtY2JkMS00YThhLTg3NGMtNWMxNGUzY2MxNzAxIn0.KJZ-kmSJdv9laJYoqOP937tvGNcFA9TG0Nec5LcH0oEUAHxT8qit2TsvWIh3iha11dPtyvLJ3vrV9fZNm_ADlg;info=https://cr-uat.ccid.neustar.biz/ccid/authn/v2/certs/11479.10001;alg=ES256;ppt=\\\"shaken\\\"\"\n}\n"
- lang: curl
label: RCD
source: "Request: \ncurl 'https://{hostname}:{port}/{optionalRoutingPath}/verify/v2/identity?apiKey=6bea63cb232d4a4a8dea656e' -i -X POST \\\n -H 'Content-Type: application/json' \\\n -H 'Accept: application/json' \\\n -d '{\n \"from\" : \"\\\"Alice\\\" <sip:+17035550001@example.com>\",\n \"to\" : \"\\\"John\\\" <sip:+15715550002@example.com>\",\n \"caller_reason\" : \"Travel\",\n \"caller_name\" : \"Alice Liddell\",\n \"alt_present_number\" : \"<sip:+18005550000@example.com>\",\n \"jcard\" : \"[\\\"vcard\\\",[[\\\"version\\\",{},\\\"text\\\",\\\"4.0\\\"],[\\\"fn\\\",{},\\\"text\\\",\\\"Alice Liddell\\\"],[ \\\"email\\\",{},\\\"text\\\",\\\"alice@example.com\\\"]]]\",\n \"rcd_issuer\" : \"Disney, Inc.\",\n \"rcd_integrity\" : true,\n \"identity_info\" : true,\n \"identity\" : \"eyJhbGciOiJFUzI1NiIsInBwdCI6InJjZCIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cDovLzEwLjc1LjMyLjE2OTo4MDgxL2NjaWQvYXV0aG4vdjIvY2VydHMvMTAxODgyLjEwMDQyNiJ9.eyJjcm4iOiJUcmF2ZWwiLCJkZXN0Ijp7InRuIjpbIjE1NzE1NTUwMDAyIl19LCJpYXQiOjE2NDQ1MjcwMDcsImlzcyI6IkRpc25leSwgSW5jLiIsIm9yaWciOnsidG4iOiIxNzAzNTU1MDAwMSJ9LCJyY2QiOnsiYXBuIjoiMTgwMDU1NTAwMDAiLCJqY2wiOiJjaWQ6MTIzNDU2IiwibmFtIjoiQWxpY2UgTGlkZGVsbCJ9LCJyY2RpIjp7Ii9hcG4iOiJzaGEzODQtRjQyd2htbEhLZnNtNmNzRUU4aXdBZzlsejkxL1JiUnQxUGJTQzFHSXJZMG4va1UzZHlOSFJ6WDdxV2s5R0l0WSIsIi9qY2wiOiJzaGEzODQtcVA1NEo0aUM2Y1B0L0ZmdXNLcEMwVlhoNjVvaFRZY2NQekRJUFdXZzRZc3F0ZFU3a2xiOVlIWFA2elp5dWlzayIsIi9uYW0iOiJzaGEzODQtbWtFV3lVdTA1b1UyMGYxNFVwN2xibnk3WDhDSndzT09zeVlQUllCWmYydExvQ2JoaEpLMkd4aGsyWFF5NUIzZyJ9fQ.VaFqs3J98BCW55dKljNHkeN6F7M0KW10dH0IhbdQfXHDUHDCbfNALIIwqKFhUXTJ55lX-y4u5_lZ-VSlXMLyHw;info=<https://{hostname}:{port}/{optionalRoutingPath}/authn/v2/certs/101882.100426>;alg=ES256;ppt=\\\"rcd\\\"\"\n }'\nResponse: \n{\n \"status\" : \"ok\",\n \"identity_info\" : [ {\n \"status\" : \"Ok\",\n \"params\" : \"info=<https://{hostname}:{port}/{optionalRoutingPath}/authn/v2/certs/101882.100426>;alg=ES256;ppt=\\\"rcd\\\"\",\n \"header\" : {\n \"alg\" : \"ES256\",\n \"ppt\" : \"rcd\",\n \"typ\" : \"passport\",\n \"x5u\" : \"https://{hostname}:{port}/{optionalRoutingPath}/authn/v2/certs/101882.100426\"\n },\n \"claim\" : {\n \"crn\" : \"Travel\",\n \"dest\" : {\n \"tn\" : [ \"15715550002\" ]\n },\n \"iat\" : 1644527007,\n \"iss\" : \"Disney, Inc.\",\n \"orig\" : {\n \"tn\" : \"17035550001\"\n },\n \"rcd\" : {\n \"apn\" : \"18005550000\",\n \"jcl\" : \"cid:123456\",\n \"nam\" : \"Alice Liddell\"\n },\n \"rcdi\" : {\n \"/apn\" : \"sha384-F42whmlHKfsm6csEE8iwAg9lz91/RbRt1PbSC1GIrY0n/kU3dyNHRzX7qWk9GItY\",\n \"/jcl\" : \"sha384-qP54J4iC6cPt/FfusKpC0VXh65ohTYccPzDIPWWg4YsqtdU7klb9YHXP6zZyuisk\",\n \"/nam\" : \"sha384-mkEWyUu05oU20f14Up7lbny7X8CJwsOOsyYPRYBZf2tLoCbhhJK2Gxhk2XQy5B3g\"\n }\n },\n \"certificate_info\" : {\n \"subject\" : \"C=CA, ST=VA, L=Somewhere, O=\\\"AcmeTelecom, Inc.\\\", OU=VOIP, CN=SHAKEN 6660\",\n \"issuer\" : \"C=US, O=Neustar Information Services Inc, OU=www.ccid.neustar, CN=Neustar Certified Caller ID CA-1\",\n \"tn_auth_list\" : [ {\n \"spc\" : \"6660\"\n } ]\n }\n } ]\n}\n"
- lang: curl
label: SHAKEN w/RCD
source: "Request:\ncurl 'https://{hostname}:{port}/{optionalRoutingPath}/verify/v2/identity?apiKey=%3CapiKey1%3E' -i -X POST \\\n -H 'Content-Type: application/json' \\\n -H 'Accept: application/json' \\\n -d '{\n \"from\" : \"\\\"alice\\\" <sip:+17035550001@example.com>\",\n \"to\" : \"\\\"bob\\\" <sip:+15715550001@example.com>\",\n \"identity\" : [ \"eyJhbGciOiJFUzI1NiIsInBwdCI6InNoYWtlbiIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cDovL2NhLmV4YW1wbGUuY29tL3Rlc3QuZGVyIn0.eyJhdHRlc3QiOiJBIiwiY3JuIjoiVHJhdmVsIiwiZGVzdCI6eyJ0biI6WyIxNTcxNTU1MDAwMSJdfSwiaWF0IjoxNjM5NDU1NzUxLCJpc3MiOiJEaXNuZXksIEluYy4iLCJvcmlnIjp7InRuIjoiMTcwMzU1NTAwMDEifSwib3JpZ2lkIjoiMTIzNDU2LUFCQ0QtOTk5OTk5IiwicmNkIjp7ImFwbiI6IjE4MDA1NTUwMDAwIiwiamNkIjpbInZjYXJkIixbWyJ2ZXJzaW9uIix7fSwidGV4dCIsIjQuMCJdLFsiZm4iLHt9LCJ0ZXh0IiwiQWxpY2UgTGlkZGVsbCJdLFsiZW1haWwiLHt9LCJ0ZXh0IiwiYWxpY2VAZXhhbXBsZS5jb20iXV1dLCJuYW0iOiJBbGljZSJ9LCJyY2RpIjp7Ii9hcG4iOiJzaGEyNTYtdkhDUkcxMmpDNlhNOVJPTzF3c0RGT3BqZUFENEkyYzc0TlVRa2x6bjR6WT0iLCIvamNkIjoic2hhMjU2LUhaeC9OLzF4T0JwRW9mc2hiWjJYampRMzFPRHV2cGVGWnRrbG5xMnpaRzg9IiwiL25hbSI6InNoYTI1Ni1POFVRWXBjOFJZMWFieTJOWktBakpHTlVyWDRHU3g1T0FKN0lvR21hTUVNPSJ9fQ.ur9sW1E2Wc5FgREsbhM17kQrmfKCbcUtq8ZDAVL_YiUDe9T9s69YoeaCElWcvhLikqqDVBgS3E78g9ZHn2GcjA;info=<http://ca.example.com/test.der>;alg=ES256;ppt=\\\"shaken\\\"\" ],\n \"call_info\" : \"<cid:example.com/alice.json>;purpose=jcard;call-reason=Travel\",\n \"caller_name\" : \"Alice\",\n \"alt_present_number\" : \"<sip:+18005550000@example.com>\",\n \"jcard\" : \"[\\\"vcard\\\",[[\\\"version\\\",{},\\\"text\\\",\\\"4.0\\\"],[\\\"fn\\\",{},\\\"text\\\",\\\"Alice Liddell\\\"],[ \\\"email\\\",{},\\\"text\\\",\\\"alice@example.com\\\"]]]\",\n \"rcd_issuer\" : \"Disney, Inc.\",\n \"rcd_integrity\" : true,\n \"status\" : \"all\",\n \"verstat\" : true,\n \"identity_info\" : true,\n \"request_id\" : \"X-REQUEST-ID-12345\"\n }'\nResponse: \n{\n \"status\" : \"ok\",\n \"request_id\" : \"X-REQUEST-ID-12345\",\n \"verstat\" : \"TN-Validation-Passed\",\n \"identity_info\" : [ {\n \"status\" : \"Ok\",\n \"params\" : \"info=<http://ca.example.com/test.der>;alg=ES256;ppt=\\\"shaken\\\"\",\n \"header\" : {\n \"alg\" : \"ES256\",\n \"ppt\" : \"shaken\",\n \"typ\" : \"passport\",\n \"x5u\" : \"http://ca.example.com/test.der\"\n },\n \"claim\" : {\n \"attest\" : \"A\",\n \"crn\" : \"Travel\",\n \"dest\" : {\n \"tn\" : [ \"15715550001\" ]\n },\n \"iat\" : 1639455751,\n \"iss\" : \"Disney, Inc.\",\n \"orig\" : {\n \"tn\" : \"17035550001\"\n },\n \"origid\" : \"123456-ABCD-999999\",\n \"rcd\" : {\n \"apn\" : \"18005550000\",\n \"jcd\" : [ \"vcard\", [ [ \"version\", { }, \"text\", \"4.0\" ], [ \"fn\", { }, \"text\", \"Alice Liddell\" ], [ \"email\", { }, \"text\", \"alice@example.com\" ] ] ],\n \"nam\" : \"Alice\"\n },\n \"rcdi\" : {\n \"/apn\" : \"sha256-vHCRG12jC6XM9ROO1wsDFOpjeAD4I2c74NUQklzn4zY=\",\n \"/jcd\" : \"sha256-HZx/N/1xOBpEofshbZ2XjjQ31ODuvpeFZtklnq2zZG8=\",\n \"/nam\" : \"sha256-O8UQYpc8RY1aby2NZKAjJGNUrX4GSx5OAJ7IoGmaMEM=\"\n }\n },\n \"certificate_info\" : {\n \"subject\" : \"C=US, ST=VA, L=Somewhere, O=\\\"AcmeTelecom, Inc.\\\", OU=VOIP, CN=TEST-EC-256-EXT-TN-JWT\",\n \"issuer\" : \"C=US, O=Neustar IOT Lab, CN=CallAuthnCA\",\n \"tn_auth_list\" : [ {\n \"spc\" : \"X001\"\n }, {\n \"range\" : {\n \"start\" : \"15714340000\",\n \"count\" : 10000\n }\n }, {\n \"one\" : \"17035550000\"\n } ]\n }\n } ]\n}\n"
responses:
200:
description: 'successful operation
'
content:
application/json:
schema:
$ref: '#/components/schemas/VerifyResponse'
text/plain:
examples:
# --- truncated at 32 KB (326 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/transunion/refs/heads/main/openapi/transunion-verification-service-api-openapi.yml