Illustration showing how a business can use Verify to authenticate a user’s identity as an account security measure.

How it works

Diagram of how the Twilio Verify API works

Verify is a turnkey API for user verification. Add two-factor authentication across channels like SMS, email, WhatsApp, and TOTP or implement frictionless verification with Silent Network Authentication (SNA). 

Quickly integrate a one-time password authentication (OTP) solution that handles your connectivity, channels, code generation, fraud monitoring, and prevention.

Use cases 

Trusted user verification with a delightful user experience.

Login protection 

Protect users from account takeovers by sending verification codes upon login as a method of two-factor authentication (2FA).


Stripe keeps millions of users secure by asking them to verify their identities quickly and easily over phone calls or SMS with Verify.

Twilio Verify logo

~70%

of user verifications handled by Twilio Verify

Bar Graph showing an increase

6 point

improvement in login success rates in the US

Stripe login protection using Twilio Verify

Features

Global user verification is hard—Verify makes it easy.

Protect and grow your business
New Feature

Stop expensive SMS pumping fraud with Fraud Guard

Fraud Guard has already saved customers over $36 million by blocking over 175 million* fraud attempts. With first-to-market innovation, Fraud Guard offers a 100% guarantee against SMS pumping fraud.

Learn more about Fraud Guard

  • Phone number management

    Verify procures and manages short codes, long codes, toll free, and global alpha-sender IDs to accelerate global expansion.

  • Carrier-approved templates

    Improve delivery rates with carrier-approved messages templates that automatically translate across 42 languages.

  • Actionable insight

    Dashboards provide conversion and success rates per region and channel, as well as SMS fraud trends to optimize against fraud.

  • Silent Network Authentication

    Secure authentication to protect end users, accounts, and transactions without requiring users to wait or leave your app.

  • PII-less, HIPAA-certified, SOC 2 Type 2

    Develop compliant healthcare and financial service applications that do not require users to provide personally identifiable information (PII).

  • Push authentication

    Embed push functionality in your apps easily.

  • Route optimization

    Verify uses premium telephony routes on Twilio's Super Network to prioritize deliverability and speed.

  • Rate limiting

    Verify's built-in platform protection for service rate limits give you turnkey protections with flexibility.

  • Multiple delivery channels

    OTP delivery via SMS, WhatsApp, voice, and email, all managed through a single API.

  • Global reach

    Verify manages the complexity of changing carrier and government regulations in 200+ regions and countries.

Get started with code

Integrate Verify into your app in as little as one sprint with its developer-first APIs and client libraries for a quick and confident deployment.

# Download the helper library from https://www.twilio.com/docs/ruby/install
require 'rubygems'
require 'twilio-ruby'

# Find your Account SID and Auth Token at twilio.com/console
# and set the environment variables. See http://twil.io/secure
account_sid = ENV['TWILIO_ACCOUNT_SID']
auth_token = ENV['TWILIO_AUTH_TOKEN']
@client = Twilio::REST::Client.new(account_sid, auth_token)

verification = @client.verify
                      .v2
                      .services('VAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX')
                      .verifications
                      .create(to: '+15017122661', channel: 'sms')

puts verification.sid
# Download the helper library from https://www.twilio.com/docs/python/install
import os
from twilio.rest import Client


# Find your Account SID and Auth Token at twilio.com/console
# and set the environment variables. See http://twil.io/secure
account_sid = os.environ['TWILIO_ACCOUNT_SID']
auth_token = os.environ['TWILIO_AUTH_TOKEN']
client = Client(account_sid, auth_token)

verification = client.verify \
                     .v2 \
                     .services('VAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX') \
                     .verifications \
                     .create(to='+15017122661', channel='sms')

print(verification.sid)
<?php

// Update the path below to your autoload.php,
// see https://getcomposer.org/doc/01-basic-usage.md
require_once '/path/to/vendor/autoload.php';

use Twilio\Rest\Client;

// Find your Account SID and Auth Token at twilio.com/console
// and set the environment variables. See http://twil.io/secure
$sid = getenv("TWILIO_ACCOUNT_SID");
$token = getenv("TWILIO_AUTH_TOKEN");
$twilio = new Client($sid, $token);

$verification = $twilio->verify->v2->services("VAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
                                   ->verifications
                                   ->create("+15017122661", "sms");

print($verification->sid);
// Download the helper library from https://www.twilio.com/docs/node/install
// Find your Account SID and Auth Token at twilio.com/console
// and set the environment variables. See http://twil.io/secure
const accountSid = process.env.TWILIO_ACCOUNT_SID;
const authToken = process.env.TWILIO_AUTH_TOKEN;
const client = require('twilio')(accountSid, authToken);

client.verify.v2.services('VAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX')
                .verifications
                .create({to: '+15017122661', channel: 'sms'})
                .then(verification => console.log(verification.sid));
// Install the Java helper library from twilio.com/docs/java/install

import com.twilio.Twilio;
import com.twilio.rest.verify.v2.service.Verification;

public class Example {
    // Find your Account SID and Auth Token at twilio.com/console
    // and set the environment variables. See http://twil.io/secure
    public static final String ACCOUNT_SID = System.getenv("TWILIO_ACCOUNT_SID");
    public static final String AUTH_TOKEN = System.getenv("TWILIO_AUTH_TOKEN");

    public static void main(String[] args) {
        Twilio.init(ACCOUNT_SID, AUTH_TOKEN);
        Verification verification = Verification.creator(
                "VAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
                "+15017122661",
                "sms")
            .create();

        System.out.println(verification.getSid());
    }
// Download the helper library from https://www.twilio.com/docs/go/install
package main

import (
	"fmt"
	"github.com/twilio/twilio-go"
	verify "github.com/twilio/twilio-go/rest/verify/v2"
)

func main() {
	// Find your Account SID and Auth Token at twilio.com/console
	// and set the environment variables. See http://twil.io/secure
	client := twilio.NewRestClient()

	params := &verify.CreateVerificationParams{}
	params.SetTo("+15017122661")
	params.SetChannel("sms")

	resp, err := client.VerifyV2.CreateVerification("VAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", params)
	if err != nil {
		fmt.Println(err.Error())
	} else {
		if resp.Sid != nil {
			fmt.Println(*resp.Sid)
		} else {
			fmt.Println(resp.Sid)
		}
	}
}
curl -X POST "https://verify.twilio.com/v2/Services/VAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Verifications" \
--data-urlencode "To=+15017122661" \
--data-urlencode "Channel=sms" \
-u $TWILIO_ACCOUNT_SID:$TWILIO_AUTH_TOKEN
// Install the C# / .NET helper library from twilio.com/docs/csharp/install

using System;
using Twilio;
using Twilio.Rest.Verify.V2.Service;


class Program
{
    static void Main(string[] args)
    {
        // Find your Account SID and Auth Token at twilio.com/console
        // and set the environment variables. See http://twil.io/secure
        string accountSid = Environment.GetEnvironmentVariable("TWILIO_ACCOUNT_SID");
        string authToken = Environment.GetEnvironmentVariable("TWILIO_AUTH_TOKEN");

        TwilioClient.Init(accountSid, authToken);

        var verification = VerificationResource.Create(
            to: "+15017122661",
            channel: "sms",
            pathServiceSid: "VAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
        );

        Console.WriteLine(verification.Sid);
    }
}

Need help setting up Verify?

Bring your ideal solution to life with technology partners and top-tier consulting partners like Deloitte Digital, Perficient, and more. View partners

Why Twilio Verify

A simple verification solution to cut operational costs and increase OTP conversions.

70% lower

cost-per-user and support costs with real-time identity signals*

$36 million

saved by Verify Fraud Guard*

4.5 billion

validations per year **

40% increase

in conversion rates with SNA and Push***

Free trial and pricing. No credit card required.

Sign up for a free trial to get started. Then move to a pay-as-you go plan where you only pay for each successful verification.

* based on Twilio's publicly available price list as of 7/14/2023

** Curve results with Twilio

*** Twilio 2023 internal data