1-Click Signup
- Time to read: 20 minutes
 - Time to implement: 2-4 hours
 
1-Click Signup™ is to onboarding what 1-click checkout is to payments. It's the fastest way for a user to sign up for your service.
With just a phone number, we can pull verified data about a user, including:
- Full Name
 - Email(s)
 - Phone(s)
 - Address(es)
 - Date of Birth
 - Social Security Number
 
This works for 95% of US adults (253M consumers). The data is extremely high quality because it comes from wireless phone providers, who are required by law to perform strong identity verification (Know Your Customer).
A user's data is never shared without their consent. We are committed to putting people in control of their own data. We are SOC 2 Type II certified and compliant with major regulatory frameworks like GDPR and CCPA. For more information, please see our Privacy, Security, and Compliance page.
How It Works
User Experience
Try our 1-Click Signup demos to see this user experience in action.
1-Click Signup can take less than 10 seconds for a user to complete. It usually takes around 20-30 seconds.
The user experience is simple:
- Enter phone number
 - Receive SMS with verification link/code
 - Click link or enter code
 - (only if first time) Enter DOB/SSN4
 - Review and consent to share data
 
- If it's the user's first time using 1-Click Signup, they'll need to enter their date of birth (DOB) or the last 4 digits of their Social Security Number (SSN4). This is for additional verification.
 - If it's not the user's first time, this step will be skipped.
 
You can choose whether you redirect the user or not as part of the flow:
- In the simplest implementation, you don't redirect the user and they click a verification link in the SMS.
 - Instead, you can (optionally) redirect the user (to a URL we provide), so they can enter a verification code from the SMS.
 
Both of these approaches work well but have their pros and cons.
Flow Diagram
Think of 1-Click Signup as a black box, where the input is a phone number and the output is verified user data:
- Black Box
 - Partial Detail
 - Full Detail
 
You send us a phone number, and we send you verified user data, with full user consent. Yes, it's really that simple!
Under the hood, 1-Click Signup involves an SMS, user verification, and user consent:
To get even more detailed, the verification step is slightly different depending on whether it's the user's first time using 1-Click Signup or not:
In both cases, the user clicks the link or enters the code from the SMS. But if it's the user's first time using 1-Click Signup, there's an additional verification step, where they enter their date of birth or the last 4 digits of their Social Security Number.
So, the fully detailed flow is:
Sequence Diagram
Here's the full flow:
- Development
 - Production
 
To assist getting up and running during development in our Sandbox environment, we handle sending the SMS for you by default. However, part of our go live process is to switch this over to you sending the SMS as shown in the Production sequence diagram.
Implement
Try our 1-Click Signup demos to see example implementations. These are open source, so feel free to use the source code as a reference.
3 Steps to Implement
To implement 1-Click Signup, there are only 3 steps (and one is optional):
- Call 1-Click endpoint
 - (optional) Redirect user
 - Receive user data
 
See the sequence diagram above.
To test in our sandbox environment, you can use our test brand and user:
Test Brand API Credentials
To get an API key for your own brand, email us at Support@Verified.Inc.
Test User Login Credentials
These are Hooli and Richard Hendricks — yes, the ones from Silicon Valley! 😂
We also strongly recommend that you test using your own phone number. This will allow you to receive SMS messages, which are necessary to test the full 1-Click Signup flow (but won't work for the test user).
Phone Number Format
Using your own phone number in sandbox, you'll receive dummy user data.
Simplest Implementation
For the simplest implementation:
- Call 1-Click endpoint with a basic request
 Redirect user(skip optional step)- Receive user data using the pull option
 
1. Call 1-Click Endpoint
The 1-Click endpoint is POST /1-click. Call it with the user's phone number to start 1-Click Signup.
Sequence Diagram
Basic Request
Just include a phone number:
{
    "phone": "+10123456789"
}
Advanced Request
You can also use /1-click in more advanced ways:
Optimize for Redirect
Change the Word After "1-Click"
Define a Redirect URL
Change Data Types Requested
Fully Customize Data Request
Response
If 1-Click Signup is possible for the phone number included in the request body, the response body will contain a URL and a boolean indicating whether the phone number matches a user in our system.
{
    "url": "https://wallet.verified.inc/request/9f2053fc-cc4c-41cb-8d14-7d3ccf6167eb",
    "match": true,
    "smsBody": "Click this link to verify for Hooli: https://wallet.verified.inc/mt/3070e04e-dfdd-4600-954a-6ddaf651c65c" // only necessary to use in production, where you send the SMS
}
If you are going to redirect the user (which is optional), you should redirect them to the returned url. If you aren't going to redirect them, you can ignore this URL.
If 1-Click Signup is not possible, the response body match value will be false or contain an error.
You can ignore smsBody in sandbox, where we handle sending SMS for you to make it simpler to start integrating. But when you're ready to go live, where you will send the SMS, you should trigger and SMS to the user that contains smsBody.
2. (optional) Redirect User
Optionally, you can redirect the user to the URL contained in the 1-Click endpoint response. This is a link to our Wallet, where the user will review and consent to share their verified data.
They will end up at our Wallet either way:
- If you do not redirect the user, they will click a verification link in the SMS that takes them to the Wallet.
 - If you do redirect the user, that will take them to the Wallet, where they will enter a verification code.
 
See below for the pros and cons of these two approaches.
Sequence Diagram
Pros and Cons
There are pros and cons to redirecting the user:
Pros
Cons
3. Receive User Data
After you call the 1-Click endpoint, you need to be set up to receive data the user consents to share with you.
There are two options for how to do this:
- Push Option (recommended): We push the data to you, by hitting an endpoint you provide.
 
OR
- Pull Option: You pull the data from us, by hitting an endpoint we provide.
 
We recommend the push option because you are guaranteed to receive the data immediately, as soon as the user consents to share it. That results in 100% conversion.
With the pull option, there's a time delay between when the user consents to share and when you are able to pull the data. That's because we have to redirect the user to you first. Conversion is generally somewhat less than 100% in this case.
Sequence Diagram
Push Option (recommended)
All you need to do is create a webhook called POST /verified/credentials according to our OpenAPI spec. This is where we will send verified user data when a user consents to share it.
Pull Option
Here's how this option works:
- We redirect to your 
redirectUrland include a URL parameter called1ClickUuid. - You call our 
GET /1-clickendpoint with the value of this parameter. 
Sequence Diagram
Response
The user data you'll receive is the same, regardless of whether you use the push or pull option.
One particularly valuable piece of metadata is verificationMethod, which describes how the credential (piece of user data) was verified. It can take the following values:
"phone_carrier": verified via phone carrier records"otp": verified via an OTP (one time passcode)"self_attested": attested by the user themselves (not verified)null
Definitions
{
    "identifiers": {
        "phone": "+101234567890"
    },
    "credentials": {
        "email": "richard@piedpiper.net",
        "fullName": {
            "firstName": "Richard",
            "lastName": "Hendricks"
        },
        "birthDate": "08/01/1989",
        "address": {
            "line1": "5320 Newell Rd",
            "city": "Palo Alto",
            "state": "CA",
            "zip": "94303",
            "country": "US"
        },
        "ssn": "123456789"
    },
    "metadata": {
        "identifiers": {
            "verificationMethod": {
                "phone": "phone_carrier"
            }
        },
        "credentials": {
            "id": {
                "email": "8a1d4e35-413d-496b-b499-8810b55cfb5c",
                "fullName": {
                    "firstName": "2e6a7b9a-e93e-43ba-98a9-c554f4e16457",
                    "lastName": "9a5817ef-e621-4277-8c48-c8ee3776b6c4"
                },
                "birthDate": "ec1ef0ce-eeed-46a4-94a9-29b46e64403d",
                "address": {
                    "line1": "f5a4dc93-bc06-4bb8-bd05-17b5ba912bcd",
                    "city": "efd3820f-676a-4db1-b63e-695b66ed8ba0",
                    "state": "b65022a2-2016-41df-88f3-252e8e3a29c5",
                    "zip": "b747ff84-39d8-4df9-98f9-24a465f1a9ae",
                    "country": "d57a7bca-2a7c-4671-86ad-5647731cad02"
                },
                "ssn": "ec1ef0ce-eeed-46a4-94a9-29b46e64403d"
            },
            "verificationMethod": {
                "email": "phone_carrier",
                "fullName": {
                    "firstName": "phone_carrier",
                    "lastName": "phone_carrier"
                },
                "birthDate": "phone_carrier",
                "address": {
                    "line1": "phone_carrier",
                    "city": "phone_carrier",
                    "state": "phone_carrier",
                    "zip": "phone_carrier",
                    "country": "phone_carrier"
                },
                "ssn": "phone_carrier"
            },
            "status": {
                "email": "valid",
                "fullName": {
                    "firstName": "valid",
                    "lastName": "valid"
                },
                "birthDate": "valid",
                "address": {
                    "line1": "valid",
                    "city": "valid",
                    "state": "valid",
                    "zip": "valid",
                    "country": "valid"
                },
                "ssn": "valid"
            },
            "issuerUuid": {
                "email": "c3be0124-8f03-4983-baef-3302e0be88f4",
                "fullName": {
                    "firstName": "c3be0124-8f03-4983-baef-3302e0be88f4",
                    "lastName": "c3be0124-8f03-4983-baef-3302e0be88f4"
                },
                "birthDate": "c3be0124-8f03-4983-baef-3302e0be88f4",
                "address": {
                    "line1": "c3be0124-8f03-4983-baef-3302e0be88f4",
                    "city": "c3be0124-8f03-4983-baef-3302e0be88f4",
                    "state": "c3be0124-8f03-4983-baef-3302e0be88f4",
                    "zip": "c3be0124-8f03-4983-baef-3302e0be88f4",
                    "country": "c3be0124-8f03-4983-baef-3302e0be88f4"
                },
                "ssn": "c3be0124-8f03-4983-baef-3302e0be88f4"
            },
            "issuanceDate": {
                "email": "1671847264479",
                "fullName": {
                    "firstName": "1671847264479",
                    "lastName": "1671847264479"
                },
                "birthDate": "1671847264479",
                "address": {
                    "line1": "1671847264479",
                    "city": "1671847264479",
                    "state": "1671847264479",
                    "zip": "1671847264479",
                    "country": "1671847264479"
                },
                "ssn": "1671847264479"
            },
            "expirationDate": {
                "email": "1871839024044",
                "fullName": {
                    "firstName": "1871839024044",
                    "lastName": "1871839024044"
                },
                "birthDate": "1871839024044",
                "address": {
                    "line1": "1871839024044",
                    "city": "1871839024044",
                    "state": "1871839024044",
                    "zip": "1871839024044",
                    "country": "1871839024044"
                },
                "ssn": "1871839024044"
            }
        }
    }
}
Go Live!
Before you launch 1-Click Signup live in production, you'll need to do 2 things that are not necessary in sandbox:
- 
Add legal language to ensure compliance: SMS regulations require that users give informed consent, so you must include the following language just above or below the phone number input you use to start the 1-Click Signup flow. (It can be included alongside other legal language you already use.)
By
{taking this action}, you agree to receive a text to create a Verified Inc. account for 1-Click Signup at{your brand name}and other supported sites.Replace
{taking this action}and{your brand name}Optionally include a "powered by" graphic
Here's an example:
Hooli displays the required legal language and includes the gray variant of the "powered by" graphic. - 
Send SMS: When you're ready to go live, we'll enable
POST /1-clickto return one additional attribute,smsBody, which contains the content of the SMS the user should receive. It's not necessary for you to send SMS in sandbox — we handle it for you to make it easier to get started — but you should do so in production. This is to avoid user confusion (so all SMS you send come from the same number) and ensure compliance with recent regulations about informed consent for SMS. 
Production Ready Checklist
Once we've confirmed that you've checked off these items, you're ready to go live!
Non-Hosted Variant
Status: Beta
The 1-Click Signup experience mentioned above outlines our "hosted" 1-Click Signup flow, where the user interacts with our Wallet. We also offer a non-hosted or "headless" 1-Click Signup flow, which allows for a more white-label integration where the user will never have to leave your signup flow. You will receive the data as soon the user clicks the verification link in the SMS or enters the verification code via your UI (and a headless redirect is initiated to us, more on that below).
This method requires additional work; mainly, you will have to build a UI for the user to interact with. However, often, this is just augmenting your existing signup forms. While the rest is very similar to the hosted flow, there are a few differences:
- 
Call
/1-clickwith two additional request attributes:isHostedandbirthDate.POST /1-click Request Body (Non-Hosted Additional Attributes)isHosted: false,
birthDate: "YYYY-MM-DD",The
birthDatevalue often must come from signup forms. We recommend collecting this alongside their phone number. - 
Regardless of your method of receiving the data (push or pull), the data provided ought to be prefilled in your existing signup forms. This is to allow the user to edit any fields that may have been incorrect or add any additional information that may be required. It is necessary to allow the user to edit the data for correctness. Also, the response body may contain multiple credentials of the same type (e.g., addresses), and you will need to handle this in your UI. The simplest solution is to provide the most recently issued credential field and have them edit it if necessary.
 - 
If using
verificationOptionscontaining a code, you will need to build the input for the user to submit the OTP code sent to them via SMS. This only needs to be handled if you are usingverificationOptionsset toonly_codeorboth_link_and_code.Upon collecting the verification code from the user, you must redirect the user to the
/1-clickresponse body'surlwith the user-provided verification code as a query parameter. Below is an example response body:Example URL Response Body{
"url": "https://wallet.verified.inc/authentication/verify/generic?phone=%2B101234566789&phoneCarrier=true&requestId=242189ee-c120-4f62-af85-a0a19423ffc0&issuePhoneCarrierCredentials=false&isHosted=false",
"match": true
}The resultant URL that you need to redirect to would look like this:
Redirect URL Post User Inputted OTP Codehttps://wallet.verified.inc/authentication/verify/generic?code=123456&phone=%2B10123456789&phoneCarrier=true&requestId=242189ee-c120-4f62-af85-a0a19423ffc0&issuePhoneCarrierCredentials=false&isHosted=falseThis redirect will ultimately land the user back on your defined
redirectUrlwith no user interaction appearing as if only a page refresh has occurred. - 
If using
verificationOptionsonly_linkthen the/1-clickresponse body will not contain aurleven ifmatchistrue. This is because there is no need to redirect the user. Thanks to the verification link sent via SMS already containing the code, there is no need for a redirect. Upon clicking the link, we will redirect the user to your definedredirectUrlupon phone verification and credential creation happening in a headless manner. 
If interested in this mode of integration please let us know and we will enable it for your API key. Please note, that we will have to validate your integration in Sandbox prior to sharing Production access to this feature.
Diagram
Please note that same as in the hosted flow, Verified Inc. will still sending the SMS on your behalf in Sandbox, however the same go live checklist applies and you will need handle the SMS in Production.



