AltScore
Nodes

OTP Verification

OTP Verification signs an Authorization with a one-time code. It's the second half of a two-step consent process: first, Opt-In presents terms and creates the Authorization when the customer accepts; then OTP Verification sends a code and, when entered correctly, applies the customer's signature to that Authorization.

The distinction matters. This node doesn't verify that a phone number belongs to someone — that's what POC Verification does. OTP Verification proves identity for the purpose of signing a specific authorization record. The output is a signed Authorization in the Authorizations API, not a verified contact.

The Two-Step Pattern

Opt-In and OTP Verification work as a pair. Opt-In displays consent terms and creates an Authorization when the customer taps "Accept". It stores the authorization ID in a variable. OTP Verification then references that variable, sends a code to the customer, and marks the Authorization as signed when they enter it correctly.

The authorization ID variable is the link between them. Whatever variable name Opt-In uses to store the authorization ID, OTP Verification must reference the same variable.

Contact Source Options

The node needs to know where to send the code. Five options are available.

WhatsApp number uses the phone number the customer is currently messaging from. This is the most common choice — the customer is already in this conversation, so they'll receive the code here or via SMS to the same number.

Stored phone POC looks up the borrower's phone Point of Contact record. This requires the borrower to have a phone POC already created, typically via Create Entity earlier in the flow.

Stored email POC does the same for email contacts.

Variable pulls the contact value from a flow variable. Useful when you've collected a phone number or email through Ask Phone or Ask Email but haven't yet created a POC record.

Manual uses a hardcoded value. Rare in production, but useful for testing.

Delivery Channel

Separate from where the contact comes from, you choose how to deliver the code: SMS, WhatsApp, or email. A common pattern sends to the WhatsApp number but delivers via SMS — the customer gets a text message to the same phone they're chatting on.

The templateId specifies which message template to use for delivering the code. This template must exist in your system's configuration.

Backup Methods

When enabled, backup methods provide fallback delivery if the primary channel fails or the customer reports not receiving the code. Configure a list of alternative contact sources and channels. If the customer clicks "I didn't receive it", the system tries the next method in the list.

A typical setup: primary delivery via SMS to the WhatsApp number, backup delivery via WhatsApp message to the same number. Different channel, same destination — sometimes one gets through when the other doesn't.

Configuration

OptionDescription
Authorization ID VariableVariable containing the authorization ID from Opt-In
Contact SourceWhere to get the contact: WhatsApp number, stored POC, variable, or manual
Template ChannelHow to deliver the code: SMS, WhatsApp, or email
templateIdMessage template for the OTP delivery
retryTimeoutSecondsSeconds before resend is allowed (default: 60)
expirationTimeoutSecondsHow long the code remains valid (default: 60)
Max AttemptsWrong code attempts before routing to timeout (default: 3)
Enable Backup MethodsWhether to offer fallback delivery options

Configuration tab

Configuration tab continued

Advanced tab

Output Handles

HandleWhen
ContinueCode verified, authorization signed
Timeout/Max AttemptsToo many wrong codes or code expired
ErrorAuthorization not found, template missing, system failure

OTP Verification vs POC Verification

Both nodes send codes and wait for responses. The difference is what they're verifying.

OTP Verification signs an Authorization. It requires an authorization ID from a previous Opt-In node, and when successful, that Authorization record gets marked as signed. The contact used is incidental — it's just the delivery mechanism.

POC Verification confirms contact ownership. It requires a stored Point of Contact record and, when successful, marks that POC's isVerified field as true. There's no authorization involved.

If you need documented consent with a signature trail, use the Opt-In → OTP Verification pattern. If you just need to confirm a phone number or email belongs to the customer, use POC Verification.

Prerequisites

The authorization must already exist. This means an Opt-In node must have executed earlier in the conversation, the customer must have accepted the terms, and the authorization ID must be stored in the variable you reference. If any of these conditions aren't met, the node routes to the error handle.

For stored POC contact sources, the borrower must have a matching Point of Contact record. For variable sources, the referenced variable must contain a valid phone number or email.

Things to Know

The customer flow is interactive. The node first shows a message saying a code was sent, with two buttons: "I have the code" and "I didn't receive it". Only after clicking the first button does the customer get prompted to enter the code. This gives them time to check their messages.

Retry timing matters. The retryTimeoutSeconds controls how long before a resend is allowed. Setting this too low risks duplicate codes causing confusion; too high and frustrated customers give up.

Expiration and max attempts both route to the same handle. Whether the code expired or the customer entered wrong codes too many times, the result is the same: the timeout/max attempts output. Design your flow to handle both cases — typically a message explaining what happened and an option to restart the process.

On this page