1. Recipes
VeloConnect API
  • Getting Started
    • Introduction
    • Quick start: send your first SMS
    • Authentication
    • Errors
    • Limits
    • Delivery reports
    • Addresses and formats
    • Code samples
    • Viber and WhatsApp push reports
    • Refusal reasons
    • Changelog
    • Recipes
      • One-time code by SMS
      • One-time code by Viber, with SMS as a fallback
      • A campaign, from contacts to result
      • Connect a CRM
  • Messaging API (API Key)
    • Send SMS
      • Send SMS
      • Send SMS (GET form)
      • Send SMS to many numbers
      • Send SMS to many numbers (GET form)
    • SMS Delivery Status
      • List SMS records
      • Get an SMS record
    • SMS Verification Codes
      • Send a verification code (GET form)
      • Send a verification code
      • Check a verification code (GET form)
      • Check a verification code
    • Sender Names
      • List sender names (GET form)
      • List sender names
      • Get sender name status (GET form)
      • Get sender name status
    • Balance & Prices
      • Check balance (GET form)
      • Check balance
      • List rate plans
    • Viber
      • Campaigns
        • Send a Viber campaign
        • List Viber campaigns
      • Contact Lists
        • Create a Viber contact list
        • List Viber contact lists
        • Delete a Viber contact list
        • Add contacts to a list
        • Update contacts in a list
        • Delete a contact from a list
        • List contacts in a list
      • Conversations
        • List Viber conversations
        • List messages of a conversation
      • Message Records
        • List Viber message records
        • Get a Viber message record
      • Totals
        • Get Viber message totals
      • One-Time Codes
        • Send a Viber one-time code
        • List Viber code templates
      • Senders
        • Get a Viber sender
        • List Viber senders
      • Templates
        • Create a Viber template
        • List Viber templates
        • Delete a Viber template
        • Get a Viber template
    • WhatsApp
      • Senders
        • List WhatsApp senders
      • Campaigns
        • Send a WhatsApp campaign
        • List WhatsApp campaigns
      • Contact Lists
        • Add WhatsApp contacts
        • List WhatsApp contacts
        • Delete a WhatsApp contact list
        • Create a WhatsApp contact list
        • List WhatsApp contact lists
      • Contacts
        • Update WhatsApp contacts
        • Delete a WhatsApp contact
      • Conversations
        • List conversation messages
        • List WhatsApp conversations
      • Messages
      • Templates
        • Delete a WhatsApp template
        • Create a WhatsApp template
        • List WhatsApp templates
  • Sign-In & Account
    • Team Members
    • Registration
    • Reference Data
    • Verification & Password
    • Two-Factor
    • Authentication
      • Sign in (for programs)
      • Refresh the login token
      • Sign out
    • Profile
      • Get your account profile
  • API Key & Allowed IPs
    • Get the API key
    • Replace the API key
    • Get the allowed IP addresses
    • Set the allowed IP addresses
  • Campaigns (v2)
    • Campaigns
      • Create a campaign
      • Export campaigns to CSV
      • List campaigns
      • Get a campaign
      • Update a campaign
    • Tools & Pricing
      • Count SMS parts
      • Calculate campaign price
      • Preview campaign recipients
    • Messages
    • Telegram
  • Contacts (v2)
    • Contacts
      • Create a contact
      • Export contacts
      • Import contacts from CSV
      • List contacts
      • Get a contact
      • Update a contact
      • Delete a contact
    • Details
      • Add a contact detail
      • Export contact details
      • List contact details
      • Update a contact detail
    • Messages
      • Export a contact's messages
      • List a contact's messages
  • Segments (v2)
    • Create a segment
    • Export segments to CSV
    • List segments
    • Get a segment
    • Update a segment
    • Delete a segment
    • Add contacts to a segment
    • Remove contacts from a segment
  • Dashboard (v2)
    • Get channel breakdown
    • Get headline statistics
    • Get OTP statistics
    • Get message trends
  • Templates & Content
    • Canned Responses
    • Templates
      • Create a message template
      • List message templates
      • Update a message template
      • Delete a message template
      • Get a message template
    • Uploads
  • Sender Names & Rates
    • Rates
      • List message rates
    • Sender Names
      • Request a sender name
      • List sender names
      • Delete a sender name
      • Get a sender name
    • Reference Data
      • List trunks
      • List mobile operators
  • SMS Messaging
    • Conversations
      • List SMS conversations
      • List conversation messages
    • Delivery Records
      • Export SMS records
  • Email Messaging
    • Delivery Records
      • Export e-mail records
      • List e-mail records
      • Get an e-mail record
    • Pricing
      • List e-mail prices
  • Notifications & Statistics
    • Notifications
    • Statistics
      • List balance history
      • Get sender name expenses
  • Payments
    • Payments
      • List payments
      • Get a payment
    • Provider Callbacks
  • Link Shortener
    • Links
      • Create a short link
      • Get a link by code
      • Get a link
      • Update a link
      • Delete a link
    • Webhooks
    • Redirect
      • Open a short link
    • Analytics
      • Get statistics for several campaigns
      • Get campaign statistics
      • Get contact statistics
      • Get link statistics
  • Social Platform
    • Connections
      • List social connections
      • Get a channel
      • Disconnect a channel
      • Check channel subscription status
      • Get a connection
      • Disconnect a connection
      • Check a connection token
      • Resync channels of a connection
      • List supported providers
    • Inbox
      • List conversations of an account
      • List conversations of a channel
      • Sync conversations of a channel
      • Get a conversation
      • Get conversation status history
      • Mark a conversation as read
      • List messages of a conversation
      • Reply to a conversation
      • Sync messages of a conversation
    • Facebook
    • Instagram
    • Telegram
  • Telephony
    • DID Numbers
      • Purchase & Provisioning
      • Assignments
      • Catalog
      • Compliance
      • Orders
      • Reservations
    • PBX Tenants
    • SIP Voice
      • Monitoring
      • Calls
      • Session
  • Schemas
    • TemplateFilteringSortingModel
    • SocialChannelType
    • V2ContactDetailType
    • CommunicationType
    • RateFilteringSortingModel
    • PagedListGetModelOfV2ContactGetModel
    • SuccessResponseModelOfPagedListGetModelOfRateGetModel
    • SenderIdFilteringSortingModel
    • V2CampaignChannelGetModel
    • V2CampaignExportRequestModel
    • WebhookSubscriptionStatusDto
    • SocialProvider
    • V2CampaignChannelUpdateModel
    • SuccessResponseModelOfSenderIdGetModel
    • V2SegmentUpdateModel
    • V2ContactCsvDuplicateModel
    • PagedListGetModelOfRateGetModel
    • V2ContactMessageExportRequestModel
    • V2DashboardTrendsChannelModel
    • DataRecordFilterModel
    • SyncConversationsResponseDto
    • ClickEventDto
    • PagedListGetModelOfV2CampaignListItemModel
    • SocialConnectionDto
    • ErrorResponseModel
    • V2ContactCreateModel
    • V2SegmentContactsUpdateModel
    • TokenStatus
    • SuccessResponseModelOfV2ContactCsvImportResultModel
    • SuccessResponseModelOfEmailPriceGetModel
    • CustomerUserGetModel
    • V2ContactCsvImportResultModel
    • V2ContactDetailCreateModel
    • V2CampaignUpdateModel
    • SocialConversationDto
    • UnifiedInboxDto
    • ProviderType
    • CustomerUserLoginModel
    • SuccessResponseModelOfCustomerUserLoginResultModel
    • SuccessResponseModelOfV2CampaignGetModel
    • SuccessResponseModelOfPagedListGetModelOfSmsConversationGetModel
    • V2ContactDetailUpdateModel
    • V2ContactUpdateModel
    • WhatsAppStatus
    • PagedListGetModelOfPaymentGetModel
    • V2ContactDetailExportRequestModel
    • EmailDataRecordGetModel
    • SmsConversationGetModel
    • SenderIdType
    • LinkAnalyticsResponse
    • CustomerUserLoginResultModel
    • V2ContactMessageListFilterModel
    • FilterComparer
    • SuccessResponseModelOfV2SegmentGetModel
    • PagedListGetModelOfV2ContactDetailGetModel
    • SenderIdGetModel
    • PaymentDirection
    • TrafficType
    • UpdateLinkRequest
    • SuccessResponseModelOfPagedListGetModelOfV2CampaignListItemModel
    • WhatsAppTemplateCategory
    • PagedListGetModelOfSmsConversationGetModel
    • V2SegmentListFilterModel
    • ConversationStatus
    • V2ExportMode
    • V2SegmentGetModel
    • V2ContactDetailListFilterModel
    • SuccessResponseModelOfStatisticSenderIdExpensesGetModel
    • SenderIdStatus
    • PagedListGetModelOfV2ContactMessageListItemModel
    • V2DashboardOtpStatsModel
    • SuccessResponseModelOfPagedListGetModelOfSenderIdGetModel
    • SuccessResponseModelOfStatisticBalanceGetModel
    • StatisticSenderIdExpensesGetModel
    • SocialMessageDto
    • AdminUserGetModel
    • PagedListGetModelOfTemplateGetModel
    • SuccessResponseModelOfPagedListGetModelOfTemplateGetModel
    • CreateLinkRequest
    • ProblemDetails_link
    • SenderIdTrafficTypeGetModel
    • V2CampaignListItemModel
    • SuccessResponseModelOfV2CampaignPricePreviewModel
    • MessageStatus
    • SenderIdTypeGetModel
    • SocialChannelDto
    • SuccessResponseModelOfPagedListGetModelOfAreaMccMncGetModel
    • SuccessResponseModelOfV2CampaignMessageInfoModel
    • TokenGetModel
    • V2CampaignChannelCreateModel
    • StatisticBalanceGetModel
    • V2CampaignPricePreviewModel
    • RateGetModel
    • SocialConversationStatusHistoryDto
    • SuccessResponseModelOfPaymentListGetModelOfPaymentGetModel
    • V2SegmentCreateModel
    • AreaMccMncFilterModel
    • SuccessResponseModelOfString
    • MessageDirection
    • TokenRefreshModel
    • PagedListGetModelOfEmailDataRecordGetModel
    • SocialProviderDto
    • EmailPriceGetModel
    • ResyncChannelsResponseDto
    • SenderIdMediaAttachmentGetModel
    • TemplateUpdateModel
    • SuccessResponseModelOfPagedListGetModelOfV2SegmentGetModel
    • IFormFile
    • V2CampaignGetModel
    • PagedListGetModelOfSenderIdPriceGetModel
    • SuccessResponseModelOfEmailDataRecordGetModel
    • PagedListGetModelOfV2SegmentGetModel
    • PartnerCustomerUserLoginModel
    • V2ContactExportRequestModel
    • SuccessResponseModelOfTokenGetModel
    • PaginationModel
    • SyncMessagesResponseDto
    • SuccessResponseModelOfIEnumerableOfLong
    • SuccessResponseModelOfPaymentGetModel
    • SortingModel
    • V2CampaignChannelSummaryModel
    • SenderIdPriceGetModel
    • V2SegmentExportRequestModel
    • V2DashboardKpisModel
    • SuccessResponseModelOfTemplateGetModel
    • V2CampaignMessageInfoModel
    • AreaMccMncGetModel
    • V2DashboardOtpChannelModel
    • CampaignAnalyticsListRequest
    • PaymentListGetModelOfPaymentGetModel
    • ReplyMessageResponseDto
    • V2ContactDetailGetModel
    • V2DashboardChannelBreakdownModel
    • ContactAnalyticsResponse
    • SuccessResponseModelOfLong
    • LinkResponse
    • SuccessResponseModelOfCustomerUserGetModel
    • V2ContactGetModel
    • SuccessResponseModelOfBoolean
    • V2ContactDetailStatus
    • SuccessResponseModelOfPagedListGetModelOfSenderIdPriceGetModel
    • V2CampaignChannelPricePreviewModel
    • PagedListGetModelOfSenderIdGetModel
    • V2DashboardTrendsDataPointModel
    • TemplateGetBaseModel
    • SenderIdViberLogoGetModel
    • V2DashboardChannelFunnelModel
    • TemplateGetModel
    • ConversationStatusHistoryActionType
    • PaymentGetModel
    • V2CampaignListFilterModel
    • CustomerTrunkBaseGetModel
    • CampaignAnalyticsResponse
    • V2CampaignCreateModel
    • BusinessType
    • PaymentFilterModel
    • V2CampaignMessageInfoRequest
    • TemplateMediaAttachmentGetModel
    • SuccessResponseModelOfV2CampaignRecipientPreviewModel
    • FilteringModel
    • MessageType
    • SuccessResponseModelOfPagedListGetModelOfV2ContactMessageListItemModel
    • TemplateStatus
    • SuccessResponseModelOfCustomerTrunkBaseGetModel
    • FilteringSortingModel
    • V2ContactListFilterModel
    • V2DashboardTrendsModel
    • V2ContactMessageListItemModel
    • ConversationFilteringSortingModel
    • SuccessResponseModelOfPagedListGetModelOfEmailDataRecordGetModel
    • V2CampaignRecipientPreviewModel
    • SuccessResponseModelOfV2ContactGetModel
    • SuccessResponseModelOfPagedListGetModelOfV2ContactDetailGetModel
    • SortDirection
    • PagedListGetModelOfAreaMccMncGetModel
    • V2CampaignUnresolvableRecipientModel
    • RateDetailGetModel
    • RefreshTokenResponseDto
    • SuccessResponseModelOfPagedListGetModelOfV2ContactGetModel
  1. Recipes

One-time code by SMS

Confirm that a person owns a phone number: send a code by SMS, then check what they type.
There are two ways.
You make the code (recommended)We make the code
CallsSend SMSSend a verification code, then Check a verification code
The SMS textAny text you writeThe 4-digit code alone
Who checks the codeYou doWe do
Best forYour own wording, your brand in the text, your own code length and rulesA quick first test

Way 1: you make and check the code#

1
Make a code and remember it
Make a random code on your server, for example six digits, with a secure random generator. Keep it with the
person's session together with the time and a counter of wrong tries.
2
Send it
Send it in your own text with sms_type set to T, which is the price plan for one-time codes:
{"message_id": 1284417, "status": "S", "remarks": "Message submitted successfully", "uid": "login-8841",
  "client_costs": [{"phonenumber": "+37491234567", "cost": 0.021}]}
If status is F, nothing was sent and remarks says why: see Refusal reasons.
3
Check what the person typed
Compare it with the code you kept. Accept it once, then delete it.

Way 2: we make and check the code#

1
Send the code
{"verification_id": 7731, "status": "S", "remarks": "Verification code sent successfully"}
Keep verification_id in the person's session. If status is F, nothing was sent and remarks says why.
2
Check what the person typed
The two field names are spelt verfication_id and verfication_code in this call, and the code is sent as a
number.
{"verfication_id": 7731, "status": "V", "remarks": "Verification Code is Verified"}
V means the code is right. F means the check failed. If a person is sure the code is right and the check
still answers F, send them a new code.

Do this in both ways#

Protect the check on your side
Count wrong tries for each code and stop after a few, for example five. Then make the person ask for a new code.
Treat a code as expired after a few minutes, for example five. The check call itself sets no time limit.
Limit how often one phone number and one visitor can ask for a code. This protects your balance from people
who press "send again" in a loop.
If the SMS call answers 429, wait the seconds in Retry-After and send again. See Limits.
To learn whether the SMS arrived, see Delivery reports.
Viber is usually cheaper and faster where people use it: see One-time code by Viber.
Modified at 2026-10-08 11:10:42
Previous
Changelog
Next
One-time code by Viber, with SMS as a fallback
Built with