Skip to main content
POST
Start phone verification

How it works

Some flows need the user’s phone OTP-verified — for example, card attachment lists phone_number under user_info_required. Same embedded pattern as connect: we send the code, your UI collects it, you verify it server-to-server.
  • If the user already has a verified phone that’s still fresh, the response is already_verified — nothing more to collect.
  • Pass phone_number only when the user has no phone on file. US numbers only (+1XXXXXXXXXX).
  • A verification stays fresh for 60 days; after that, run this flow again when a phone is required.

Authorizations

Authorization
string
header
required

A platform access token. Get one on the Create an access token endpoint by exchanging your client_id + client_secret, then send it as Authorization: Bearer <token>. Tokens live one hour.

Body

application/json
user_id
string
required
phone_number
string

E.164 US number (+1XXXXXXXXXX). Used only when the user has no phone on file.

Response

sent (code on its way) or already_verified (nothing to do — proceed to fund).

object
string
Allowed value: "phone_verification"
status
enum<string>
Available options:
sent,
already_verified,
verified
channel
enum<string>

Where the code was sent (status sent only).

Available options:
sms,
email
phone
string

The masked destination number (status sent only).

expires_in_seconds
integer

How long the code stays valid (status sent only).