Interpreting Results — API
The /slverify Response
/slverify ResponseEvery /slverify call returns a JSON object with four main output sections, plus a top-level policyDecision that summarizes the result.
{
"errorCode": "",
"errorDescription": "",
"transaction_id": "c66130ad-5551-1111-1111-2716ef0bf31a",
"userAttributes": [
// attributes collected from the user during this step
],
"acquiredAttributes": [
// attributes acquired from Checkers about this transaction
],
"userAssertionList": [
// individual assertion results from each Checker
],
"mbun": "fcbdc4a9-c369-1111-1111-851051fc2f84",
"forwardApiKey": "",
"policyObligation": false,
"policyDecision": "approve"
}The Four Output Sections
User Attributes
Attributes collected from the user during verification with their consent. For example, full name, address, date of birth, or phone number.
Acquired Attributes
Attributes acquired from Checkers about the transaction — not submitted by the user. Examples include the mobile carrier associated with a phone number, the state where a driver's license was issued, or an assertion score.
Assertions
Individual test results produced by each configured Checker. For example: "link.fullName_address": "pass" indicates the Checker confirmed that the provided full name is linked to the provided address.
Policy Decision
The policyDecision field summarizes the verification outcome for this step. See the Policy Decision Values section below.
Policy Decision Values
| Value | Meaning |
|---|---|
approve | User verified to the level specified in your policy |
deny | User did not meet the verification policy |
obligation | Additional step required — handle by reading forwardApiKey |
no_decision | Policy not configured on this step, or a transaction error occurred |
Obligation Handling
When the API returns policyDecision: "obligation", the response includes two additional fields that tell you what to do next:
policyObligation: true— confirms there is a configured next stepforwardApiKey— the API key for the next step in the workflow
Obligation Example
{
"forwardApiKey": "67890",
"policyObligation": true,
"policyDecision": "obligation"
}Your application should use forwardApiKey as the apikey value for the next /slverify (or other API) call. Load the appropriate UI for the next step, collect the required attributes, and submit them.
Obligation Flow
- Receive
policyDecision: "obligation"from step A - Read
forwardApiKey— this is the API key for step B - Collect required attributes for step B
- Submit to
/slverifyusingforwardApiKeyasapikeyand the originaltransaction_idasasi - Receive new
policyDecisionfor step B — may beapprove,deny, or anotherobligation
Retry Obligations
If a user fails a verification step and your policy allows retries with remaining attempts, the API returns an obligation back to the same API key:
{
"forwardApiKey": "12345",
"policyObligation": true,
"policyDecision": "obligation"
}Note that forwardApiKey matches the current step's API key — this indicates a retry. Present the step again and allow the user to resubmit.
When the user exhausts all retry attempts, the API responds with the appropriate terminal decision (deny) or advances to the next step (obligation with a different forwardApiKey).
Session Linking: transaction_id and asi
transaction_id and asiThe transaction_id returned in the first API call is the session identifier for the entire user journey. Pass it as asi in all subsequent calls to link the session.
First call response (retrieve the session ID):
{
"transaction_id": "76ceb32b-yyyy-xxxx-zzzz-55e54bf93fc3",
"policyDecision": "obligation",
"forwardApiKey": "67890"
}Subsequent call input (link back to the session):
{
"asi": "76ceb32b-yyyy-xxxx-zzzz-55e54bf93fc3",
"apikey": "67890",
"credential": "[email protected]"
}The transaction_id / asi is also the same value as jti in the ID Token (for Gateway / Hybrid flows) and is used for reporting, billing, and Admin Console analytics.
Full Response Example
{
"errorCode": "",
"errorDescription": "",
"transaction_id": "c66130ad-5551-4abc-def0-2716ef0bf31a",
"userAttributes": [
{
"attributeType": "FullName",
"values": { "fname": "Jane", "lname": "Smith" },
"dateCreated": "02/08/2022 21:09:55 UTC"
},
{
"attributeType": "InternationalAddress",
"values": {
"country": "US",
"locality": "Arlington",
"route": "Main Ave",
"administrative_area_level_1": "VA",
"street_number": "123",
"postal_code": "22201"
},
"dateCreated": "02/08/2022 21:09:55 UTC"
}
],
"acquiredAttributes": [
{
"attributeType": "AssertionScore",
"values": { "assertionScore": "88" },
"dateCreated": "02/08/2022 21:09:57 UTC"
}
],
"userAssertionList": [
{
"provider": "Experian",
"serviceOffering": "Experian Precise ID",
"dateAsserted": "02/08/2022 21:09:55 UTC",
"assertions": {
"link.fullName_address": "pass",
"test.address90DaysOld": "pass",
"test.addressIsResidential": "pass",
"link.lastName_phone": "pass",
"test.fraudulentActivityAddress": "pass"
}
}
],
"mbun": "fcbdc4a9-c369-4def-ab12-851051fc2f84",
"forwardApiKey": "",
"policyObligation": false,
"policyDecision": "approve"
}Updated 2 months ago
