Overview
Authentication templates are purpose-built for verification codes:- High delivery rates - WhatsApp messages have 98%+ open rates
- Instant delivery - Codes arrive in seconds
- User-friendly - Copy button or auto-fill on Android
- Cost-effective - Lowest messaging rates of all template categories
- Secure - End-to-end encrypted delivery
Prerequisites
Before creating OTP templates, ensure you have:Meta Business Verification
Your Meta Business account must be verified
WhatsApp Connected
A sender with WhatsApp Business Account configured
Payment Method
Valid payment method configured in Meta Business Manager
API Key
A Zavu API key for your project
Step 1: Create OTP Template
Via Dashboard
- Navigate to Senders in your dashboard
- Select the sender with WhatsApp connected
- Go to the Templates tab
- Click Create Template
- Configure the template:
- Name: Use a descriptive name like
otp_verification - Channel: Select WhatsApp only
- Category: Select AUTHENTICATION
- Language: Choose your language (e.g.,
en)
- Name: Use a descriptive name like
- Configure the OTP button:
- Button Type: Choose
Copy CodeorOne-Tap(Android only)
- Button Type: Choose
- Optional settings:
- Enable Security Recommendation to add “Do not share this code”
- Set Code Expiration (1-90 minutes)
- Click Create
Via API
Meta auto-generates the message body for authentication templates. The format is always:
{{1}} is your verification code. followed by optional security text and expiration.Step 2: Submit for Meta Approval
Authentication templates typically receive fast approval (within hours).Via Dashboard
- Go to Senders > Select sender > Templates tab
- Find your template with “Draft” status
- Click the … menu and select Submit for Approval
Via API
Expected Approval Time
| Template Type | Typical Approval Time |
|---|---|
| AUTHENTICATION | 1-4 hours |
| UTILITY | 24-48 hours |
| MARKETING | 24-72 hours |
Step 3: Send OTP Messages
Once approved, send verification codes to users:What the User Sees
The user receives a message like:OTP Button Types
COPY_CODE (Recommended)
The Copy Code button allows users to tap and copy the code to their clipboard.- Works on all platforms (iOS, Android, Web)
- Simple user experience
- No additional configuration required
ONE_TAP (Android Only)
The One-Tap button enables automatic code filling in your Android app.- Android app only
- Must provide
packageName(Android package name) - Must provide
signatureHash(Android app signature hash)
- In your Android app, use the SMS Retriever API helper:
- The hash is an 11-character string like
K8a+W1234ab
Template Options
Security Recommendation
Add a security disclaimer to your OTP message:Code Expiration
Display when the code expires:Best Practices
Use Short Expiration
Set expiration to 5-10 minutes for security. Shorter is better.
Enable Security Warning
Always enable
addSecurityRecommendation to protect users from phishing.Generate Secure Codes
Use cryptographically secure random number generators for OTP codes.
Rate Limit Requests
Limit OTP requests per user to prevent abuse (e.g., 5 per hour).
OTP Code Guidelines
- Use 6-digit numeric codes for balance of security and usability
- Generate codes using secure random functions
- Store codes with expiration timestamps
- Invalidate codes after successful verification
- Limit verification attempts (e.g., 3 tries per code)
Common Issues
| Issue | Solution |
|---|---|
| Template rejected | Ensure category is AUTHENTICATION and content is purely verification-related |
| Code not displaying | Check that variable {{1}} is provided in templateVariables |
| One-Tap not working | Verify packageName and signatureHash are correct for your Android app |
| Slow delivery | Check recipient’s WhatsApp status and your sender’s quality rating |
| Button not showing | Ensure the template has buttons configured with OTP type |
Webhook Events
Track OTP delivery status via webhooks:message.sent- OTP accepted by WhatsAppmessage.delivered- OTP delivered to devicemessage.failed- Delivery failed