Types
CredentialRequest
Full Definition
We recommend looking at the partial definitions below under the integration type tabs (Hosted, Semi-Hosted, and Non-Hosted) because they show only the properties relevant to the integration type you choose. The full definition here shows all possible properties, but some may not be relevant to your integration type.
{
type: string,
mandatory?: "yes" | "no" | "if_available",
children?: CredentialRequest[],
description?: string,
allowUserInput?: boolean,
multi?: boolean
}
Property | Required? | Type | Format | Default | Description | Example |
---|---|---|---|---|---|---|
type | required |
| PascalCase | none | The type of user data a credential has | "FirstNameCredential" |
mandatory | optional | enum | snake_case | "no" | Whether the credential is required, not required, or required if available (accepted values "yes" , "no" , and "if_available" ) | "if_available" |
children | optional | CredentialRequest[] | See CredentialRequest | none | List of child CredentialRequest s relative to the parent CredentialRequest | Child CredentialRequest s with type s "FirstNameCredential" and "LastNameCredential" relative to a parent CredentialRequest with type "FullNameCredential" |
description | optional | string | Sentence case | none | Text shown to the user on the form field corresponding to the credential | "We are required by federal regulation to collect your SSN" |
allowUserInput | optional | boolean | boolean | true | Whether to allow user input on the form field corresponding to the credential | false |
multi | optional | boolean | boolean | false | Whether the credential should contain multiple values if available | true |
- Hosted
- Semi-Hosted
- Non-Hosted
With the Hosted tab active above, your brand's integration type setting should be set to Hosted in the Dashboard. See Determine integration type if you need help deciding which type is right for you.
{
type: string,
mandatory?: "yes" | "no" | "if_available",
children?: CredentialRequest[],
description?: string,
allowUserInput?: boolean
}
Property | Required? | Type | Format | Default | Description | Example |
---|---|---|---|---|---|---|
type | required |
| PascalCase | none | The type of user data a credential has | "FirstNameCredential" |
mandatory | optional | enum | snake_case | "no" | Whether the credential is required, not required, or required if available (accepted values "yes" , "no" , and "if_available" ) | "if_available" |
children | optional | CredentialRequest[] | See CredentialRequest | none | List of child CredentialRequest s relative to the parent CredentialRequest | Child CredentialRequest s with type s "FirstNameCredential" and "LastNameCredential" relative to a parent CredentialRequest with type "FullNameCredential" |
description | optional | string | Sentence case | none | Text shown to the user on the form field corresponding to the credential | "We are required by federal regulation to collect your SSN" |
allowUserInput | optional | boolean | boolean | true | Whether to allow user input on the form field corresponding to the credential | false |
With the Semi-Hosted tab active above, your brand's integration type setting should be set to Semi-Hosted in the Dashboard. See Determine integration type if you need help deciding which type is right for you.
{
type: string,
mandatory?: "yes" | "no" | "if_available",
children?: CredentialRequest[],
multi?: boolean
}
Property | Required? | Type | Format | Default | Description | Example |
---|---|---|---|---|---|---|
type | required |
| PascalCase | none | The type of user data a credential has | "FirstNameCredential" |
mandatory | optional | enum | snake_case | "no" | Whether the credential is required, not required, or required if available (accepted values "yes" , "no" , and "if_available" ) | "if_available" |
children | optional | CredentialRequest[] | See CredentialRequest | none | List of child CredentialRequest s relative to the parent CredentialRequest | Child CredentialRequest s with type s "FirstNameCredential" and "LastNameCredential" relative to a parent CredentialRequest with type "FullNameCredential" |
multi | optional | boolean | boolean | false | Whether the credential should contain multiple values if available | true |
With the Non-Hosted tab active above, your brand's integration type setting should be set to Non-Hosted in the Dashboard. See Determine integration type if you need help deciding which type is right for you.
{
type: string,
mandatory?: "yes" | "no" | "if_available",
children?: CredentialRequest[],
multi?: boolean
}
Property | Required? | Type | Format | Default | Description | Example |
---|---|---|---|---|---|---|
type | required |
| PascalCase | none | The type of user data a credential has | "FirstNameCredential" |
mandatory | optional | enum | snake_case | "no" | Whether the credential is required, not required, or required if available (accepted values "yes" , "no" , and "if_available" ) | "if_available" |
children | optional | CredentialRequest[] | See CredentialRequest | none | List of child CredentialRequest s relative to the parent CredentialRequest | Child CredentialRequest s with type s "FirstNameCredential" and "LastNameCredential" relative to a parent CredentialRequest with type "FullNameCredential" |
multi | optional | boolean | boolean | false | Whether the credential should contain multiple values if available | true |
Example
- Hosted
- Semi-Hosted
- Non-Hosted
With the Hosted tab active above, your brand's integration type setting should be set to Hosted in the Dashboard. See Determine integration type if you need help deciding which type is right for you.
{
"type": "AddressCredential",
"children": [
{
"type": "Line1Credential",
"mandatory": "if_available",
"allowUserInput": false
},
{
"type": "Line2Credential",
"mandatory": "no",
"description": "Apt/Unit #"
"allowUserInput": true
},
{
"type": "CityCredential",
"mandatory": "if_available",
"allowUserInput": false
},
{
"type": "StateCredential",
"mandatory": "if_available",
"allowUserInput": false
},
{
"type": "ZipCodeCredential",
"mandatory": "if_available",
"allowUserInput": false
},
{
"type": "CountryCredential",
"mandatory": "if_available",
"allowUserInput": false
}
]
}
With the Semi-Hosted tab active above, your brand's integration type setting should be set to Semi-Hosted in the Dashboard. See Determine integration type if you need help deciding which type is right for you.
{
"type": "AddressCredential",
"multi": true,
"children": [
{
"type": "Line1Credential",
"mandatory": "if_available"
},
{
"type": "Line2Credential",
"mandatory": "no"
},
{
"type": "CityCredential",
"mandatory": "if_available"
},
{
"type": "StateCredential",
"mandatory": "if_available"
},
{
"type": "ZipCodeCredential",
"mandatory": "if_available"
},
{
"type": "CountryCredential",
"mandatory": "if_available"
}
]
}
With the Non-Hosted tab active above, your brand's integration type setting should be set to Non-Hosted in the Dashboard. See Determine integration type if you need help deciding which type is right for you.
{
"type": "AddressCredential",
"multi": true,
"children": [
{
"type": "Line1Credential",
"mandatory": "if_available"
},
{
"type": "Line2Credential",
"mandatory": "no"
},
{
"type": "CityCredential",
"mandatory": "if_available"
},
{
"type": "StateCredential",
"mandatory": "if_available"
},
{
"type": "ZipCodeCredential",
"mandatory": "if_available"
},
{
"type": "CountryCredential",
"mandatory": "if_available"
}
]
}
1ClickEntity
{
"identifiers": {
[identifierKey: string]: string
},
"credentials": {
[credentialKey: string]:
string // Single string value when `multi` is false and `children` isn't included in the credential requests
| [string] // Array of string values when `multi` is true and `children` isn't included in the credential requests
| Object // Single object value when `multi` is false and `children` is included in the credential requests
| [Object] // Array of object values when `multi` is true and `children` is included in the credential requests
},
"metadata": {
"identifiers": {
[identifierKey: string]: {
[metadataKey: string]: string
}
},
"credentials": {
[credentialKey: string]: {
// Follows the same structure as `credentials` and maintains the same order for array items when `multi` is set to `true`
[metadataKey: string]:
string // Single string value when `multi` is false and `children` isn't included in the credential requests
| [string] // Array of string values when `multi` is true and `children` isn't included in the credential requests
| Object // Single object value when `multi` is false and `children` is included in the credential requests
| [Object] // Array of object values when `multi` is true and `children` is included in the credential requests
}
}
}
}
Property | Type | Format | Description | Example |
---|---|---|---|---|
identifiers | Object | See above | User identifiers, keyed on identifierKey | See Example 1ClickEntity |
identifierKey |
| camelCase | The type of identifier | "phone" |
credentials | Object | See above | User credentials, keyed on credentialKey | See Example 1ClickEntity |
credentialKey |
| camelCase | The type of user data a credential has | "firstName" |
metadata | Object | See above | Metadata, keyed on metadataKey | See Example 1ClickEntity |
metadataKey |
| camelCase | Any additional data that's not a user's identity data (identifiers or credentials) | "verificationMethod" |
The data keyed on a credentialKey
will be one or more credential values. This data will have a type that depends on children
and multi
in the credential request:
- Based on
children
:-
If the credential request has
children
, each credential value will have typeObject
.Example: Credential Value of Type
Object
If the credential request has
children
:CredentialRequest with children{
"type": "AddressCredential",
"children": [
{
"type": "Line1Credential"
},
{
"type": "Line2Credential"
},
{
"type": "CityCredential"
},
{
"type": "StateCredential"
},
{
"type": "ZipCodeCredential"
},
{
"type": "CountryCredential"
}
]
}Then, the credential returned will have type
Object
(and so will the corresponding metadata):1ClickEntity for CredentialRequest with children{
...
"credentials": {
"address": {
"line1": "5320 Newell Rd",
"city": "Palo Alto",
"state": "CA",
"zipCode": "94303",
"country": "US"
}
},
"metadata": {
...
"credentials": {
"id": {
"address": {
"line1": "f5a4dc93-bc06-4bb8-bd05-17b5ba912bcd",
"city": "efd3820f-676a-4db1-b63e-695b66ed8ba0",
"state": "b65022a2-2016-41df-88f3-252e8e3a29c5",
"zipCode": "b747ff84-39d8-4df9-98f9-24a465f1a9ae",
"country": "d57a7bca-2a7c-4671-86ad-5647731cad02"
},
},
...
}
}
} -
If the credential request does not have
children
, each credential value will have typestring
.Example: Credential Value of Type
string
If the credential request does not have children:
CredentialRequest without children{
"type": "EmailCredential",
}Then, the credential returned will have type
string
(and so will the corresponding metadata):1ClickEntity for CredentialRequest without children{
...
"credentials": {
"email": "richard@piedpiper.net"
},
"metadata": {
...
"credentials": {
"id": {
"email": "8a1d4e35-413d-496b-b499-8810b55cfb5c"
},
...
}
}
}
-
- Based on
multi
:-
If the credential request has
multi
set totrue
, the data keyed oncredentialKey
will be an array of credential values.Example: Array of Credential Values
If the credential request has
multi
set totrue
:CredentialRequest with multi true, with children{
"type": "AddressCredential",
"children": [
{
"type": "Line1Credential"
},
{
"type": "Line2Credential"
},
{
"type": "CityCredential"
},
{
"type": "StateCredential"
},
{
"type": "ZipCodeCredential"
},
{
"type": "CountryCredential"
}
],
"multi": true
}CredentialRequest with multi true, without children{
"type": "EmailCredential",
"multi": true
}Then, the data returned will be an array of credential values, so it will have type
[Object]
or[string]
(and so will the corresponding metadata):1ClickEntity for CredentialRequest with multi true, with children{
...
"credentials": {
"address": [
{
"line1": "5320 Newell Rd",
"city": "Palo Alto",
"state": "CA",
"zipCode": "94303",
"country": "US"
},
{
"line1": "9536 Meadow Dr",
"line2": "Apt 301",
"city": "San Francisco",
"state": "CA",
"zipCode": "94112",
"country": "US"
},
...
],
},
"metadata": {
...
"credentials": {
"id": {
"address": [
{
"line1": "f5a4dc93-bc06-4bb8-bd05-17b5ba912bcd",
"city": "efd3820f-676a-4db1-b63e-695b66ed8ba0",
"state": "b65022a2-2016-41df-88f3-252e8e3a29c5",
"zipCode": "b747ff84-39d8-4df9-98f9-24a465f1a9ae",
"country": "d57a7bca-2a7c-4671-86ad-5647731cad02"
},
{
"line1": "6c7350bd-ea84-485b-baa8-fba3381cc859",
"line2": "5311e2c8-67a1-4fe4-8ddb-88dc8a900915",
"city": "c315d4ed-34c6-41a9-b7ca-c17cb4bac927",
"state": "e3774b5f-0996-4dc7-a9b3-8ad24c9a286c",
"zipCode": "abc2e42c-2864-4bf6-b262-05cb51416957",
"country": "fca7d486-c99b-436e-9a92-95e221e4ba5d"
},
...
],
},
...
}
}
}1ClickEntity for CredentialRequest with multi true, without children{
...
"credentials": {
"email": [
"richard@piedpiper.net",
"richard@hooli.com",
...
],
},
"metadata": {
...
"credentials": {
"id": {
"email": [
"8a1d4e35-413d-496b-b499-8810b55cfb5c",
"b82e39cf-3bb6-4105-b9c1-bfd1ed2a4dbc",
...
]
},
...
}
}
}Arrays May Be Single ValuedAn array of credential values may only include one value. If
multi
is set totrue
in a credential request, we'll return multiple values if we can source them (up to a maximum of 3). But if we can only source a single value, we'll still return it in an array, to ensure the data type is predictable.Multi Does Not Apply to Child Credential RequestsThe
multi
option does not work onchildren
credential requests. It only applies to the parent credential request. -
If the credential request has
multi
set tofalse
, the data keyed oncredentialKey
will be a single credential value.Example: Single Credential Value
If the credential request has
multi
set tofalse
:CredentialRequest with multi false, with children{
"type": "AddressCredential",
"children": [
{
"type": "Line1Credential"
},
{
"type": "Line2Credential"
},
{
"type": "CityCredential"
},
{
"type": "StateCredential"
},
{
"type": "ZipCodeCredential"
},
{
"type": "CountryCredential"
}
],
"multi": false
}CredentialRequest with multi false, without children{
"type": "EmailCredential",
"multi": false
}Then, the data returned will be a single credential value, so it will have type
Object
orstring
(and so will the corresponding metadata):1ClickEntity for CredentialRequest with multi false, with children{
...
"credentials": {
"address": {
"line1": "5320 Newell Rd",
"city": "Palo Alto",
"state": "CA",
"zipCode": "94303",
"country": "US"
}
},
"metadata": {
...
"credentials": {
"id": {
"address": {
"line1": "f5a4dc93-bc06-4bb8-bd05-17b5ba912bcd",
"city": "efd3820f-676a-4db1-b63e-695b66ed8ba0",
"state": "b65022a2-2016-41df-88f3-252e8e3a29c5",
"zipCode": "b747ff84-39d8-4df9-98f9-24a465f1a9ae",
"country": "d57a7bca-2a7c-4671-86ad-5647731cad02"
}
},
...
}
}
}1ClickEntity for CredentialRequest with multi false, without children{
...
"credentials": {
"email": "richard@piedpiper.net"
},
"metadata": {
...
"credentials": {
"id": {
"email": "8a1d4e35-413d-496b-b499-8810b55cfb5c"
},
...
}
}
}
-
Example
{
"identifiers": {
"phone": "+10123456789"
},
"credentials": {
// Multiple emails because `multi` was set to `true` in the email credential request
"email": [
"richard@piedpiper.net",
"richard@hooli.com"
],
"fullName": {
"firstName": "Richard",
"lastName": "Hendricks"
},
// Multiple addresses because `multi` was set to `true` in the address credential request
"address": [
{
"line1": "5320 Newell Rd",
"city": "Palo Alto",
"state": "CA",
"zipCode": "94303",
"country": "US"
},
{
"line1": "9536 Meadow Dr",
"line2": "Apt 301",
"city": "San Francisco",
"state": "CA",
"zipCode": "94112",
"country": "US"
},
{
"line1": "7292 Hanover St",
"city": "San Jose",
"state": "CA",
"zipCode": "95122",
"country": "US"
}
],
"birthDate": "1989-08-01",
"ssn": "123456789"
},
"metadata": {
"identifiers": {
"verificationMethod": {
"phone": "otp"
}
},
// Follows the same structure as `credentials` and maintains the same order for array items when `multi` is set to `true`
"credentials": {
"id": {
// e.g. Follows the same structure as the email credential and maintains the same order for array items
"email": [
"8a1d4e35-413d-496b-b499-8810b55cfb5c",
"b82e39cf-3bb6-4105-b9c1-bfd1ed2a4dbc"
]
"fullName": {
"firstName": "2e6a7b9a-e93e-43ba-98a9-c554f4e16457",
"lastName": "9a5817ef-e621-4277-8c48-c8ee3776b6c4"
},
// e.g. Follows the same structure as the address credential and maintains the same order for array items
"address": [
{
"line1": "f5a4dc93-bc06-4bb8-bd05-17b5ba912bcd",
"city": "efd3820f-676a-4db1-b63e-695b66ed8ba0",
"state": "b65022a2-2016-41df-88f3-252e8e3a29c5",
"zipCode": "b747ff84-39d8-4df9-98f9-24a465f1a9ae",
"country": "d57a7bca-2a7c-4671-86ad-5647731cad02"
},
{
"line1": "6c7350bd-ea84-485b-baa8-fba3381cc859",
"line2": "5311e2c8-67a1-4fe4-8ddb-88dc8a900915",
"city": "c315d4ed-34c6-41a9-b7ca-c17cb4bac927",
"state": "e3774b5f-0996-4dc7-a9b3-8ad24c9a286c",
"zipCode": "abc2e42c-2864-4bf6-b262-05cb51416957",
"country": "fca7d486-c99b-436e-9a92-95e221e4ba5d"
},
{
"line1": "afdaca85-4abe-4c0d-910d-7f48261bcbe0",
"city": "cf17d0d8-08f3-4205-82a9-812a0be747da",
"state": "b1480256-bd81-4ed5-a748-62890304a2e3",
"zipCode": "62d14d62-bd4e-4175-8a0d-01f21a22d833",
"country": "baff8fea-34cd-451c-9324-ca0cf1582dd7"
}
],
"birthDate": "ec1ef0ce-eeed-46a4-94a9-29b46e64403d",
"ssn": "ec1ef0ce-eeed-46a4-94a9-29b46e64403d"
},
"verificationMethod": {
"email": [
"self_attested",
"credit_bureau"
]
"fullName": {
"firstName": "phone_carrier",
"lastName": "phone_carrier"
},
"address": [
{
"line1": "credit_bureau",
"city": "credit_bureau",
"state": "credit_bureau",
"zipCode": "credit_bureau",
"country": "credit_bureau"
},
{
"line1": "credit_bureau",
"line2": "credit_bureau",
"city": "credit_bureau",
"state": "credit_bureau",
"zipCode": "credit_bureau",
"country": "credit_bureau"
},
{
"line1": "phone_carrier",
"city": "phone_carrier",
"state": "phone_carrier",
"zipCode": "phone_carrier",
"country": "phone_carrier"
}
],
"birthDate": "phone_carrier",
"ssn": "phone_carrier"
},
"status": {
"email": [
"valid",
"valid"
],
"fullName": {
"firstName": "valid",
"lastName": "valid"
},
"address": [
{
"line1": "valid",
"city": "valid",
"state": "valid",
"zipCode": "valid",
"country": "valid"
},
{
"line1": "valid",
"line2": "valid",
"city": "valid",
"state": "valid",
"zipCode": "valid",
"country": "valid"
},
{
"line1": "valid",
"city": "valid",
"state": "valid",
"zipCode": "valid",
"country": "valid"
}
],
"birthDate": "valid",
"ssn": "valid"
},
"expirationDate": {
"email": [
"1871839024044",
"1885082680000"
],
"fullName": {
"firstName": "1871839024044",
"lastName": "1871839024044"
},
"address": [
{
"line1": "1871839024044",
"city": "1871839024044",
"state": "1871839024044",
"zipCode": "1871839024044",
"country": "1871839024044"
},
{
"line1": "1871839024044",
"line1": "1871839024044",
"city": "1871839024044",
"state": "1871839024044",
"zipCode": "1871839024044",
"country": "1871839024044"
},
{
"line1": "1875924280000",
"city": "1875924280000",
"state": "1875924280000",
"zipCode": "1875924280000",
"country": "1875924280000"
},
],
"birthDate": null,
"ssn": null
}
}
}
}
RiskSignals
Risk signals are optional metadata fields that we can enable for extra cost. To enable them, please ask your Verified support representative or email us at Support@Verified.inc.
See Risk Signals on the Data page for details about each attribute.
{
"overall": {
"score": integer, // always enabled
"level": "low" | "medium-low" | "medium" | "medium-high" | "high", // always enabled
"recommendation": "allow" | "flag" | "block", // always enabled
"reasonCodes": [string] // add on (ask Verified support to enable)
},
"phone": { // add on (ask Verified support to enable)
"carrier": {
"id": integer,
"name": string
}
"reasonCodes": [string]
},
"email": { // add on (ask Verified support to enable)
"reasonCodes": [string]
}
}
When enabled, the risk signals appear in identifiers metadata in a 1ClickEntity
and in an error for the OCE017
error code:
{
...
"metadata": {
"identifiers": {
"riskSignals": RiskSignals,
...
},
...
}
}
{
"name": "BadRequest",
"message": "1-Click Blocked: Risk Score Too High",
"code": 400,
"className": "bad-request",
"data": {
"errorCode": "OCE017",
"riskSignals": RiskSignals
}
}
Example
{
...
"metadata": {
"identifiers": {
...
"riskSignals": {
"overall": {
"score": 0, // always enabled
"level": "low", // always enabled
"recommendation": "allow", // always enabled
"reasonCodes": [ // add on (ask Verified support to enable)
"OCR10021"
]
},
"phone": { // add on (ask Verified support to enable)
"carrier": {
"id": 0,
"name": "Example Carrier"
}
"reasonCodes": [
"OCR20004",
"OCR20005",
"OCR20007",
"OCR20101"
]
},
"email": { // add on (ask Verified support to enable)
"reasonCodes": [
"OCR60001",
"OCR60002"
]
}
}
},
...
}
}
Error
{
"name": string,
"message": string,
"code": number,
"className": string,
"data": {
"errorCode": string
}
}
Property | Type | Format | Description | Example |
---|---|---|---|---|
name | string | PascalCase | Name of the error | "BadRequest" |
message | string | Sentence case | Message for developer that explains the error | "Additional information is required to source data for user: birthDate" |
code | number | 3 digits (0-9) | HTTP response status code | 400 |
className | string | kebab-case | Class of error | bad-request |
data.errorCode |
| 3 letters and 3 digits (0-9) | Verified error code | "OCE011" |
data.riskSignals | RiskSignals | Object | Verified risk signals associated with the 1-Click Signup event | See RiskSignals example) |
Example
{
"name": "BadRequest",
"message": "1-Click Blocked: Risk Score Too High",
"code": 400,
"className": "bad-request",
"data": {
"errorCode": "OCE017",
"riskSignals": {
"overall": {
"score": 0, // always enabled
"level": "low", // always enabled
"recommendation": "allow", // always enabled
"reasonCodes": [ // add on (ask Verified support to enable)
"OCR10021"
]
},
"phone": { // add on (ask Verified support to enable)
"carrier": {
"id": 0,
"name": "Example Carrier"
}
"reasonCodes": [
"OCR20004",
"OCR20005",
"OCR20007",
"OCR20101"
]
},
"email": { // add on (ask Verified support to enable)
"reasonCodes": [
"OCR60001",
"OCR60002"
]
}
}
}
}