1. Getting Started
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. Getting Started

Viber and WhatsApp push reports

For Viber and WhatsApp we can call your server when something happens: a message changes status, a person
writes to you, or WhatsApp reviews one of your templates. This page lists each push, its fields and the rules
for your receiver.
SMS works differently: you give callback_url in each send call. See
Delivery reports.

The five pushes#

PushSent whenSet its address in
Viber message statusA Viber message is delivered, seen, expires or failsViber Key → Webhook Message Status
Viber inbound messageA person writes to your Viber senderViber Key → Webhook Inbound
WhatsApp message statusA WhatsApp message is sent, delivered, read or failsWhatsApp Key → Webhook Message Status
WhatsApp inbound messageA person writes to your WhatsApp numberWhatsApp Key → Webhook Inbound
WhatsApp template statusWhatsApp approves, rejects or pauses a templateWhatsApp Key → Webhook Template Status

Set it up#

1.
Sign in to the dashboard at dashboard.veloconnect.me and open the API page.
2.
On the Viber Key or WhatsApp Key card, enter the address of your receiver for each push you want and
save. An empty field switches that push off.
3.
Copy the key shown on the card. We send it with every push so that you can recognise our calls.

What we send#

Every push is an HTTP POST with a JSON body and these headers:
Content-Type: application/json; charset=utf-8
X-VeloSMS-Token: 3f2b8c1e-5d47-4a9b-8e21-6c0d9f7a1b34
X-VeloSMS-Token holds your Viber Key for the two Viber pushes and your WhatsApp Key for the three
WhatsApp pushes. When you make a new key on the dashboard, the next push carries the new one.
Things that are the same in every body:
Field names start with a capital letter (ToPhoneNumber, Status).
Fields without a value are sent as null, not left out.
Dates are in UTC, written as ISO 8601, for example 2026-10-08T09:15:30.123456Z.
Some statuses and types are sent as numbers. The tables below give the meaning of each number.
Read the body with a JSON parser. Do not compare the raw text: letters outside the basic Latin alphabet and
the + sign are written as escapes such as +.
A body can hold more fields than this page lists. Use only the listed ones; the others are internal and can
change.

Rules for your receiver#

Each push is sent once
If your server is down or answers with an error, that push is not sent again. Treat pushes as a fast signal,
and read the records when a result matters: List Viber message records,
List WhatsApp campaigns.
Check the key. Compare X-VeloSMS-Token with your key and answer 401 when it differs. The body is not
signed, so this header is how you know the call is ours. Use an https:// address so the key cannot be read
on the way.
Answer HTTP 200 within a few seconds. Save the body, answer, and do slow work afterwards.
Expect repeats and any order. The same event can arrive twice, and two events for one message can
arrive out of order. Make your handler safe to run twice.
Not every message is pushed. Pushes cover messages sent with the Viber and WhatsApp calls of the
Messaging API. Messages sent with Campaigns (v2) and replies sent from the inbox are not pushed; read their
result with the campaign and record calls.

Viber message status#

Sent when a Viber message changes status. There is no push when a message is merely accepted for sending; the
first push for a good message comes when Viber reports on it.
{
  "CampaignId": 7731,
  "From": "MyBrand",
  "ToPhoneNumber": "37491234567",
  "SendDate": "2026-10-08T09:15:30.123456Z",
  "Price": 0.02,
  "Currency": "USD",
  "Status": 1,
  "Message": "Hello Anna, your order is ready.",
  "ActionUrl": null,
  "AttachmentUrl": null,
  "AttachmentType": null,
  "CreatedAt": "2026-10-08T09:15:30.123456Z"
}
FieldTypeMeaning
CampaignIdintegerThe id you got when you sent: data[0] of Send a Viber campaign, or data[0].ids[0] of Send a Viber one-time code.
ToPhoneNumberstringThe recipient.
FromstringYour sender name.
StatusintegerSee the table below.
SendDatedate-time or nullWhen we sent the message.
Price, Currencynumber, string or nullWhat the message cost you.
Messagestring or nullThe text.
ActionUrl, AttachmentUrl, AttachmentTypestring or nullThe button link and the attachment of the message, if it had them.
CreatedAtdate-timeWhen the message record was made.
To find the message on your side, use CampaignId together with ToPhoneNumber. Do not use Id: it is 0
for a message that failed at sending.
StatusNameMeaning
0DeliveredThe message reached the phone.
1SeenThe person opened it.
2ExpiredIt was not delivered before it ran out of time.
99SendFailedThe send was refused. Nothing was delivered.
100SentViber took the message; no delivery result yet.
8, 9DefaultAutoReply, CustomAutoReplyAutomatic-reply events. You can ignore them.
After a person replies to a message, later status changes of that message are no longer pushed.

Viber inbound message#

Sent when a person writes to your Viber sender.
{
  "ChatId": "3f2b8c1e-5d47-4a9b-8e21-6c0d9f7a1b34",
  "From": "37491234567",
  "To": "MyBrand",
  "UserName": "Anna Petrosyan",
  "Type": 1,
  "Message": "Yes, please.",
  "AttachmentUrl": null,
  "AttachmentType": null,
  "ReceivedAt": "2026-10-08T09:20:05Z"
}
FieldTypeMeaning
ChatIdstringThe id of the conversation. Use it with List messages of a conversation.
FromstringThe person's phone number.
TostringYour sender name.
UserNamestring or nullThe name of the matching contact in your contact list. A single space when there is none.
Typeinteger1 text, 2 image, 3 video, 4 file, 7 video with text.
Messagestring or nullThe text.
AttachmentUrlstring or nullA temporary link to the picture, video or file. Download it at once; the link stops working after a short time.
AttachmentTypestring or nullImage, Video or File.
ReceivedAtdate-timeWhen the message arrived.
An answer to an opt-in invitation is recorded as an opt-in and is not pushed.

WhatsApp message status#

Sent when WhatsApp reports on a message you sent.
{
  "Id": 30977,
  "CampaignId": 7802,
  "PhoneNumber": "37491234567",
  "Country": "AM",
  "SendDate": "2026-10-08T09:25:10.654321Z",
  "Price": 0.05,
  "Currency": "USD",
  "Status": "delivered",
  "WhatsAppMessageId": "wamid.SAMPLE0000000000000001",
  "Message": "Hello Anna, your order is ready.",
  "CreatedAt": "2026-10-08T09:25:10.654321Z"
}
FieldTypeMeaning
IdintegerOur id of the message record.
CampaignIdintegerThe id you got from Send a WhatsApp campaign.
PhoneNumberstringThe recipient.
StatusstringThe status word as WhatsApp reports it: usually sent, delivered, read or failed. Compare it without regard to capital letters.
WhatsAppMessageIdstring or nullWhatsApp's id of the message. Together with Status it tells a repeat from a new event.
Messagestring or nullThe final text, with the template variables filled in.
SendDatedate-time or nullWhen we sent the message.
Price, Currency, Countrynumber, string or nullWhat the message cost you, and the country of the template.
CreatedAtdate-timeWhen the message record was made.
A failed message carries no reason in this push. There is no push at the moment of sending.

WhatsApp inbound message#

Sent when a person writes to your WhatsApp number. One push for each message.
{
  "Id": 55102,
  "ChatId": "8a1d2c3b-4e5f-4a6b-9c7d-0e1f2a3b4c5d",
  "FromPhoneNumber": "37491234567",
  "ToPhoneNumber": "37410123456",
  "Message": "Hi, is my order ready?",
  "ReceivedAt": "2026-10-08T09:25:41Z",
  "WhatsAppMedias": []
}
FieldTypeMeaning
IdintegerOur id of the message.
ChatIdstringThe id of the conversation. Use it with List conversation messages.
FromPhoneNumberstring or nullThe person's phone number.
ToPhoneNumberstring or nullYour WhatsApp number.
Messagestring or nullThe text. null for a picture, video, document, voice message or sticker; a caption is not included.
ReceivedAtdate-timeWhen the person sent it.
WhatsAppMediaslistThe attached files. Empty for a text message.
WhatsAppMedias[].UrlstringA download link that works for 24 hours. Download the file and keep your own copy.

WhatsApp template status#

Sent when WhatsApp reviews one of your templates or changes its state.
{
  "Id": 412,
  "Name": "order_ready",
  "Message": "Hello {{1}}, your order is ready.",
  "CreatedAt": "2026-10-01T08:00:00.123456Z",
  "ModifiedAt": "2026-10-08T09:30:12.3456789Z",
  "WhatsAppApprovalStatus": 2
}
FieldTypeMeaning
IdintegerThe id of the template, as in List WhatsApp templates.
NamestringThe name of the template.
MessagestringThe text of the template.
WhatsAppApprovalStatusinteger or nullThe state of the template at WhatsApp. See the table below.
ModifiedAtdate-time or nullWhen the state changed.
WhatsAppApprovalStatusNameCan you send with the template?
1PendingNot yet
2ApprovedYes
3RejectedNo
4PausedNo, until WhatsApp lifts the pause
5DisabledNo
6ArchivedNo
7PendingDeletionNo
8DeletedNo
9InAppealNot yet
10LimitExceededNo
The body also has a field named Status. Ignore it: only WhatsAppApprovalStatus follows WhatsApp's review.
The reason for a rejection is not part of the push.
Modified at 2026-10-08 11:10:56
Previous
Code samples
Next
Refusal reasons
Built with