Endpoints
Postman API documentation is available at https://api.docs.verified.inc.
Please do all development work and testing against our Sandbox environment, which returns mock data. You can use our Production environment when you're ready to go live.
Client SDK
POST /client/1-click
Create a (one time use) session key for the client SDK
| Method | POST |
|---|---|
| Path | /client/1-click |
This endpoint is only relevant if you're using the SDK integration type.
Request
{
verificationUuid?: string,
phone?: string,
email?: string,
birthDate?: string,
ssn4?: string,
fullName?: {
firstName?: string,
middleName?: string,
lastName?: string
},
address?: {
line1?: string,
line2?: string,
city?: string,
state?: string,
zipCode?: string,
country?: string
}
}
| Property | Required? | Type | Format | Default | Description | Example |
|---|---|---|---|---|---|---|
verificationUuid | Optional | string | Version 4 UUID | - | Unique identifier for a 1ClickVerificationEntity that can be passed to the SDK to skip the phone entry and verification steps | "487246b0-e68c-451d-be8e-45cea0b1c7a2" |
phone | Optional | string | E.164 | - | User's phone number (in E.164 format) | "+12125550010" |
email | Optional | string | - | User's email address | "richard@piedpiper.net" | |
birthDate | Optional | string | yyyy-MM-dd | - | User's birth date (in Sandbox, this must be "1989-08-01" to pass validation) | "1989-08-01" |
ssn4 | Optional | string | 4 digits (0-9) | - | Last 4 digits of user's Social Security Number (in Sandbox, this must be "6789" to pass validation) | "6789" |
fullName | Optional | object | Object with keys for one or more child credentials listed below | - | Full name | |
↳ fullName.firstName | Optional but Required with fullName | string | cAse inSensiTive | - | First name | "Richard" |
↳ fullName.middleName | Optional | string | cAse inSensiTive | - | Middle name | "Harrison" |
↳ fullName.lastName | Optional | string | cAse inSensiTive | - | Last name | "Hendricks" |
address | Optional | object | Object with keys for one or more child credentials listed below | - | Address | |
↳ address.line1 | Optional | string | cAse inSensiTive | - | Line 1 of address | "5320 Newell Rd" |
↳ address.line2 | Optional | string | cAse inSensiTive | - | Line 2 of address | "" |
↳ address.city | Optional | string | cAse inSensiTive | - | City of address | "Palo Alto" |
↳ address.state | Optional | string |
| - | State of address |
|
↳ address.zipCode | Optional | string | - | ZIP Code of address |
| |
↳ address.country | Optional | string |
| - | Country of address |
|
If you don't have a user's phone number yet, call POST /client/1-click with an empty request body, and the SDK will prompt the user to enter their phone number.
Response
{
sessionKey: string
}
| Property | Type | Format | Description | Example |
|---|---|---|---|---|
sessionKey | string | Version 4 UUID | Session key that can be used (one time only) to initialize the SDK | "86227634-bd2e-479d-9541-2c8e7e2e1f6d" |
1-Click Verify
GET /1-click/verifications/device-ip
Get the IP address of a user's device
| Method | GET |
|---|---|
| Path | /1-click/verifications/device-ip |
Request
Call:
GET /1-click/verifications/device-ip
client side, from the user's device.
Unlike most Verified API endpoints, this is a public, unauthenticated endpoint. (Don't use your Verified API key, which you must only use server side.)
You should call this endpoint from the user's device, NOT your server, so that it returns the user's device IP address, which you can use with other endpoints.
Response
{
deviceIp: string
}
| Property | Type | Format | Description | Example |
|---|---|---|---|---|
deviceIp | string | IPv6 address | The IP address of the user's device | ::121:2555:0010 |
GET /1-click/verifications/channels
Check the availability of 1-Click Verify channels
| Method | GET |
|---|---|
| Path | /1-click/verifications/channels?deviceIp={deviceIp} |
Request
Call:
GET /1-click/verifications/channels?deviceIp={deviceIp}
- For the
{deviceIp}query parameter value:- Use the IP address of the user's device returned by
GET /1-click/verifications/device-ip.
- Use the IP address of the user's device returned by
Response
{
channels: {
autofill: {
available: boolean, // = brandApproved && deviceIpEligible
brandApproved: boolean,
deviceIpEligible: boolean
},
silent: {
available: boolean, // = brandApproved && deviceIpEligible
brandApproved: boolean,
deviceIpEligible: boolean
},
sms: {
available: boolean, // = brandApproved, currently
brandApproved: boolean
},
// Coming soon
// email: {
// available: boolean, // = brandApproved, currently
// brandApproved: boolean
// }
}
}
| Property | Type | Format | Description | Example |
|---|---|---|---|---|
channels | object | Object with keys for all channels | Availability for all channels | - |
channels.autofill | object | Object with keys for autofill channel | Availability for the autofill channel | |
channels.autofill.available | boolean | - | Whether the autofill channel is available (= brandApproved && deviceIpEligible) | true |
channels.autofill.brandApproved | boolean | - | Whether your brand is approved for the autofill channel | true |
channels.autofill.deviceIpEligible | boolean | - | Whether the user's device IP is eligible for the autofill channel | true |
channels.sms | object | Object with keys for SMS channel | Availability for the SMS channel | |
channels.sms.available | boolean | - | Whether the SMS channel is available | true |
channels.email | object | Object with keys for email channel | Availability for the email channel | |
channels.email.available | boolean | - | Whether the email channel is available | true |
POST /1-click/verifications
Begin a verification flow
| Method | POST |
|---|---|
| Path | /1-click/verifications |
Request
{
channel: "autofill" | "silent" | "sms", // email coming soon
deviceIp?: string, // required for autofill and silent channels
phone?: string // required for silent and SMS channels, or if wanting to match user input to autofill output
}
| Property | Required? | Type | Format | Default | Description | Example |
|---|---|---|---|---|---|---|
channel | Required |
| snake_case | - | Channel used for verification | "autofill" |
deviceIp | Optional but Required if channel is "autofill" or "silent" | string | IPv6 address | - | IP address of user's device | "::121:2555:0010" |
phone | Optional but Required if channel is "silent" or "sms" | string | E.164 | - | User's phone number (in E.164 format) | "+12125550010" |
Response
When channel is set to autofill or silent, the response will be an HTTP 302 redirect and a Location header with a URL value. You should pass this URL to your client, on the user's device, and handle it as described in the 1-Click Verify API Integration guide, for autofill and for silent. The end result will be as shown below.
Then channel is set to sms, the response body is directly as shown below.
{
...1ClickVerificationEntity // includes phone and verified status if autofill succeeds (and matches phone input if provided)
}
Here's an example with a verified status from the autofill channel:
{
"uuid": "6232bdb2-5b92-405a-bf39-6147aef70ac1",
"phone": "+12125550010",
"channel": "autofill",
"status": "verified",
"verified": true,
"createdAt": 1760053690000,
"expiresAt": 1760053990000,
"attemptsRemaining": 3
}
Here's an example with a pending status from the SMS channel:
{
"uuid": "f5251850-496c-48cf-a4bd-d9d5ace22689",
"phone": "+12125550010",
"channel": "sms",
"format": "linkAndCode",
"status": "pending",
"verified": false,
"createdAt": 1760053695000,
"expiresAt": 1760053995000,
"attemptsRemaining": 3
}
POST /1-click/verifications/{uuid}/deliver
Deliver a verification message
| Method | POST |
|---|---|
| Path | /1-click/verifications/{uuid}/deliver |
Request
{
format?: "code" | "link" | "codeAndLink" | "linkAndCode", // defaults to code
redirectUrl?: string, // only relevant if link format is included
redirectUserAfter?: "phoneVerification" | "infoConfirmation" // only relevant if link format is included
}
- For the
{uuid}path parameter, use the value of theuuidincluded in the1ClickVerificationEntitythat's included in the response body of every 1-Click Verify endpoint.
| Property | Required? | Type | Format | Default | Description | Example |
|---|---|---|---|---|---|---|
format | Optional |
| camelCase | "code" | Format used for verification message (see Verification SMS Formats below) | "linkAndCode" |
redirectUrl | Optional | string | URL | Defined by the redirect URL brand setting in the Dashboard | Where 1-Click Verify redirects a user to (only relevant if link format is included) | "https://hooli.com/verified/1-click/verify" |
redirectUserAfter | Optional |
| camelCase | Defined by the redirect user after brand setting in the Dashboard | When a user is redirected to the redirect URL (only relevant if link format is included) | "phoneVerification" |
The content of the verification SMS depends on the format:
| Format | format | SMS Template | SMS Example |
|---|---|---|---|
| Code Default | code |
|
|
| Link | link |
|
|
| Code and Link | codeAndLink |
|
|
| Link and Code | linkAndCode |
|
|
Response
{
...1ClickVerificationEntity
}
See 1ClickVerificationEntity. Here's an example:
{
"uuid": "f5251850-496c-48cf-a4bd-d9d5ace22689",
"phone": "+12125550010",
"channel": "sms",
"format": "linkAndCode",
"status": "sending",
"verified": false,
"createdAt": 1760053695000,
"expiresAt": 1760053995000,
"attemptsRemaining": 3
}
POST /1-click/verifications/{uuid}/verify
Verify a user submitted verification code
| Method | POST |
|---|---|
| Path | /1-click/verifications/{uuid}/verify |
Request
{
code: string
}
- For the
{uuid}path parameter, use the value of theuuidincluded in the1ClickVerificationEntitythat's included in the response body of every 1-Click Verify endpoint.
| Property | Required? | Type | Format | Default | Description | Example |
|---|---|---|---|---|---|---|
code | Required | string | 6 digits (0-9) | - | User submitted verification code | "111111" |
Response
{
...1ClickVerificationEntity
}
See 1ClickVerificationEntity. Here's an example:
{
"uuid": "f5251850-496c-48cf-a4bd-d9d5ace22689",
"phone": "+12125550010",
"channel": "sms",
"format": "linkAndCode",
"status": "verified",
"verified": true,
"createdAt": 1760053695000,
"expiresAt": 1760053995000,
"deliveredAt": 1760053699054,
"verifiedAt": 1760053705000,
"attemptsRemaining": 2
}
GET /1-click/verifications/{uuid}
Check the status of a verification flow
| Method | GET |
|---|---|
| Path | /1-click/verifications/{uuid} |
Request
Call:
GET /1-click/verifications/{uuid}
- For the
{uuid}path parameter:- If the user comes from a redirect, use the value of the
verificationUuidincluded as a URL parameter on the redirect URL. - Otherwise, use the value of the
uuidincluded in the1ClickVerificationEntitythat's included in the response body of a relevant 1-Click Verify endpoint.
- If the user comes from a redirect, use the value of the
Response
{
...1ClickVerificationEntity
}
See 1ClickVerificationEntity. Here's an example:
{
"uuid": "f5251850-496c-48cf-a4bd-d9d5ace22689",
"phone": "+12125550010",
"channel": "sms",
"format": "link",
"status": "verified",
"createdAt": 1760053695000,
"expiresAt": 1760053995000,
"verifiedAt": 1760053705000
}
1-Click Signup
POST /1-click
Begin a 1-Click Signup flow
| Method | POST |
|---|---|
| Path | /1-click |
This endpoint is only relevant if you're using the API integration type.
Request
{
identityUuid?: string,
verificationUuid?: string,
phone?: string,
email?: string,
deviceIp?: string,
birthDate?: string,
ssn4?: string,
fullName?: {
firstName?: string,
middleName?: string,
lastName?: string
},
address?: {
line1?: string,
line2?: string,
city?: string,
state?: string,
zipCode?: string,
country?: string
},
credentialRequests?: CredentialRequest[]
}
| Property | Required? | Type | Format | Default | Description | Example |
|---|---|---|---|---|---|---|
identityUuid | Optional | string | Version 4 UUID | - | Unique identifier for a 1ClickEntity that can be passed to hydrate data from an existing 1-Click Signup flow | "7a57b225-7abb-499d-9b74-0934d15bc826" |
verificationUuid | Optional but Required if phone is not included | string | Version 4 UUID | - | Unique identifier for a 1ClickVerificationEntity that can be passed to hydrate a verified phone number | "487246b0-e68c-451d-be8e-45cea0b1c7a2" |
phone | Optional but Required if verificationUuid is not included | string | E.164 | - | User's phone number (in E.164 format) | "+12125550010" |
email | Optional | string | - | User's email address | "richard@piedpiper.net" | |
deviceIp | Optional | string | IPv6 address | - | IP address of user's device (which you can get using GET /1-click/verifications/device-ip) | "::121:2555:0010" |
birthDate | Optional | string | yyyy-MM-dd | - | Birth date | "1989-08-01" |
ssn4 | Optional | string | 4 digits (0-9) | - | Last 4 digits of Social Security Number | "6789" |
fullName | Optional | object | Object with keys for one or more child credentials listed below | - | Full name | |
↳ fullName.firstName | Optional | string | cAse inSensiTive | - | First name | "Richard" |
↳ fullName.middleName | Optional | string | cAse inSensiTive | - | Middle name | "Harrison" |
↳ fullName.lastName | Optional | string | cAse inSensiTive | - | Last name | "Hendricks" |
address | Optional | object | Object with keys for one or more child credentials listed below | - | Address | |
↳ address.line1 | Optional | string | cAse inSensiTive | - | Line 1 of address | "5320 Newell Rd" |
↳ address.line2 | Optional | string | cAse inSensiTive | - | Line 2 of address | "" |
↳ address.city | Optional | string | cAse inSensiTive | - | City of address | "Palo Alto" |
↳ address.state | Optional | string |
| - | State of address |
|
↳ address.zipCode | Optional | string | - | ZIP Code of address |
| |
↳ address.country | Optional | string |
| - | Country of address |
|
credentialRequests | Optional | CredentialRequest[] | See CredentialRequest | Defined by the default credential requests brand setting in the Dashboard | List of CredentialRequest objects (which encode which credentials you're asking for): an empty array tells us to source only metadata, no credentials | See CredentialRequest example |
Default Credential Requests
If you don't include credentialRequests in the request body, the default credential requests setting for your brand will apply. For reference, the standard credential requests (see here in the Setup guide) include the core KYC data points, all set to optional:
Standard Credential Requests in Code
[
{
"type": "FullNameCredential",
"children": [
{
"type": "FirstNameCredential"
},
{
"type": "MiddleNameCredential"
},
{
"type": "LastNameCredential"
}
]
},
{
"type": "PhoneCredential"
},
{
"type": "AddressCredential",
"multi": true,
"children": [
{
"type": "Line1Credential"
},
{
"type": "Line2Credential"
},
{
"type": "CityCredential"
},
{
"type": "StateCredential"
},
{
"type": "ZipCodeCredential"
},
{
"type": "CountryCredential"
}
]
},
{
"type": "BirthDateCredential",
},
{
"type": "SsnCredential",
}
]
If you pass an empty array for credentialRequests, we'll source only metadata, not any credentials. This is how you can source metadata only, if that's relevant for your use case. You can do this without verifying the user's phone number, though you must verify their phone number before sourcing any credentials.
Response
{
uuid: string,
identity: 1ClickEntity
}
| Property | Type | Format | Description | Example |
|---|---|---|---|---|
uuid | string | Version 4 UUID | Unique identifier for the 1ClickEntity that will be returned at the end of the 1-Click Signup flow | "535dba63-d4bd-442a-b3f6-21b785260a08" |
identity | 1ClickEntity | See 1ClickEntity | A 1ClickEntity object, which contains the user's verified data and metadata about it | See 1ClickEntity example |
GET /1-click
Get data for a user who has completed a 1-Click Signup flow
| Method | GET |
|---|---|
| Path | /1-click/{identityUuid} |
Request
Call:
GET /1-click/{identityUuid}
- For the
{identityUuid}path parameter, use the value of theidentityUuidreturned by the SDK or included as a URL parameter on the redirect URL.
Response
{
...1ClickEntity
}
See 1ClickEntity.
1-Click Health
POST /1-click/health
Begin a 1-Click Health flow (for autofill, check, or both)
| Method | POST |
|---|---|
| Path | /1-click/health |
This endpoint is only relevant if you're using the API integration type.
Request
{
checkAfterAutofill?: boolean, // default defined by the Check After Autofill brand setting in the Verified Dashboard
provider?: {
npi: string // default defined by the Providers brand setting in the Verified Dashboard
},
identityUuid?: string, // from 1-Click Signup response body
fullName?: {
firstName?: string, // required if no identityUuid
middleName?: string,
lastName?: string // required if no identityUuid
},
birthDate?: string, // required if no identityUuid
address?: {
line1?: string,
line2?: string,
city?: string,
state?: string,
zipCode?: string,
country?: string
},
sex?: string,
ssn?: string,
payer?: {
id?: string, // specifies payer (or payer group)
name?: string, // searches for payer (or payer group): only use if id is not known
},
memberId?: string,
serviceCodes?: {
serviceTypeCodes?: string[],
procedureCodes?: {
code: string,
qualifier?: string,
modifiers?: string[]
}[]
}
}
| Property | Required? | Type | Format | Default | Description | Example |
|---|---|---|---|---|---|---|
checkAfterAutofill | Optional | boolean | - | Defined by the Check After Autofill setting | Whether to automatically run an eligibility check for an autofilled health insurance plan | true |
provider | Optional | object | Object with key listed below | - | Provider information | |
↳ provider.npi | Required (if provider object is included) | string | 10 digits (0-9) | Defined by Providers setting | National Provider Identifier | "0123456789" |
identityUuid | Optional | string | Version 4 UUID | - | Unique identifier for the 1ClickEntity that will be returned at the end of the 1-Click Signup flow | "535dba63-d4bd-442a-b3f6-21b785260a08" |
fullName | Optional but Required if no identityUuid | object | Object with keys for one or more child credentials listed below | - | Full name | |
↳ fullName.firstName | Optional but Required if no identityUuid | string | cAse inSensiTive | - | First name | "Richard" |
↳ fullName.middleName | Optional | string | cAse inSensiTive | - | Middle name | "Harrison" |
↳ fullName.lastName | Optional but Required if no identityUuid | string | cAse inSensiTive | - | Last name | "Hendricks" |
birthDate | Optional but Required if no identityUuid | string | yyyy-MM-dd | - | Birth date | "1989-08-01" |
address | Optional | object | Object with keys for one or more child credentials listed below | - | Address | |
↳ address.line1 | Optional | string | cAse inSensiTive | - | Line 1 of address | "5320 Newell Rd" |
↳ address.line2 | Optional | string | cAse inSensiTive | - | Line 2 of address | "" |
↳ address.city | Optional | string | cAse inSensiTive | - | City of address | "Palo Alto" |
↳ address.state | Optional | string | 2 letter abbreviation (last 2 characters of ISO 3166-2 code for US state/territory) | - | State of address | "CA" |
↳ address.zipCode | Optional | string | ZIP Code (5 digits, 0-9) | - | ZIP Code of address | "94303" |
↳ address.country | Optional | string | 2 letter abbreviation (ISO 3166-1 alpha-2 code, currently always "US") | - | Country of address | "US" |
sex | Optional |
| Title Case | - | Sex | "Male" |
ssn | Optional | string | 9 digits (0-9) | - | Social Security Number | "000456789" |
payer | Optional | object | Object with key described below | - | Payer (or payer group) for insurance autofill and/or eligibility check | - |
↳ payer.id | Optional | string | - | - | Payer (or payer group) ID for insurance autofill and/or eligibility check: see supported payers | "VERIFIED_MEDICARE" |
↳ payer.name | Optional | string | - | - | Payer (or payer group) name for insurance autofill and/or eligibility check: see supported payers (only use if payer ID is not known) | "Aetna" |
memberId | Optional | string | - | - | Member ID for eligibility check | "A484069" |
serviceCodes | Optional | object | Object with key described below | - | Service codes for autofill and/or check | - |
↳ serviceTypeCodes | Optional | string[] | Array of strings | ["30"] | List of X12 service type codes for patient service | ["47", "AL", "F6"] |
↳ procedureCodes | Optional | object[] | Array of objects | "30" | National Provider Identifier | |
↳ ↳ procedureCodes[i] | Optional | object | Object with keys described below | - | National Provider Identifier | |
↳ ↳ ↳ procedureCodes[i].code | Required (if procedureCodes object is included) | string |
| - | CPT or HCPCS procedure code | "99213"" |
↳ ↳ ↳ procedureCodes[i].qualifier | Optional |
| 2 letters | "HC" | Type or source of procedure code | "HC" |
↳ ↳ ↳ procedureCodes[i].modifiers | Optional | string[] | Array of strings | - | Array of medical coding modifiers | ["25"] |
Response
{
healthDataUuid: string,
status: "PENDING" | "PROCESSING" | "SUCCEEDED" | "FAILED" | "PARTIAL"
}
| Property | Type | Format | Description | Example |
|---|---|---|---|---|
healthDataUuid | string | Version 4 UUID | Unique identifier for the 1ClickHealthEntity that will be returned at the end of the 1-Click Health flow | "9e12fe5b-5bb8-410a-ac6b-6e053e4c7e8d" |
status |
| UPPER_SNAKE_CASE | Status of the 1-Click Health flow | "PROCESSING" |
GET /1-click/health
Get data for a user who has completed a 1-Click Health flow
| Method | GET |
|---|---|
| Path | /1-click/health/{healthDataUuid} |
Request
Call:
GET /1-click/health/{healthDataUuid}
- For the
{healthDataUuid}path parameter, use the value of thehealthDataUuidreturned by the SDK orPOST /1-click/health.
Response
{
...1ClickHealthEntity
}
See 1ClickHealthEntity.
GET /1-click/health/payers
Get all supported payers for 1-Click Health
| Method | GET |
|---|---|
| Path | /1-click/health/payers |
Request
Call:
GET /1-click/health/payers
You can optionally include query parameters, for example:
GET /1-click/health/payers?$search=aetna&$limit=10&$skip=0&$paginate=true
| Parameter | Required? | Type | Format | Default | Description | Example |
|---|---|---|---|---|---|---|
$search | Optional | string | - | - | Search by payer name or ID | aetna |
$limit | Optional | integer | - | 10 | Number of payers per page | 100 |
$skip | Optional | integer | - | 0 | Number of payers to skip | 25 |
$paginate | Optional | boolean | - | - | Whether to return paginated results | true |
This endpoint is unauthenticated.
Response
Without query parameters, the response body will be unpaginated:
[
...Payer
]
See Payer. This includes all supported payers.
With query parameters, the response body will be paginated:
{
total: integer,
limit: integer,
skip: integer,
data: [
...Payer
],
}
This includes (under data) an array of payer objects for all supported payers that match the query, with keys as described in the table below.
| Property | Type | Format | Description | Example |
|---|---|---|---|---|
total | integer | - | Number of payers | 3460 |
limit | integer | - | Number of payers per page | 100 |
skip | integer | - | Number of payers to skip | 25 |
data | Payer[] | Array of Payers | Payers that match submitted query | - |
data[i] | Payer | See Payer | Payer | See Payer Example |