openapi: 3.1.0
servers:
- url: https://{hostname}:{port}/{optionalRoutingPath}
description: https
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 APIs
summary:
description: |
# Overview
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).
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.
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.
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.
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:
* ATIS-1000074, “SHAKEN”
* ATIS-1000078, “National Security / Emergency Preparedness Priority Service SIP RPH Signing and Verification using PASSporTs”
* ATIS-1000080, “SHAKEN: Governance Model and Certificate Management”
* ATIS-1000084, “Operational and Management Considerations for SHAKEN STI Certification Authorities and Policy Administrators”
* ATIS-1000085, “SHAKEN: SHAKEN Support of “div” PASSporT”
* ATIS-1000092, “SHAKEN: Delegate Certificates
* ATIS-1000093, “Toll-Free Numbers in the SHAKEN Framework”
* ATIS-1000094, “SHAKEN: Calling Name and Rich Call Data Handling Procedures”
* ATIS-1000098, “SIP Resource-Priority Header and Priority Header Signing in Support of Emergency Calling”
Looking forward to your support, feedback and contributions.
tags:
- name: Authentication Service
description: |
This API endpoint uses the following data elements ('required' elements identified) in the REQUEST to create a SIP Identity header. Based on the HTTP header of 'Content-Type' (e.g. json, text/plain), the request body (data) can include various data elements. Please refer to the examples for more details.
Three different API entry points are defined for SIP Identity header creation:
* Accepts requests in JSON format and produces responses in JSON format
* Accepts text messages in text/plain and produces responses in JSON format
* Accepts text messages in text/plain and produces responses in text/plain format
- 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.
Three different API entry points are defined for SIP Identity header verification:
* Accepts requests in JSON format and produces responses in JSON format
* Accepts text messages and produces responses in JSON format
* Accepts text messages and produces responses in SIP format
- name: Verification Service with Call Validation Treatment (CVT)
paths:
/authn/v2/identityj-j:
post:
tags:
- Authentication Service
description: |
This API entry point accepts requests and produces responses in JSON Format.
summary: Request & Response in JSON Format
operationId: authn/identityj-j
parameters:
- name: apiKey
in: query
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: ppt
in: query
description: Only applicable when SIP INVITE message is included in the request body. PASSporT type value. If specified, must be 'shaken', 'div', 'rcd' or 'rph'. If not specified, default ppt=shaken by authentication server
required: false
style: form
schema:
type: string
- name: attest
in: query
required: false
description: Only applicable when SIP INVITE message is included in the request body. Attestation indicator claim value.'attest' value specified by ATIS-1000074.v002. If specified, must be a either "A", "B" or "C". If not specified, default attest=A by authentication server
schema:
type: string
- name: origid
in: query
description: Only applicable when SIP INVITE message is included in the request body. Origination identifier claim value. 'origid' value specified by ATIS-1000074.v002. If specified, should be a unique string corresponding to a UUID (RFC 4122). If not specified, authentication server would add a UUID.
required: false
style: form
schema:
type: string
- name: compact
in: query
description: Only applicable when SIP INVITE message is included in the request body. Flag for compact SIP Identity header, ignored for 'shaken' PASSporT type. If specified, must be true or false
required: false
style: form
schema:
type: boolean
- name: origcc
in: query
description: Only applicable when SIP INVITE message is included in the request body. Default country code for the originator telephone number. If specified, must be a valid country code
required: false
style: form
schema:
type: string
- name: destcc
in: query
description: Only applicable when SIP INVITE message is included in the request body. Default country code for the destination telephone number. If specified, must be a valid country code
required: false
style: form
schema:
type: string
- name: verstat
in: query
description: Only applicable when SIP INVITE message is included in the request body. Verstat value as defined in ETSI TS 124 299, for performing tagging and the SIP Identity header optionally removed
required: false
style: form
schema:
type: string
- name: identity
in: query
description: Only applicable when SIP INVITE message is included in the request body. Flag for including SIP Identity header when the "verstat" parameter is specified, with the default value as "true". If specified, must be true or false
required: false
style: form
schema:
type: boolean
requestBody:
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/Identity'
text/plain:
examples:
request:
value: |
INVITE sip:7035550021@proxy.example.com;transport=UDP SIP/2.0
v: SIP/2.0/UDP proxy.example.com:39089;branch=z9hG4bK
Max-Forwards: 70
m: "Alice" <sip:5715550001@proxy.example.com:39089;transport=UDP>
t: "Bob" <sip:+17035550002@example.com>
f: "Alice" <sip:+15715550001@example.com>;tag=1f4e4f40
i: YzRlZDFlYzYyM2IwOTdlMzk0MDA3MTRmZmY3OGIzODM.
P-Asserted-Identity: Alice <sip:+15715550001@example.com>
CSeq: 2 INVITE
Allow: INVITE, ACK, CANCEL, BYE, NOTIFY, REFER, MESSAGE, OPTIONS, INFO, SUBSCRIBE
c: application/sdp
Date: Fri, 14 May 2021 16:57:04 GMT
k: replaces, norefersub, extended-refer, timer, X-cisco-serviceuri
User-Agent: Z 3.3.25608 r25552
Allow-Events: presence, kpml
l: 425
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:md5 14:75:8F:1A:FD:44:C0:9B:79:92:07:3C:CF:00:B4:3D
a=fingerprint:sha-256 AE:C0:70:64:5F:E5:3E:E3:B3:76:30:59:37:61:34:F0:58:CC:33:72:47:C9:78:AD:D1:78:B6:CC:DF:B0:01:9F
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
x-summary:
x-code-samples:
- lang: curl
label: STIR
source: |
Request:
curl 'https://{hostname}:{port}/{optionalRoutingPath}/authn/v2/identity?apiKey=c07939ca0d0847038866f953' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{
"from" : "\"Alice\" <sip:+17035550001@example.com>",
"to" : "\"Bob\" <sip:+15715550000@example.com>"
}'
Response:
{
"identity" : "eyJhbGciOiJFUzI1NiIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cHM6Ly9jci11YXQuY2NpZC5uZXVzdGFyLmJpei9jY2lkL2F1dGhuL3YyL2NlcnRzLzExNDc1LjEwMDAxIn0.eyJkZXN0Ijp7InRuIjpbIjE1NzE1NTUwMDAwIl19LCJpYXQiOjE2MzQyNDIwMTcsIm9yaWciOnsidG4iOiIxNzAzNTU1MDAwMSJ9fQ.q2JsLmI-ApIqPpPVnsoQNrD4tpdFv5lLD-80PrJ6WB8YDVF_70CEUetBjxI8-4-5gH91Hu3xLkDqmTeNUUatIw;info=<https://cr-uat.ccid.neustar.biz/ccid/authn/v2/certs/11475.10001>;alg=ES256",
"date" : "Thu, 14 Oct 2021 20:06:57 GMT"
}
- lang: curl
label: SHAKEN
source: |
Request:
curl 'https://{hostname}:{port}/{optionalRoutingPath}/authn/v2/identity?apiKey=c07939ca0d0847038866f953' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{
"from" : "\"Alice\" <sip:+17035550001@example.com>",
"to" : "\"Bob\" <sip:+15715550000@example.com>",
"passport_type" : "shaken",
"date" : "Thu, 14 Oct 2021 20:09:58 GMT",
"attest" : "A",
"origid" : "3F9C2836-7E40-11E7-BA58-7831C1B8DEBA"
}'
Response:
{
"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\""
}
- lang: curl
label: STIR Compact
source: |
Request:
curl 'https://{hostname}:{port}/{optionalRoutingPath}/authn/v2/identity?apiKey=c07939ca0d0847038866f953' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{
"from" : "\"Alice\" <sip:+17035550001@example.com>",
"to" : "\"Bob\" <sip:+15715550000@example.com>",
"compact" : true
}'
Response:
{
"identity" : "..owRURoDJ-Z-Dz2sWcpAe7cM5hgWcNtPlqixaTdXdKrEe0R2GmB2mbXruVyJDTj2yXu1fH9jsaX2qtBWh43uskA;info=<https://cr-uat.ccid.neustar.biz/ccid/authn/v2/certs/11475.10001>;alg=ES256",
"date" : "Thu, 14 Oct 2021 22:00:10 GMT"
}
- lang: curl
label: SHAKEN All Data
source: |
Request:
curl 'https://{hostname}:{port}/{optionalRoutingPath}/authn/v2/identity?apiKey=c07939ca0d0847038866f953' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{
"from" : "\"Alice\" <sip:+17035550001@example.com>",
"to" : "\"Bob\" <sip:+15715550000@example.com>",
"date" : "Thu, 14 Oct 2021 22:11:08 GMT",
"pai" : [ "\"Alice\" <tel:+17035550001>", "\"Alice\" <sip:+17035550001@example.com>" ],
"finger_print" : [ {
"algorithm" : "SHA-1",
"digest" : "4A:AD:B9:B1:3F:82:18:3B:54:02:12:DF:3E:5D:49:6B:19:E5:7C:AB"
}, {
"algorithm" : "SHA-256",
"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"
} ],
"dest_cc" : "1",
"orig_cc" : "1",
"compact" : false,
"passport_type" : "shaken",
"attest" : "A",
"origid" : "3F9C2836-7E40-11E7-BA58-7831C1B8DEBA",
"request_id" : "X-REQUEST-ID-12345"
}'
Response:
{
"request_id" : "X-REQUEST-ID-12345",
"identity" : "eyJhbGciOiJFUzI1NiIsInBwdCI6InNoYWtlbiIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cHM6Ly9jci11YXQuY2NpZC5uZXVzdGFyLmJpei9jY2lkL2F1dGhuL3YyL2NlcnRzLzExNDc1LjEwMDAxIn0.eyJhdHRlc3QiOiJBIiwiZGVzdCI6eyJ0biI6WyIxNTcxNTU1MDAwMCJdfSwiaWF0IjoxNjM0MjQ5NDY4LCJta3kiOlt7ImFsZyI6IlNIQS0xIiwiZGlnIjoiNEFBREI5QjEzRjgyMTgzQjU0MDIxMkRGM0U1RDQ5NkIxOUU1N0NBQiJ9LHsiYWxnIjoiU0hBLTI1NiIsImRpZyI6IjM2M0JBRTEyOTU5NUY1OTcyREY3RTA4NEZFQ0RGMUJDQUQ3QTcwNjRGN0U3NEY3RUE2MDIwNjBFMzc1NENGRjcifV0sIm9yaWciOnsidG4iOiIxNzAzNTU1MDAwMSJ9LCJvcmlnaWQiOiIzRjlDMjgzNi03RTQwLTExRTctQkE1OC03ODMxQzFCOERFQkEifQ.XQ28K2sQr9v4MKZLY-s4zwNr1sFwWGNdrBY4f2xudrgMo1uRHklZXyzTfNvIDV23ZVkmCcxJE_SbaHX0Dl-eQA;info=<https://cr-uat.ccid.neustar.biz/ccid/authn/v2/certs/11475.10001>;alg=ES256;ppt=\"shaken\""
}
- lang: curl
label: SHAKEN w/RCD
source: |
<<<<<<<<<<<<<< RCD Service Needs to be enabled on the AS profile >>>>>>>>>>>>>
Request:
curl 'https://{hostname}:{port}/{optionalRoutingPath}/authn/v2/identity?apiKey=c07939ca0d0847038866f953' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{
"from" : "\"Alice\" <sip:+17035550001@example.com>",
"to" : "\"Bob\" <sip:+15715550000@example.com>",
"date" : "Thu, 14 Oct 2021 22:14:48 GMT",
"pai" : [ "\"Alice\" <tel:+17035550001>", "\"Alice\" <sip:+17035550001@example.com>" ],
"finger_print" : [ {
"algorithm" : "SHA-1",
"digest" : "4A:AD:B9:B1:3F:82:18:3B:54:02:12:DF:3E:5D:49:6B:19:E5:7C:AB"
}, {
"algorithm" : "SHA-256",
"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"
} ],
"dest_cc" : "1",
"orig_cc" : "1",
"compact" : false,
"passport_type" : "shaken",
"call_info" : "<cid:example.com/alice.json>;purpose=jcard;call-reason=Travel.",
"caller_reason": "Travel.",
"caller_name" : "Alice Liddell",
"jcard" : "[\"vcard\",[[\"version\",{},\"text\",\"4.0\"],[\"fn\",{},\"text\",\"Alice Liddell\"],[ \"email\",{},\"text\",\"alice@example.com\"]]]",
"attest" : "A",
"origid" : "3F9C2836-7E40-11E7-BA58-7831C1B8DEBA",
"request_id" : "X-REQUEST-ID-12345"
}'
Response:
{
"request_id" : "X-REQUEST-ID-12345",
"identity" : "eyJhbGciOiJFUzI1NiIsInBwdCI6InNoYWtlbiIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cHM6Ly9jci11YXQuY2NpZC5uZXVzdGFyLmJpei9jY2lkL2F1dGhuL3YyL2NlcnRzLzExNDc1LjEwMDAxIn0.eyJhdHRlc3QiOiJBIiwiZGVzdCI6eyJ0biI6WyIxNTcxNTU1MDAwMCJdfSwiaWF0IjoxNjM0MjQ5Njg4LCJta3kiOlt7ImFsZyI6IlNIQS0xIiwiZGlnIjoiNEFBREI5QjEzRjgyMTgzQjU0MDIxMkRGM0U1RDQ5NkIxOUU1N0NBQiJ9LHsiYWxnIjoiU0hBLTI1NiIsImRpZyI6IjM2M0JBRTEyOTU5NUY1OTcyREY3RTA4NEZFQ0RGMUJDQUQ3QTcwNjRGN0U3NEY3RUE2MDIwNjBFMzc1NENGRjcifV0sIm9yaWciOnsidG4iOiIxNzAzNTU1MDAwMSJ9LCJvcmlnaWQiOiIzRjlDMjgzNi03RTQwLTExRTctQkE1OC03ODMxQzFCOERFQkEifQ.Oyz1HateQwUcuFGHoTI1iHiUsQ-b60AoH6BjsSSb__b4Dzw0sNf7yhdl_iE5nHqPPJOY2zShHYfw0XWERIj6SA;info=<https://cr-uat.ccid.neustar.biz/ccid/authn/v2/certs/11475.10001>;alg=ES256;ppt=\"shaken\""
}
- lang: curl
label: DIV
source: |
Request:
curl 'https://{hostname}:{port}/{optionalRoutingPath}/authn/v2/identity?apiKey=c07939ca0d0847038866f953' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{
"from" : "\"Alice\" <sip:+17035550001@example.com>",
"to" : "\"Bob\" <sip:+15715550000@example.com>",
"passport_type" : "div",
"diversion" : "\"John\" <sip:+17035550001@example.com>;reason=away"
}'
Response:
{
"identity" : "eyJhbGciOiJFUzI1NiIsInBwdCI6ImRpdiIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cHM6Ly9jci11YXQuY2NpZC5uZXVzdGFyLmJpei9jY2lkL2F1dGhuL3YyL2NlcnRzLzExNDc1LjEwMDAxIn0.eyJkZXN0Ijp7InRuIjpbIjE1NzE1NTUwMDAwIl19LCJkaXYiOnsidG4iOiIxNzAzNTU1MDAwMSJ9LCJpYXQiOjE2MzQzMzk2MTksIm9yaWciOnsidG4iOiIxNzAzNTU1MDAwMSJ9fQ.0w3Kx99RO3DHx1YHYyiNxeMxsAeB0y-edoAEw482hRzgSPsrrY4i1s6QbtDZCNEkVexSF-84kM3oturUBkmgbQ;info=<https://cr-uat.ccid.neustar.biz/ccid/authn/v2/certs/11475.10001>;alg=ES256;ppt=\"div\"",
"date" : "Fri, 15 Oct 2021 23:13:39 GMT"
}
- lang: curl
label: RPH
source: |
Request:
curl 'https://{hostname}:{port}/{optionalRoutingPath}/authn/v2/identity?apiKey=c07939ca0d0847038866f953' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{
"from" : "\"Alice\" <sip:+17035550001@example.com>",
"to" : "<sip:+15715550000@example.com>",
"passport_type" : "rph",
"resource_priority" : [ "ets.0, wps.1", "q735.1" ]
}'
Response:
{
"identity" : "eyJhbGciOiJFUzI1NiIsInBwdCI6InJwaCIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cHM6Ly9jci11YXQuY2NpZC5uZXVzdGFyLmJpei9jY2lkL2F1dGhuL3YyL2NlcnRzLzExNDc1LjEwMDAxIn0.eyJkZXN0Ijp7InRuIjpbIjE1NzE1NTUwMDAwIl19LCJpYXQiOjE2MzQzNDAxMzIsIm9yaWciOnsidG4iOiIxNzAzNTU1MDAwMSJ9LCJycGgiOnsiYXV0aCI6WyJldHMuMCIsInE3MzUuMSIsIndwcy4xIl19fQ.WKLGgISGUxxxWAXZqlcodjTINjr4mZhuk5dFk8lL1voIV0Aycg5GbJFVnstbA4wMzlR_q2rbj3O9Oo4wUDrsgg;info=<https://cr-uat.ccid.neustar.biz/ccid/authn/v2/certs/11475.10001>;alg=ES256;ppt=\"rph\"",
"date" : "Fri, 15 Oct 2021 23:22:12 GMT"
}
- lang: curl
label: RCD w/nam
source: |
Request:
curl 'https://{hostname}:{port}/{optionalRoutingPath}/authn/v2/identity?apiKey=c07939ca0d0847038866f953' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{
"from" : "\"Alice\" <sip:+17035550001@example.com>",
"to" : "\"Bob\" <sip:+15715550000@example.com>",
"passport_type" : "rcd"
}'
Response:
{
"identity" : "eyJhbGciOiJFUzI1NiIsInBwdCI6InJjZCIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cHM6Ly9jci11YXQuY2NpZC5uZXVzdGFyLmJpei9jY2lkL2F1dGhuL3YyL2NlcnRzLzExNDc1LjEwMDAxIn0.eyJkZXN0Ijp7InRuIjpbIjE1NzE1NTUwMDAwIl19LCJpYXQiOjE2MzQzNDAyNDcsIm9yaWciOnsidG4iOiIxNzAzNTU1MDAwMSJ9LCJyY2QiOnsibmFtIjoiQWxpY2UifX0.j22TEsFNP0uNtS4Yfyoi8oy1pfOa3QKGUDu8jMs21FbglrVaJcuRWYr4CT220uDdSTYL985TjGtygZZWs-MRUg;info=<https://cr-uat.ccid.neustar.biz/ccid/authn/v2/certs/11475.10001>;alg=ES256;ppt=\"rcd\"",
"date" : "Fri, 15 Oct 2021 23:24:07 GMT"
}
- lang: curl
label: RCD All Data
source: |
Request:
curl 'https://{hostname}:{port}/{optionalRoutingPath}/authn/v2/identity?apiKey=a8b931787fe04e62af92dcf1' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{
"from" : "\"Alice\" <sip:+17035550001@example.com>",
"to" : "\"John\" <sip:+15715550002@example.com>",
"passport_type" : "rcd",
"caller_reason" : "Travel",
"caller_name" : "Alice Liddell",
"alt_present_number" : "<sip:+18005550000@example.com>",
"jcard" : "[\"vcard\",[[\"version\",{},\"text\",\"4.0\"],[\"fn\",{},\"text\",\"Alice Liddell\"],[ \"email\",{},\"text\",\"alice@example.com\"]]]",
"jcard_uri" : "cid:123456",
"rcd_issuer" : "Disney, Inc.",
"rcd_integrity" : true,
"rcd_hash_algorithm" : "sha384",
"caller_reason": "Travel.",
"rcd_signature": "sha512-oODCNbWggTlXfGx1wMpFhdA6Kt2vLjNsRnwks+ffezUUTubjGLSUhqLkSjsE3SZKPWG+gywfYmKjcPtz6uMyog=="
}'
Response:
{
"identity" : "eyJhbGciOiJFUzI1NiIsInBwdCI6InJjZCIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cDovLzEwLjc1LjMyLjE2OTo4MDgxL2NjaWQvYXV0aG4vdjIvY2VydHMvMTAxODgyLjEwMDQyNiJ9.eyJjcm4iOiJUcmF2ZWwiLCJkZXN0Ijp7InRuIjpbIjE1NzE1NTUwMDAyIl19LCJpYXQiOjE2NDQ1MjcwMDcsImlzcyI6IkRpc25leSwgSW5jLiIsIm9yaWciOnsidG4iOiIxNzAzNTU1MDAwMSJ9LCJyY2QiOnsiYXBuIjoiMTgwMDU1NTAwMDAiLCJqY2wiOiJjaWQ6MTIzNDU2IiwibmFtIjoiQWxpY2UgTGlkZGVsbCJ9LCJyY2RpIjp7Ii9hcG4iOiJzaGEzODQtRjQyd2htbEhLZnNtNmNzRUU4aXdBZzlsejkxL1JiUnQxUGJTQzFHSXJZMG4va1UzZHlOSFJ6WDdxV2s5R0l0WSIsIi9qY2wiOiJzaGEzODQtcVA1NEo0aUM2Y1B0L0ZmdXNLcEMwVlhoNjVvaFRZY2NQekRJUFdXZzRZc3F0ZFU3a2xiOVlIWFA2elp5dWlzayIsIi9uYW0iOiJzaGEzODQtbWtFV3lVdTA1b1UyMGYxNFVwN2xibnk3WDhDSndzT09zeVlQUllCWmYydExvQ2JoaEpLMkd4aGsyWFF5NUIzZyJ9fQ.VaFqs3J98BCW55dKljNHkeN6F7M0KW10dH0IhbdQfXHDUHDCbfNALIIwqKFhUXTJ55lX-y4u5_lZ-VSlXMLyHw;info=<http://10.75.32.169:8081/ccid/authn/v2/certs/101882.100426>;alg=ES256;ppt=\"rcd\"",
"date" : "Thu, 10 Feb 2022 21:03:27 GMT"
}
- lang: curl
label: RPH w/SPH
source: |
Request:
curl 'https://{hostname}:{port}/{optionalRoutingPath}/authn/v2/identity?apiKey=a8b931787fe04e62af92dcf1' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{
"from": "\"Alice\" <sip:alice@example.com>",
"to": "\"Bob\" <sip:5715550000@example.com>",
"passport_type": "rph",
"resource_priority": [
"ets.0, wps.1, esnet.1",
"q735.1"
],
"priority": "psap-callback"
}'
Response:
{
"identity": "eyJhbGciOiJFUzI1NiIsInBwdCI6InJwaCIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cDovLzEwLjc1LjMyLjE2OTo4MDgxL2NjaWQvYXV0aG4vdjIvY2VydHMvMTAxODgyLjEwMDQyNiJ9.eyJkZXN0Ijp7InRuIjpbIjU3MTU1NTAwMDAiXX0sImlhdCI6MTY0MzM5NDkxMiwib3JpZyI6eyJ1cmkiOiJzaXA6YWxpY2VAZXhhbXBsZS5jb20ifSwicnBoIjp7ImF1dGgiOlsiZXNuZXQuMSIsImV0cy4wIiwicTczNS4xIiwid3BzLjEiXX0sInNwaCI6InBzYXAtY2FsbGJhY2sifQ.wnFWAAHhBc9ON99oA8MHs9j-E_xoGmuxl4eCCBosHCpr3No3ysUEEj1oEqjB4xiW4Kb3PgbsDIcTPRikQuUKcA;info=<https://{hostname}:{port}/{optionalRoutingPath}/authn/v2/certs/101882.100426>;alg=ES256;ppt=\"rph\"",
"date": "Fri, 28 Jan 2022 18:35:12 GMT"
}
responses:
200:
description: successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
text/plain:
examples:
response:
value: |
HTTP/1.1 200 OK
Content-Type: text/plain;charset=UTF-8
Content-Length: 1981
INVITE sip:7035550021@proxy.example.com;transport=UDP SIP/2.0
v: SIP/2.0/UDP proxy.example.com:39089;branch=z9hG4bK
Max-Forwards: 70
m: "Alice" <sip:5715550001@proxy.example.com:39089;transport=UDP>
t: "Bob" <sip:+17035550002@example.com>
f: "Alice" <sip:+15715550001;verstat=TN-Validation-Passed@example.com>;tag=1f4e4f40
y: eyJhbGciOiJFUzI1NiIsInBwdCI6InNoYWtlbiIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cHM6Ly9jYS1hdXRobi5uZXVzdGFybGFiLmJpei9jY2lkL2F1dGhuL3YyL2NlcnRzLzIwMDAxLjEwMDAxIn0.eyJhdHRlc3QiOiJDIiwiZGVzdCI6eyJ0biI6WyIxNzAzNTU1MDAwMiJdfSwiaWF0IjoxNjIxMDExNDIyLCJta3kiOlt7ImFsZyI6Im1kNSIsImRpZyI6IjE0NzU4RjFBRkQ0NEMwOUI3OTkyMDczQ0NGMDBCNDNEIn0seyJhbGciOiJzaGEtMjU2IiwiZGlnIjoiQUVDMDcwNjQ1RkU1M0VFM0IzNzYzMDU5Mzc2MTM0RjA1OENDMzM3MjQ3Qzk3OEFERDE3OEI2Q0NERkIwMDE5RiJ9XSwib3JpZyI6eyJ0biI6IjE1NzE1NTUwMDAxIn0sIm9yaWdpZCI6ImZkYTYyM2EyLWE4OWQtMTFlOS1hZjgzLTAwNTA1NjlhYmIzNCJ9.pV58sy9KSKUCsM9VT_MzJ5srxib53d5xyoKcGBV9o-SJiAdaTB7t3vuxAh8WX8b6BMc_1P8mAk8WfKD3uSXGaA;info=<https://ca-authn.lab.biz/ccid/authn/v2/certs/20001.10001>;alg=ES256;ppt="shaken"
P-Attestation-Indicator: A
P-Origination-Id: AAA-BBB-CCCC
i: YzRlZDFlYzYyM2IwOTdlMzk0MDA3MTRmZmY3OGIzODM.
P-Asserted-Identity: Alice <sip:+15715550001;verstat=TN-Validation-Passed@example.com>
CSeq: 2 INVITE
Allow: INVITE, ACK, CANCEL, BYE, NOTIFY, REFER, MESSAGE, OPTIONS, INFO, SUBSCRIBE
c: application/sdp
Date: Fri, 14 May 2021 16:57:02 GMT
k: replaces, norefersub, extended-refer, timer, X-cisco-serviceuri
User-Agent: Z 3.3.25608 r25552
Allow-Events: presence, kpml
l: 425
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:md5 14:75:8F:1A:FD:44:C0:9B:79:92:07:3C:CF:00:B4:3D
a=fingerprint:sha-256 AE:C0:70:64:5F:E5:3E:E3:B3:76:30:59:37:61:34:F0:58:CC:33:72:47:C9:78:AD:D1:78:B6:CC:DF:B0:01:9F
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
4xx:
description: Error Response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse400'
examples:
ApiKeyRequired:
value:
error_id: ApiKeyRequired
http_status_code: 400
sip_code: 400
timestamp : Fri, 14 May 2021 16:57:02 GMT
reason: API key is required
developer_message: API key is required
attributes:
key: value
ApiKeyInvalid:
value:
error_id: ApiKeyInvalid
http_status_code: 400
sip_code: 400
timestamp : Fri, 14 May 2021 16:57:02 GMT
reason: API key is invalid
developer_message: API key is invalid
attributes:
key: value
CertificateIdRequired:
value:
error_id: CertificateIdRequired
http_status_code: 400
sip_code: 400
timestamp : Fri, 14 May 2021 16:57:02 GMT
reason: Certificate id is required
developer_message: Certificate id is required
attributes:
key: value
CertificateIdInvalid:
value:
error_id: CertificateIdInvalid
http_status_code: 400
sip_code: 400
timestamp : Fri, 14 May 2021 16:57:02 GMT
reason: Certificate is invalid
developer_message: Certificate is invalid
attributes:
key: value
DateParseException:
value:
error_id: DateParseException
http_status_code: 400
sip_code: 400
timestamp : Fri, 14 May 2021 16:57:02 GMT
reason: Date is expected to be in RFC 1123 format
developer_message: Date is expected to be in RFC 1123 format
attributes:
key: value
MediaTypeException:
value:
error_id: MediaTypeException
http_status_code: 400
sip_code: 400
timestamp : Fri, 14 May 2021 16:57:02 GMT
reason: Content Type is invalid or not supported
developer_message: Content Type is invalid or not supported
attributes:
key: value
MediaTypeNotAcceptableException:
value:
error_id: MediaTypeNotAcceptableException
http_status_code: 406
sip_code: 400
timestamp : Fri, 14 May 2021 16:57:02 GMT
reason: Content Type is not acceptable
developer_message: Content Ty
# --- truncated at 32 KB (896 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/transunion/refs/heads/main/openapi/transunion-trucontact-tcs-shaken-openapi.yml