Guide
| Time to Complete | Depends on integration work (which is optional):
|
|---|---|
| Skills Required | Depends on integration work (which is optional):
|
This Guide includes lots of detail so you have all the information you might need. But don't let it scare you! Using Text to Signup is extremely easy and intuitive, and you can go live with it in a matter of minutes. If you spend a couple minutes clicking around in the Dashboard, you'll see how it works. You can try it yourself and go live immediately!
1. Access the Dashboard.
Create or log into your Verified Dashboard account.
How to Create a Dashboard Account
a. Enter your email and click the 1-Click Login button.
We'll send you a verification code by email.
Use your work email. We use AI to auto-magically set brand information based on your email domain, so you don't have to manually enter it!
b. Complete the verification step.
Click the verification button in the email or enter the verification code. We'll automatically log you in. It's a 1-click experience, as promised!
c. (optional) Set up MFA.
Set up multi-factor authentication with an authenticator app. This is optional until you request approval for Production access, at which point it's required.
d. (if necessary) Confirm your company name.
If you're creating the Dashboard account for your company, we'll ask you to confirm your company name. If someone on your team has already created your account, you won't need to do this.
If your account doesn't have a brand yet, we'll automatically create one for you and take you to its Brand Details page.
Your company account can have one or more brands. Generally, you'll only need one brand, but there are some cases where it's helpful to use multiple. For example:
- If you have multiple products: If you have products that go by different names, it can be useful to create different brands to help users know which product they're using 1-Click Signup for — and to help your team track metrics specific to that product.
- If you want to try different brand settings: If you want to change brand settings without affecting your existing implementation (even in Sandbox), you can duplicate your brand and configure different settings on the new brand.
e. (optional) Invite team members.
Invite your team members to join your Dashboard account.
2. Configure brand settings.
On the Brands page, click the Create button to create a new brand, or click Brand Details to access brand settings for an existing brand.
Brand Name
Choose an external name for your brand. This will be used elsewhere in the Dashboard (for example on the Metrics page) and displayed to users in the SDK (if you choose to use the SDK).
The internal brand name is separate, and you can edit it at the top of the page. You can use this to label brands created for testing purposes, for example.
Text to Signup Settings
Click the Text to Signup tab to access these settings.
Brand Phone Number
Choose which phone number you want users to send messages to:
| Option | Phone Number Type | Phone Number |
|---|---|---|
| Short | Short code |
|
| Long | Long code |
|
If you choose the Short option, a short phone number will be enabled in Production but not Sandbox. This is because short code phone numbers are not suitable for testing, as they're subject to strict carrier compliance review.
We recommend using the Short option because it's easier for users to type and therefore makes the call to action higher converting. However, some use cases may not need to use the call to action, which prompts users to manually type the brand phone number. Such uses cases may instead only use the magic link, magic button, and/or magic QR code, which autofill the brand phone number and SMS draft for the user so they don't need to type anything. For these use cases, the Long option may be best.
Campaigns
Create up to 10 campaigns for a given brand. For each campaign, configure the following settings:
Keyword
Triggers Text to Signup when a user includes it in an SMS they send to the brand phone number
Choose a keyword for the campaign. The keyword can be any text (including emojis) that passes the following validation:
- Must not be longer than 153 characters if it only includes GSM-7 characters, or 67 characters if it includes any non-GSM-7 characters (like emojis).
- Must not be a keyword already used with the brand phone number.
- Must not be a reserved keyword:
Reserved Keywords
- STOP
- STOPALL
- UNSUBSCRIBE
- CANCEL
- END
- REVOKE
- OPTOUT
- QUIT
- START
- YES
- UNSTOP
- HELP
- INFO
Examples:
- HOOLI
- 🩵
Keywords are case insensitive. For example, "HOOLI" and "Hooli" are considered the same. However, we recommend using an all caps version of the keyword in the SMS draft (see below) and campaign ads, since it makes it easier for users to understand what to do.
SMS Draft
Draft SMS that's autofilled in a user's messaging app when they use a Text to Signup magic link, button, or QR code
Write an SMS draft for the campaign. The SMS draft can be any text (including emojis) that passes the following validation:
- Must include the campaign keyword.
- Must not be longer than 153 characters if it only includes GSM-7 characters, or 67 characters if it includes any non-GSM-7 characters (like emojis).
Examples:
- HOOLI - Send this message to experience the magic! ->
- This example has only GSM-7 characters.
- 🩵 Send this message to experience the magic! ➡️
- This example includes non-GSM-7 characters.
- We recommend using using an all caps version of the keyword so that it's clear to the user what word they need to type (if they choose to manually type the keyword in an SMS).
- We recommend including "Send this message" and either "➡️" or "->" at the end of the message to help guide the user toward sending the SMS draft, which will trigger Text to Signup because it includes the campaign keyword.
Redirect URL
Where Text to Signup redirects a user to
Set a redirect URL for the campaign. The redirect URL can be any valid URL — whether a website link, app store link, or otherwise.
We recommend using a campaign specific landing page, an app store link, or a page in your onboarding flow.
Examples:
We will append a URL parameter to the redirect URL, based on what you choose for the redirect user after setting. See step 3 for details about whether and how to use these parameter values.
Redirect User After
When a user is redirected to the redirect URL
Choose when a user should be redirected:
| Option | Description |
|---|---|
| Text to Signup | After the Text to Signup flow (where we verify the user’s phone number) |
| Hosted 1-Click Signup | After a 1-Click Signup flow we host (where we autofill info and have the user confirm it) |
If you choose the "Text to Signup" option, we will redirect the user after we verify their phone number. You can then optionally:
- Confirm the user's phone is verified.
- Pass the user to an integrated 1-Click Signup flow on your side.
See step 3 for how to do this.
If you've already integrated 1-Click Signup (following the SDK Integration or API Integration guide), the "Text to Signup" option is best, because it ensures you can keep your signup flow consistent for all users.
If you choose the "Hosted 1-Click Signup" option, we will take the user through a hosted 1-Click Signup flow that autofills identity info and has them confirm it. You'll need to retrieve the user's info to benefit from this: see step 3 for how.
Styling Settings
Click the Styling tab to access these settings.
Only the styling settings listed below apply to Text to Signup. There are other styling settings that apply to 1-Click Signup (if you're using the SDK integration type). See here in the 1-Click Signup Setup guide for details.
We use AI to auto-magically configure styling settings based on your email domain, so you don't have to do so manually from scratch!
Choose how to style campaign assets:
| Setting | Options | Default | Description |
|---|---|---|---|
| Logo | Any square image (max size 200 KB, JPG or PNG) | - | Logo displayed to users |
| Font Family | Any Google font | Lato | Font used for all elements |
| Button Border Radius | Any number | 4 | Border radius used for all buttons |
| Primary Color | Any hex code | #0DBC3D | Color used for primary buttons and success indicators |
| Graphic Color |
| Green | Color of the Verified logo in the powered by Verified graphic |
3. (if necessary) Do integration work.
You may not need to do any integration work for Text to Signup. You only need to if:
- You need to confirm the the user's phone is verified. This is crucial if you want to rely on Text to Signup for phone verification, including if you want to pass the user to an integrated 1-Click Signup flow on your side.
- You chose the "Hosted 1-Click Signup" option for the redirect user after setting. We will take the user through a hosted 1-Click Signup flow that autofills identity info and has them confirm it. You'll need to retrieve the user's info to benefit from this.
If neither of these apply to your use case, skip this step — you need no code!
The integration work you can do depends on the redirect user after setting:
- If it's set to "Text to Signup", you can optionally:
- Pass the user to an integrated 1-Click Signup flow on your side.
- Confirm the user's phone is verified, separately from an integrated 1-Click Signup flow (which confirms this automatically).
- If it's set to "Hosted 1-Click Signup", you need to retrieve the user's identity info.
See the sections below for details about how to do each of these.
Pass User to Integrated 1-Click Signup Flow
This integration step is only relevant if the redirect user after setting is set to "Text to Signup".
Because Text to Signup verifies a user's phone number, you can pass the user to an integrated 1-Click Signup flow that skips the standard phone verification process (enter phone, receive SMS verification code, enter verification code). The result is a frictionless, delightful user experience!
How to do this depends on your brand's integration type:
- SDK: Start at step 1 in the SDK Integration guide, but include
verificationUuidin the request body ofPOST /client/1-click(instead of using an empty request body). This will make the SDK skip the Phone and Verification Code screens. - API: Skip step 1 in the API Integration guide and go straight to step 2, using
verificationUuidinstead ofphonein the request body ofPOST /1-click.
It's that simple!
Confirm User's Phone is Verified
This integration step is only relevant if the redirect user after setting is set to "Text to Signup".
If you pass the user to an integrated 1-Click Signup flow on your side, that automatically confirms the user's phone is verified. But if you don't want to pass the user to such a flow, you need to separately confirm the user's phone is verified. See below for how to do this (and why it's necessary).
sequenceDiagram
box Customer
participant S as Server
participant C as Client
end
actor U as User
participant V as Verified
V -->> C: Redirect user to customer
note left of S: 1. Parse redirect URL.
C ->> C: Parse verificationUuid from URL parameter
note left of S: 2. Get verification.
C ->>+ S: Call server with verificationUuid
S ->>+ V: Call GET /1-click/verifications with verificationUuid
V -->>- S: Return 1ClickVerificationEntity
note left of S: 3. Check verification status.
S ->> S: Check status
alt Status is "verified"
S -->>- C: Return success
C ->> U: Take user to success flow
else Status is not "verified"
S -->> C: Return error
C ->> U: Take user to phone verification
enda. Parse the verificationUuid URL parameter.
When a user completes Text to Signup, we redirect them to your campaign's redirect URL, appending a URL parameter that depends on the redirect user after setting. When it's set to "Text to Signup", we redirect the user after we verify their phone number. Therefore, we append a verificationUuid parameter, which lets you check that the user's phone was verified:
{redirectUrl}?verificationUuid={verificationUuid}
https://hooli.com/verified/text-to-signup?verificationUuid=68b7bf30-1a2d-4fcc-a2c8-be7de29e5b19
In the Sandbox environment, we also append an env=sandbox parameter (for example ...?verificationUuid={verificationUuid}&env=sandbox). This lets you tell test requests apart from live ones when you use the same redirect URL in both environments.
Parse the value of this parameter, which you'll use in the next step.
A user arriving at your campaign redirect URL with a verificationUuid URL parameter is NOT a technical guarantee that the user's phone is verified! If your use case needs such a guarantee, you must confirm the phone is verified using step b and step c.
Why is this the case?
A bad actor can figure out what the redirect URL is (for example by simply going through the campaign flow themselves) and then append a verificationUuid parameter with a random UUID value.
So, to confirm the user's phone is verified, you need to use the value of the verificationUuid parameter to call GET /1-click/verifications/{verificationUuid} (see step b) and then check the verification status in the response (see step c). This can't be spoofed, because a bad actor doesn't have any way of correctly guessing a valid UUID value for verificationUuid.
b. Call GET /1-click/verifications.
Call your server with verificationUuid, which you parsed in the previous step. The server should use your Verified API key to call GET /1-click/verifications/{verificationUuid}:
GET /1-click/verifications/{verificationUuid}
The endpoint you should use here is GET /1-click/verifications, which is different than GET /1-click.
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.
The response will be a 1ClickVerificationEntity:
{
...1ClickVerificationEntity
}
{
"uuid": "535dba63-d4bd-442a-b3f6-21b785260a08",
"phone": "+12125550010",
"channel": "textToSignup",
"status": "verified",
"verified": true,
"createdAt": 1760053695000,
"expiresAt": 1760053995000,
"deliveredAt": 1760053699054,
"verifiedAt": 1760053705000,
"attemptsRemaining": 2
}
c. Check verification status.
Check that the value of status is "verified", which means the user's phone is verified. Otherwise, it may be spoofed.
Retrieve User's Identity Info
This integration step is only relevant if the redirect user after setting is set to "Hosted 1-Click Signup".
sequenceDiagram
box Customer
participant S as Server
participant C as Client
end
actor U as User
participant V as Verified
V -->> C: Redirect user to customer
note left of S: 1. Parse redirect URL.
C ->> C: Parse identityUuid from URL parameter
note left of S: 2. Get verification.
C ->>+ S: Call server with identityUuid
S ->>+ V: Call GET /1-click with identityUuid
V -->>- S: Return 1ClickEntity
note left of S: 3. Use data.
S ->> S: Use credentials and metadataa. Parse the identityUuid URL parameter.
When a user completes Text to Signup, we redirect them to your campaign's redirect URL, appending a URL parameter that depends on the redirect user after setting. When it's set to "Hosted 1-Click Signup", we take the user through a hosted 1-Click Signup flow that autofills identity info and has them confirm it. Therefore, we append an identityUuid parameter, which lets you retrieve data the user shared.
{redirectUrl}?identityUuid={identityUuid}
https://hooli.com/verified/text-to-signup?identityUuid=68b7bf30-1a2d-4fcc-a2c8-be7de29e5b19
In the Sandbox environment, we also append an env=sandbox parameter (for example ...?identityUuid={identityUuid}&env=sandbox). This lets you tell test requests apart from live ones when you use the same redirect URL in both environments.
Parse the value of this parameter, which you'll use in the next step.
b. Call GET /1-click.
Call your server with verificationUuid, which you parsed in the previous step. The server should use your Verified API key to call GET /1-click/{identityUuid}:
GET /1-click/{identityUuid}
The endpoint you should use here is GET /1-click, which is different than GET /1-click/verifications.
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.
The response will be a 1ClickEntity that contains data (user credentials and metadata):
{
...1ClickEntity
}
1ClickEntity Example
{
"identifiers": {
"phone": "+12125550010"
},
"credentials": {
"fullName": {
"firstName": "Richard",
"lastName": "Hendricks"
},
// Array 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"
}
],
"birthDate": "1989-08-01",
"ssn": "000456789"
},
"metadata": {
"identifiers": {
"verificationMethod": {
"phone": "otp"
},
"riskSignals": {
"overall": {
"score": 0,
"level": "low",
"recommendation": "allow",
"reasonCodes": [
"OCR10021"
]
},
"phone": {
"carrier": {
"id": 0,
"name": "Example Carrier"
}
"reasonCodes": [
"OCR20004",
"OCR20005",
"OCR20007",
"OCR20101"
]
},
"email": {
"reasonCodes": [
"OCR60001",
"OCR60002"
]
}
}
},
// Follows the same structure as `credentials` and maintains the same order for array items when `multi` is set to `true`
"credentials": {
"verificationMethod": {
"fullName": {
"firstName": "phone_carrier",
"lastName": "phone_carrier"
},
// Array because `multi` was set to `true` in the address credential request
"address": [
{
"line1": "credit_bureau",
"city": "credit_bureau",
"state": "credit_bureau",
"zipCode": "credit_bureau",
"country": "credit_bureau"
}
],
"birthDate": "phone_carrier",
"ssn": "phone_carrier"
}
}
}
}
4. Use campaign assets.
Click the Text to Signup tab to access these assets. You can access assets for each campaign you configured using the Campaign dropdown. The Dashboard also shows campaign ad examples to help you brainstorm creative ways to use the assets.
Use the campaign assets in ads. These ads can be offline or online, in just about any format you can imagine. The sections below have guidance for how to use each specific asset.
You are contractually required to use the powered by Verified graphic and the exact consent language — wherever you use the other Text to Signup assets. This is necessary for compliance with SMS regulations.
Call to Action
Prompts user to start Text to Signup
The call to action is always of the form:
Text
{keyword}to{number}
where {keyword} is the campaign keyword and {number} is the brand phone number.
Examples:
- Text HOOLI to 50555
- Text 🩵 to 888-323-7799
You can put the call to action anywhere a user will have cell service! It works equally well in both offline and online ads. For example, you can put it:
- on billboards
- on bus stop posters
- in TV commercials
- in radio ads
- in paper handouts
- in marketing mailings
- in emails
- in social media posts
- on web pages
- on banners flown behind airplanes
We do not recommend putting the call to action somewhere a user may have intermittent or no cell service, for example in a subway car. Text to Signup requires a user to send and receive an SMS and load a web page, so they need to have reliable service.
Magic Link
Takes user to messaging app with SMS draft and phone number autofilled
The magic link takes a user to the messaging app (on any device) and autofills the campaign SMS draft for them. This lets them send an SMS with the campaign keyword with a single click (since the SMS draft always contains the keyword).
Examples:
The magic link works best for ONline ads — like on web pages, in social media posts, in emails — so that users can click the link. For offline ads, we recommend using the magic QR code.
Magic Button
Takes user to messaging app with SMS draft and phone number autofilled
To use the magic button the Dashboard provides, download the image and link it to the magic link in an ad your company runs.
The magic button takes a user to the messaging app (on any device) and autofills the campaign SMS draft for them. This lets them send an SMS with the campaign keyword with a single click (since the SMS draft always contains the keyword).
The magic button combines the call to action and magic link to make Text to Signup clear and easy for the user.
Examples:
The magic button works best for ONline ads — like on web pages and in emails — so that users can click the button. For offline ads, we recommend using the magic QR code.
Magic QR Code
Takes user to messaging app with SMS draft and phone number autofilled
The magic QR code takes a user to the messaging app (on any device) and autofills the campaign SMS draft for them. This lets them send an SMS with the campaign keyword with a single click (since the SMS draft always contains the keyword).
Examples:
The magic QR code works best for OFFline ads — like on billboards, in TV commercials, in marketing mail — so that users can scan the QR code. For online ads, we recommend using the magic link and magic button.
Powered by Graphic
You are contractually required to use the powered by Verified graphic wherever you use the other Text to Signup assets. This is necessary for compliance with SMS regulations.
The color of the graphic depends on the graphic color styling setting. We provide many variants:
"Powered By Verified" Graphic Variants
Black and Green:
White and Green:
Black:
White:
Gray:
Examples:
Consent Language
You are contractually required to use the exact consent language wherever you use the other Text to Signup assets. This is necessary for compliance with SMS regulations.
The consent language is:
Opt in to receive a verification link from Verified on behalf of
{Brand Name}. Msg & data rates may apply. One message per interaction. Reply HELP for help or STOP to opt out. See Terms at verified.inc/sms-terms and Privacy at verified.inc/privacy.
where {Brand Name} is your brand name. You can copy a customized version of this from the Dashboard.
Go Live!
If you did any integration work (as part of step 3): That involved using a Sandbox API key, and to go live you'll need to use a Production one:
Get Production Access
- Go to the Brand Details page for your brand in the Verified Dashboard.
- Click the Production tab in the upper right, and make sure your brand settings are configured as you intend them to be.
- Click the Request Approval button under the API Keys section.
- Complete the steps listed in the dialog.
- Click the dialog submit button.
You can use the Sync from Sandbox buttons to quickly port some setting configurations from Sandbox to Production. Note, however, that this is not possible for all settings: some need to be configured manually for Production.
Swap Sandbox for Production
Once you have Production access, just swap Sandbox for Production:
- Swap your Sandbox API key for your Production API key.
- Swap the Sandbox base URL for the Production base URL.
If you did NOT do any integration work: You don't need any API keys, because you're using Text to Signup in a no code way!
Replace the Sandbox campaign assets in your ads with Production ones. To access Production campaign assets:
- Go to the Brand Details page for your brand in the Verified Dashboard.
- Click the Production tab in the upper right.
- Click the Text to Signup tab in the middle.
Launch the ads on any relevant channels.
Then you'll be live with Text to Signup! ✅





