Errors
Firewall Errors
You will get a network error if your API request is blocked by our firewall.
Generic
| HTTP Status Code | 403 |
|---|
{
"error": "Request blocked by firewall",
"message": "Your request was blocked by our firewall. Please contact us if you believe this was in error."
}
API Key Used Client Side
| HTTP Status Code | 418 |
|---|
{
"error": "Request blocked by firewall",
"message": "Your request was blocked by our firewall because your API key is being used client side. Verified API keys must only be used server side. Please contact us if you believe this was in error."
}
Never use Verified API keys client side. Only use them server side. Verified API keys allow you to source sensitive data about users, so you must keep them secure. If you use a Verified API key client side, our firewall will block your request, and you'll get this firewall error.
Rate Limit
| HTTP Status Code | 429 |
|---|
{
"error": "Request blocked by firewall",
"message": "Your request was blocked by our firewall due to abnormally high request volume. Please contact us if you believe this was in error."
}
Application Errors
1-Click Signup
To handle application level errors (returned by Verified API endpoints) for 1-Click Signup, we recommend that you primarily use the response body's data.errorCode, which is a Verified specific error code. See Verified Error Codes below for descriptions of what each code means.
Error Type
This definition is also in Error in Types.
{
name: string,
message: string,
code: number,
className: string,
data: {
errorCode?: string,
additionalInputs?: [string], // only for error code OCE011
inputAttemptsExceeded?: [string], // only for error code OCE019
identifiers?: {
[identifierKey: string]: string
},
verificationMethod?: {
[identifierKey: string]: string
},
riskSignals?: RiskSignals // only for error codes OCE011, OCE012, OCE013, OCE017, and OCE019
attemptsRemaining?: integer, // only for OCV error codes
expiresAt?: integer // only for OCV error codes
}
}
| 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.additionalInputs | [string] | camelCase | Additional inputs to source credentials for user, where multiple values indicates inclusive OR (only included for OCE011) | ["birthDate", "ssn4"] |
data.inputAttemptsExceeded | [string] | camelCase | Input(s) for which the attempts limit (3 for each input) has been exceeded (only included for OCE019) | ["birthDate", "ssn4"] |
data.identifiers | object | camelCase | Identifiers includede in the request | ["birthDate", "ssn4"] |
data.verificationMethod | object | camelCase | Verification method for identifiers includede in the request | ["birthDate", "ssn4"] |
identifierKey |
| camelCase | The type of identifier | "phone" |
data.riskSignals | RiskSignals | object | Verified risk signals associated with the 1-Click Signup event (only included for OCE011, OCE012, OCE013, OCE017, and OCE019) | See RiskSignals example |
data.atteptsRemaining | integer | Any number of digits (0-9) | How many verification attempts the user has remaining | 3 |
data.expiresAt | integer | Unix time (milliseconds) | When the verification expires (meaning it can no longer succeed) | 1760053995000 |
Example
{
"name": "BadRequest",
"message": "Additional information is required to source data for user: birthDate, ssn4"
"code": 400,
"className": "bad-request",
"data": {
"errorCode": "OCE011",
"additionalInputs": ["birthDate", "ssn4"], // inclusive OR: can pass either or both in next call
"identifiers": {
"phone": "+12125550010",
"email": "richard@piedpiper.com"
},
"verificationMethod": {
"phone": "otp",
"email": "otp"
},
"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"
]
}
}
}
}
Verified Error Codes
An errorCode is a Verified specific error code consisting of 3 letters and 3 numbers:
- Codes that begin with
ERRare generic. - Codes that begin with
SKEare specific to the/client/1-clickpath, which creates a session key for use in the Verified client SDK. (SKErefers to a Session Key Error.) - Codes that begin with
OCEare specific to 1-Click Signup: the/1-clickpath. (OCErefers to a One Click Error.)
Most Common Errors
SKE001
|
|
|---|
This error is only returned if your brand's integration type setting is set to SDK in the Dashboard. See Integration Type in the Setup guide for more information about integration types.
SKE002
|
|
|---|---|
| "phone" is required |
This error is only returned if your brand's integration type setting is set to SDK in the Dashboard. See Integration Type in the Setup guide for more information about integration types.
OCE011
|
|
|---|---|
|
|
|
|
|
|
|
The inputs included in message and data.additionalInputs is a comma separated list of additional information.
Multiple values always indicate an inclusive OR: that is, you can pass one or more of the additional inputs. You do not need to pass all of the additional inputs included in the list!
For example, if inputs is birthDate, ssn4, you can pass either the user's birth date or their SSN4 (or both). We always recommend passing just one first because both are required only very rarely and, if they are both required, you will get another OCE011 error code indicating that the other one is required.
Currently inputs will always include one of more of birth date, SSN4, and first name — see the examples below.
We recommend using birth date over SSN4 when possible because:
- Users are typically more comfortable providing their birthday.
- Some users will have an autofill option for birthday from their browser or OS.
- Everyone has a birthday, but not everyone has an SSN.
{
...
"message": "Additional information is required to source data for user: birthDate"
...
"data": {
"errorCode": "OCE011",
"additionalInputs": ["birthDate"],
...
}
}
{
...
"message": "Additional information is required to source data for user: birthDate, fullName.firstName"
...
"data": {
"errorCode": "OCE011",
"additionalInputs": ["birthDate", "fullName.firstName"], // inclusive OR: can pass one or more in next call
...
}
}
{
...
"message": "Additional information is required to source data for user: birthDate, fullName.firstName, ssn4"
...
"data": {
"errorCode": "OCE011",
"additionalInputs": ["birthDate", "fullName.firstName", "ssn4"], // inclusive OR: can pass one or more in next call
...
}
}
OCE012
|
|
|---|---|
|
|
|
|
|
{
...
"message": "BirthDate mismatch."
...
"data": {
"errorCode": "OCE012",
...
}
}
{
...
"message": "BirthDate mismatch and FirstName mismatch."
...
"data": {
"errorCode": "OCE012",
...
}
}
OCE013
|
|
|---|---|
|
|
|
|
|
See Risk Signals and Verification Method metadata for more information.
OCE017
|
|
|---|---|
|
|
|
|
|
See Risk Signals and Verification Method metadata for more information.
OCE019
|
|
|---|---|
|
|
|
|
|
|
|
The inputs included in data.inputAttemptsExceeded is a comma separated list of inputs for which the attempts limit has been exceeded.
Currently inputs will always include one of more of birth date, SSN4, and first name — see the examples below. The attempts limit for either type of input is 3 unique values within 30 minutes.
{
...
"message": "Maximum input attempts exceeded. Please try again later."
...
"data": {
"errorCode": "OCE019",
"inputAttemptsExceeded": ["birthDate"],
...
}
}
{
...
"message": "Maximum input attempts exceeded. Please try again later."
...
"data": {
"errorCode": "OCE019",
"inputAttemptsExceeded": ["ssn4"],
...
}
}
{
...
"message": "Maximum input attempts exceeded. Please try again later."
...
"data": {
"errorCode": "OCE019",
"inputAttemptsExceeded": ["birthDate", "ssn4"],
...
}
}
OCE020
|
|
|---|---|
|
|
|
|
OCE021
|
|
|---|---|
|
|
|
|
See Verification Method metadata for more information.
All Errors
ERR001
|
|
|---|
OCE001
|
|
|---|
OCE002
|
|
|---|
Phone identifiers (which are passed as inputs to the Verified API) must be in E.164 format: for example, "+12125550010". 1-Click Signup currently only supports US phone numbers (ones that start with country code +1).
OCE003
|
|
|---|
OCE004
|
|
|---|
OCE005
|
|
|---|
OCE006
|
|
|---|
OCE007
|
|
|---|
You'll only get this error if you set mandatory to yes in the credential request for a credential. (Generally, you'd do this for the default credential requests defined for your brand in the Dashboard, though you can also set it at the code level per API request.) We don't recommend doing this because it will prevent any credential data from being returned. In other words, if we can't source data for a mandatory credential, we won't return data for any credentials.
Instead, for mandatory we recommend using if_available or no. Then, if we can't source data for that credential, we'll still return data for other credentials. There's only a difference between those two options if your brand's integration type setting is set to SDK in the Dashboard, in which case if_available still marks the credential field as required, whereas no marks it as optional. See Integration Type in the Setup guide for more information about integration types.
OCE008
|
|
|---|---|
|
|
|
|
This error is only returned if your brand's integration type setting is set to Semi-Hosted (in v2.0) in the Dashboard. See Integration Type in the Setup guide for more information about integration types.
Verification codes expire after 5 minutes.
OCE009
|
|
|---|---|
|
|
|
|
This error is only returned if your brand's integration type setting is set to Semi-Hosted (in v2.0) in the Dashboard. See Integration Type in the Setup guide for more information about integration types.
OCE010
|
|
|---|---|
|
|
|
|
OCE011
|
|
|---|---|
|
|
|
|
|
|
|
The inputs included in message and data.additionalInputs is a comma separated list of additional information.
Multiple values always indicate an inclusive OR: that is, you can pass one or more of the additional inputs. You do not need to pass all of the additional inputs included in the list!
For example, if inputs is birthDate, ssn4, you can pass either the user's birth date or their SSN4 (or both). We always recommend passing just one first because both are required only very rarely and, if they are both required, you will get another OCE011 error code indicating that the other one is required.
Currently inputs will always include one of more of birth date, SSN4, and first name — see the examples below.
We recommend using birth date over SSN4 when possible because:
- Users are typically more comfortable providing their birthday.
- Some users will have an autofill option for birthday from their browser or OS.
- Everyone has a birthday, but not everyone has an SSN.
{
...
"message": "Additional information is required to source data for user: birthDate"
...
"data": {
"errorCode": "OCE011",
"additionalInputs": ["birthDate"],
...
}
}
{
...
"message": "Additional information is required to source data for user: birthDate, fullName.firstName"
...
"data": {
"errorCode": "OCE011",
"additionalInputs": ["birthDate", "fullName.firstName"], // inclusive OR: can pass one or more in next call
...
}
}
{
...
"message": "Additional information is required to source data for user: birthDate, fullName.firstName, ssn4"
...
"data": {
"errorCode": "OCE011",
"additionalInputs": ["birthDate", "fullName.firstName", "ssn4"], // inclusive OR: can pass one or more in next call
...
}
}
OCE012
|
|
|---|---|
|
|
|
|
|
{
...
"message": "BirthDate mismatch."
...
"data": {
"errorCode": "OCE012",
...
}
}
{
...
"message": "BirthDate mismatch and FirstName mismatch."
...
"data": {
"errorCode": "OCE012",
...
}
}
OCE013
|
|
|---|---|
|
|
|
|
|
See Risk Signals and Verification Method metadata for more information.
OCE014
|
|
|---|
1-Click requests expire in 60 minutes.
OCE015
|
|
|---|---|
|
|
|
|
1-Click requests expire in 60 minutes.
OCE016
1-Click Conflict Request for Phone Number
|
|
|---|
This error indicates a conflict due to the phone number being used in multiple 1-Click Signup requests simultaneously.
OCE017
|
|
|---|---|
|
|
|
|
|
See Risk Signals and Verification Method metadata for more information.
OCE018
|
|
|---|---|
|
|
|
|
This error is only returned if your brand's integration type setting is set to Semi-Hosted (in v2.0) in the Dashboard. See Integration Type in the Setup guide for more information about integration types.
The maximum number of verification code attempts is 3.
OCE019
|
|
|---|---|
|
|
|
|
|
|
|
The inputs included in data.inputAttemptsExceeded is a comma separated list of inputs for which the attempts limit has been exceeded.
Currently inputs will always include one of more of birth date, SSN4, and first name — see the examples below. The attempts limit for either type of input is 3 unique values within 30 minutes.
{
...
"message": "Maximum input attempts exceeded. Please try again later."
...
"data": {
"errorCode": "OCE019",
"inputAttemptsExceeded": ["birthDate"],
...
}
}
{
...
"message": "Maximum input attempts exceeded. Please try again later."
...
"data": {
"errorCode": "OCE019",
"inputAttemptsExceeded": ["ssn4"],
...
}
}
{
...
"message": "Maximum input attempts exceeded. Please try again later."
...
"data": {
"errorCode": "OCE019",
"inputAttemptsExceeded": ["birthDate", "ssn4"],
...
}
}
1-Click Health
1-Click Health errors are returned via errors in a 1ClickHealthEntity.
1-Click Verify
Limits
| Name | Value | Description |
|---|---|---|
| Verification Message Expiration | 5 minutes | Time before a verification message (for example containing a verification code) expires |
| Verification Deletion | 24 hours | Time before a 1ClickVerificationEntity is deleted |
| Maximum Verification Attempts | 3 | Maximum number of times a user can attempt to verify, for a given verification flow |
| Maximum Verification Message Deliveries | 3 | Maximum number of times a verification message can be delivered, for a given verification flow |
Verified Error Codes
An errorCode is a Verified specific error code consisting of 3 letters and 3 numbers:
- Codes that begin with
ERRare generic. - Codes that begin with
OCVare specific to 1-Click Verify: the/1-click/verificationspath. (OCVrefers to One Click Verify.)
OCV001
|
|
|---|---|
|
|
|
|
OCV002
|
|
|---|---|
|
|
|
|
OCV003
|
|
|---|---|
|
|
|
|
OCV004
|
|
|---|---|
|
|
|
|
OCV005
|
|
|---|
OCV006
|
|
|---|
OCV007
|
|
|---|---|
|
|
|
|
OCV008
|
|
|---|