Verify users in seconds

Send a one-time password by SMS or email with a single API call. Verifications generates and sends the code, then checks the one that the user types back.

Code generation, expiry, and rate limits in one API

To verify a phone number or an email address, your application needs a code generator, secure storage for the codes, an expiry check, and a rate limit. Verifications generates, stores, expires, and rate-limits those one-time codes for you through a single API.

How Verifications sends and checks a code

SMS verification

Verifications puts each SMS code on a priority route, ahead of the standard message queue, and sends it to mobile phones worldwide. The recipient's phone receives the code within seconds.

Email verification

Verifications sends email codes through the email infrastructure of Messaging, so the codes have the same inbox placement as your other email. You can brand the template to match the design of your application.

Configurable expiration

Set a code to expire after anything from 1 minute to 24 hours. Verifications rejects a code after it expires, so the check call is the only validation that your application makes.

Rate limiting

Verifications sets a rate limit on each phone number and each email address with no configuration, which caps how many guesses a brute-force script can make.

Secure code generation

Verifications generates each code on Conjoin's servers from a cryptographically secure random source, 4 to 8 characters long, with digits, letters, or both. Conjoin stores each code, while your application receives only the result of each check.

Resend handling

When a code expires or the user does not receive it, your application can call resend. Verifications then invalidates the earlier code and sends a new one with a fresh expiry time.

Global delivery

Messaging picks the SMS carrier and the email route for each recipient of a code, in any of more than 200 countries. Delivery rate and latency are consistent across those countries.

Delivery confirmation

Verifications reports the delivery status of each code as the status changes, so your application can offer a resend as soon as a delivery fails.

< 5s
Median delivery

Time from API call to code receipt

99.2%
Verification rate

Verifications that end with an approved code

Global
Coverage

200+ countries for SMS and email codes

Build faster with solutions designed for real-world needs

Send a signup code by SMS on the priority route

When your signup form creates a verification, Verifications sends the SMS code on its priority route, so the user can enter the code while the signup page is still open.

Impact

The sample texts a 6-digit Caldermark Pottery signup code that expires after 5 minutes. Verifications puts the code in place of the {{token}} placeholder in the message body.

Prompt for a coding agent: Text a 6-digit signup code that expires after 5 minutes.

Conjoin IDE

Select a file to view its contents

One call returns approved, expired, invalid, or max attempts exceeded

Pass the code that the user enters to verifications.check. Verifications compares it against the expiry time, the limit on tries, and the stored code, then returns one status: approved, expired, invalid, or max attempts exceeded.

Impact

The sample checks the code 482910 and blocks the Plumstead Cycles signup with an error unless Verifications returns approved.

Prompt for a coding agent: Check the signup code, and block the signup unless Verifications approves it.

Conjoin IDE

Select a file to view its contents

Verify an email address with a code that the user types in

Verifications sends the code from pre-warmed IP addresses for the user to type into the page that they are on. The email therefore needs no verification link, which spam filters can treat as suspicious.

Impact

The sample emails Indira Subramanian a 6-character Karunia Travel code of digits and uppercase letters that expires after 10 minutes.

Prompt for a coding agent: Email a 6-character verification code that expires after 10 minutes.

Conjoin IDE

Select a file to view its contents

Block verification abuse with built-in rate limits

Each phone number and each email address has its own limit on verification requests. Verifications answers a request over that limit with an error and a Retry-After header, which gives the time when your application can try again.

Impact

The sample resends the code for one Bowscale Bookshop verification, then logs how many tries that verification uses against its maximum.

Prompt for a coding agent: Resend the verification code, and log how many of its tries the user has used.

Conjoin IDE

Select a file to view its contents

Build your next app on Conjoin

Conjoin will open with a free Build tier, while the pricing page already lists the launch prices for Pro and Business. If you tell us what you're building, we'll talk you through early access.