Skip to main content

Errors

Firewall Errors

You will get a network error if your API request is blocked by our firewall.

Generic

HTTP Status Code403
Firewall Error: 418 (Generic)
{
"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 Code418
Firewall Error: API Key Used Client Side
{
"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."
}
danger

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 Code429
Firewall Error: 429 (Rate Limit)
{
"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.

Error Type
{
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
}
}
PropertyTypeFormatDescriptionExample
namestringPascalCaseName of the error"BadRequest"
messagestringSentence caseMessage for developer that explains the error"Additional information is required to source data for user: birthDate"
codenumber3 digits (0-9)HTTP response status code400
classNamestringkebab-caseClass of errorbad-request
data.errorCode
enum

See Error Codes for possible values

3 letters and 3 digits (0-9)Verified error code"OCE011"
data.additionalInputs[string]camelCaseAdditional inputs to source credentials for user, where multiple values indicates inclusive OR (only included for OCE011)["birthDate", "ssn4"]
data.inputAttemptsExceeded[string]camelCaseInput(s) for which the attempts limit (3 for each input) has been exceeded (only included for OCE019)["birthDate", "ssn4"]
data.identifiersobjectcamelCaseIdentifiers includede in the request["birthDate", "ssn4"]
data.verificationMethodobjectcamelCaseVerification method for identifiers includede in the request["birthDate", "ssn4"]
identifierKey
enum

Possible values (see identifiers for details):

  • phone
  • email
camelCaseThe type of identifier"phone"
data.riskSignalsRiskSignalsobjectVerified risk signals associated with the 1-Click Signup event (only included for OCE011, OCE012, OCE013, OCE017, and OCE019)See RiskSignals example
data.atteptsRemainingintegerAny number of digits (0-9)How many verification attempts the user has remaining3
data.expiresAtintegerUnix time (milliseconds)When the verification expires (meaning it can no longer succeed)1760053995000
Example
Error 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 ERR are generic.
  • Codes that begin with SKE are specific to the /client/1-click path, which creates a session key for use in the Verified client SDK. (SKE refers to a Session Key Error.)
  • Codes that begin with OCE are specific to 1-Click Signup: the /1-click path. (OCE refers to a One Click Error.)
Most Common Errors
SKE001

message

"Brand cannot be used for SDK. Its integration type must be 'SDK'."

note

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.

When This Is Returned
When an API key used to call POST /client/1-click (to create a session key for initializing the SDK) is for a brand whose integration type is not set to SDK.
How to Handle
Change the brand's integration type setting to SDK in the Dashboard (or create a new brand), and then try again.

SKE002

message

"Error resolving data"

data.phone

"phone" is required

note

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.

When This Is Returned
When an API key used to call POST /client/1-click (to create a session key for initializing the SDK) is for a brand whose phoneVerificationType isbyCustomer, the phone number must be included in the request body.
How to Handle
Include a phone number in the request body.

OCE011

message

"Additional information is required to source data for user: {inputs}"

data.additionalInputs

[inputs]

data.identifiers

{ [identifierType: string]: string }

data.verificationMethod

{ [identifierType: string]: string }

data.riskSignals

RiskSignals

When This Is Returned
When additional information is required to source verified user data through 1-Click Signup.
How to Handle
Prompt the user to input the additional information, and then call the Verified API again.
Inclusive OR

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.

tip

We recommend using birth date over SSN4 when possible because:

  1. Users are typically more comfortable providing their birthday.
  2. Some users will have an autofill option for birthday from their browser or OS.
  3. Everyone has a birthday, but not everyone has an SSN.
Example: Birth Date Only
{
...
"message": "Additional information is required to source data for user: birthDate"
...
"data": {
"errorCode": "OCE011",
"additionalInputs": ["birthDate"],
...
}
}
Example: Birth Date and First Name
{
...
"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
...
}
}
Example: Birth Date, First Name and SSN4
{
...
"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." | "SSN4 mismatch." | "FirstName mismatch." | "BirthDate mismatch and SSN4 mismatch." | "BirthDate mismatch and FirstName mismatch." | "SSN4 mismatch and FirstName mismatch." | "BirthDate mismatch and SSN4 mismatch and FirstName mismatch.""

data.identifiers

{ [identifierType: string]: string }

data.verificationMethod

{ [identifierType: string]: string }

data.riskSignals

RiskSignals

When This Is Returned
When the inputted birth date or SSN4 (or both) does not match Verified records.
How to Handle
Prompt the user to try again or confirm that the value they provided is accurate. If they confirm, fall back to a manual signup flow.
Sandbox Validation

In Sandbox, you need to do the following to pass validation:

  • If you use birthDate, use a value of "1989-08-01".
  • If you use ssn4, use a value of "6789".

If you use other values, you'll get the OCE012 error code, which indicates that there's a mismatch.

Example: Birth Date Only
{
...
"message": "BirthDate mismatch."
...
"data": {
"errorCode": "OCE012",
...
}
}
Example: Birth Date and First Name
{
...
"message": "BirthDate mismatch and FirstName mismatch."
...
"data": {
"errorCode": "OCE012",
...
}
}

OCE013

message

"No credentials found"

data.identifiers

{ [identifierType: string]: string }

data.verificationMethod

true

data.riskSignals

RiskSignals

When This Is Returned
When Verified is unable to source data for a user.
How to Handle
Fall back to a manual signup flow.

See Risk Signals and Verification Method metadata for more information.


OCE017

message

"1-Click Blocked: Risk Score Too High"

data.identifiers

{ [identifierType: string]: string }

data.verificationMethod

true

data.riskSignals

RiskSignals

When This Is Returned
When Verified blocks returning data for a user because the risk score is too high (over 600).
How to Handle
Reject the user or flag them and fall back to a manual signup flow.

See Risk Signals and Verification Method metadata for more information.


OCE019

message

"Maximum input attempts exceeded. Please try again later."

data.inputAttemptsExceeded

[inputs]

data.identifiers

{ [identifierType: string]: string }

data.verificationMethod

{ [identifierType: string]: string }

data.riskSignals

RiskSignals

When This Is Returned
When the maximum number of birth date attempts has been exceeded.
How to Handle
Consider flagging or restricting the phone number associated with the user, so a bad actor cannot keep trying new birth date values.

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.

Example: Birth Date Only
{
...
"message": "Maximum input attempts exceeded. Please try again later."
...
"data": {
"errorCode": "OCE019",
"inputAttemptsExceeded": ["birthDate"],
...
}
}
Example: SSN4 Only
{
...
"message": "Maximum input attempts exceeded. Please try again later."
...
"data": {
"errorCode": "OCE019",
"inputAttemptsExceeded": ["ssn4"],
...
}
}
Example: Both Birth Date and SSN4
{
...
"message": "Maximum input attempts exceeded. Please try again later."
...
"data": {
"errorCode": "OCE019",
"inputAttemptsExceeded": ["birthDate", "ssn4"],
...
}
}

OCE020

message

"Brand cannot be used for 1-Click API"

data.identifiers

{ [identifierType: string]: string }

data.verificationMethod

{ [identifierType: string]: string }

When This Is Returned
If the integration type is SDK and the customer attempts to call POST /1-click with phone in the request body.
How to Handle
Create a new brand with the integrationType set to API in the Dashboard, then try the request again.

OCE021

message

"User Opted Out"

data.identifiers

{ [identifierType: string]: string }

data.verificationMethod

{ [identifierType: string]: string }

When This Is Returned
When the user has opted out of the 1-Click Signup flow in the SDK.
How to Handle
Request GET /1-click/:identityUuid endpoint using identityUuid to retrieve the metadata. Learn how to use the metadata here.

See Verification Method metadata for more information.

All Errors

1-Click Health

1-Click Health errors are returned via errors in a 1ClickHealthEntity.

1-Click Verify

Limits

NameValueDescription
Verification Message Expiration5 minutesTime before a verification message (for example containing a verification code) expires
Verification Deletion24 hoursTime before a 1ClickVerificationEntity is deleted
Maximum Verification Attempts3Maximum number of times a user can attempt to verify, for a given verification flow
Maximum Verification Message Deliveries3Maximum 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 ERR are generic.
  • Codes that begin with OCV are specific to 1-Click Verify: the /1-click/verifications path. (OCV refers to One Click Verify.)
OCV001

message

"Invalid or expired verification code"

data.attemptsRemaining

integer

data.expiresAt

integer

When This Is Returned
When the user submitted verification code is invalid or expired.
How to Handle
If there are attempts remaining, resend the verification message. Otherwise, start a new verification flow.

OCV002

message

"Maximum verification attempts exceeded"

data.attemptsRemaining

0

data.expiresAt

integer

When This Is Returned
When the user submitted verification code has been tried too many times.
How to Handle
Start a new verification flow.

OCV003

message

"Cannot resend code for this verification"

data.attemptsRemaining

integer

data.expiresAt

integer

When This Is Returned
When the verification message cannot be delivered again because the verification status is verified, expired, or failed.
How to Handle
Start a new verification flow.

OCV004

message

"Maximum send attempts exceeded"

data.attemptsRemaining

integer

data.expiresAt

integer

When This Is Returned
When the verification message has been delivered too many times.
How to Handle
Start a new verification flow.

OCV005

message

"Verification not found"

When This Is Returned
When the 1-Click Verification has been deleted.
How to Handle
Start a new verification flow.

OCV006

message

"Unsupported channel"

When This Is Returned
When the channel submitted is not supported.
How to Handle
Start a new verification flow with a supported channel.

OCV007

message

"Verification expired"

data.attemptsRemaining

0

data.expiresAt

integer

When This Is Returned
When the 1-Click Verification has expired.
How to Handle
Start a new verification flow.

OCV008

message

"Autofill failed"

When This Is Returned
When the autofill channel fails for any reason.
How to Handle
Start a new verification flow with the SMS channel.