Verigator API

REST API to send one-time passwords worldwide instantly with SMS, WhatsApp, and Viber.


A dedicated service for delivering One-Time Passwords (OTPs) with the highest quality worldwide.

  • No time-consuming registration processes
  • SMS, Viber, and WhatsApp
  • Improved performance by up to 30%
Learn more about Verigator
How Verigator works

Looking to send marketing or transactional SMS messages? Use our Omnichannel API instead.

1. Enable Verigator

Verigator is currently in early access and we have to manually enable it before you can start using it.

Contact us to start using Verigator

2. Install a suitable library

The fastest way to get started with the API is to use our official libraries.

Select your preferred programming language and follow the instructions.

With PIP

To install the API client library, simply execute:

pip install messente-api

Or with Setuptools

To install the API client library, simply execute:

python install --user

then import the package:

import messente_api

Take a look at the library's GitHub and PyPI pages.

Install with npm

npm i messente_api

Take a look at the library's GitHub and npm pages.

Install with composer

composer require messente/messente-api-php

Take a look at the library's GitHub and packagist pages.

Maven users

Allow fetching messente-api from jcenter by placing a settings.xml file to ~/.m2 maven folder containing

<?xml version="1.0" encoding="UTF-8" ?>
<settings xsi:schemaLocation=""

To install the API client library to your local Maven repository, add the dependency to your project's POM


and execute

mvn clean install

Gradle users

Add jcenter repository

repositories { jcenter() }

to your project's build file.

Also add the dependency to your project's build file

dependencies { implementation 'com.messente.api:messente-api' }


At first generate the JAR by executing:

mvn package -Dmaven.javadoc.skip=true

Then manually install the following JARs:

  • target/messente-api-$VERSION_NUMBER.jar
  • target/messente-api-$VERSION_NUMBER-sources.jar
  • target/lib/*.jar

Take a look at the library's GitHub and Bintray pages.

Install the library with gem.

gem install messente_api

Take a look at the library's GitHub page and RubyGems pages.

Install using NuGet

Install-Package com.Messente.Api

Take a look at the library's GitHub and NuGet pages.

3. Send the OTP like any other SMS

Message content must match exactly the format "XXXX is your verification code".

Once you send the message as SMS then it is automatically converted to multi-channel Verigator solution.

The order of the messages are determined by Messente based on hig

"XXXX" can be any digit between 1-10 characters long

# pip install messente-api

from pprint import pprint
from messente_api import OmnimessageApi, SMS, Omnimessage, Configuration, ApiClient
from import ApiException

configuration = Configuration()
configuration.username = "YOUR_MESSENTE_API_USERNAME"
configuration.password = "YOUR_MESSENTE_API_PASSWORD"

api_instance = OmnimessageApi(ApiClient(configuration))

sms = SMS(sender="<sender name (optional)>", text="1234 is your verification code")

omnimessage = Omnimessage(messages=tuple([sms]), to="<recipient_phone_number>")

    response = api_instance.send_omnimessage(omnimessage)
        "Successfully sent OTP with id: %s that consists of the following messages:"
        % response.omnimessage_id
    for message in response.messages:
except ApiException as exception:
    print("Exception when sending an omnimessage: %s\n" % exception)
// npm i messente_api

const MessenteApi = require('messente_api');

const defaultClient = MessenteApi.ApiClient.instance;
const basicAuth = defaultClient.authentications['basicAuth'];
basicAuth.username = 'YOUR_MESSENTE_API_USERNAME';
basicAuth.password = 'YOUR_MESSENTE_API_PASSWORD';

const api = new MessenteApi.OmnimessageApi();

const sms = MessenteApi.SMS.constructFromObject({
  sender: '<sender name (optional)>',
  text: '1234 is your verification code',

const omnimessage = MessenteApi.Omnimessage.constructFromObject({
  messages: [sms],
  to: '<recipient_phone_number>',

api.sendOmnimessage(omnimessage, (error, data) => {
  if (error) {
  } else {
    console.log('API called successfully. Returned data: ', data);

// composer require messente/messente-api-php

require_once __DIR__.'/vendor/autoload.php';

use Messente\Api\Api\OmnimessageApi;
use Messente\Api\Model\Omnimessage;
use Messente\Api\Configuration;
use Messente\Api\Model\SMS;

$config = Configuration::getDefaultConfiguration()

$apiInstance = new OmnimessageApi(
    new GuzzleHttp\Client(),

$omnimessage = new Omnimessage([
    'to' => '<recipient_phone_number>',

$sms = new SMS(
        'text' => '1234 is your verification code',
        'sender' => '<sender name (optional)>',


try {
    $result = $apiInstance->sendOmnimessage($omnimessage);
} catch (Exception $e) {
    echo 'Exception when calling sendOmnimessage: ', $e->getMessage(), PHP_EOL;
import com.messente.ApiClient;
import com.messente.ApiException;
import com.messente.api.OmniMessageCreateSuccessResponse;
import com.messente.api.Omnimessage;
import com.messente.api.OmnimessageApi;
import com.messente.api.SMS;
import com.messente.auth.HttpBasicAuth;

import java.util.Arrays;

// repositories { jcenter() }
// dependencies { implementation 'com.messente.api:messente-api' }

public class Main {
    public static void main(String[] args) {
        ApiClient apiClient = new ApiClient();

        HttpBasicAuth basicAuth = (HttpBasicAuth) apiClient.getAuthentication("basicAuth");

        SMS sms = new SMS();
        sms.text("1234 is your verification code");
        sms.sender("<sender name (optional)>");

        OmnimessageApi apiInstance = new OmnimessageApi(apiClient);
        Omnimessage omnimessage = new Omnimessage();

        try {
            OmniMessageCreateSuccessResponse result = apiInstance.sendOmnimessage(omnimessage);
        } catch (ApiException e) {
# gem install messente_api

require 'messente_api'

MessenteApi.configure do |config|
  config.username = 'YOUR_MESSENTE_API_USERNAME'
  config.password = 'YOUR_MESSENTE_API_PASSWORD'

api_instance =
omnimessage = = '<recipient_phone_number>'
omnimessage.messages = [
    sender: '<sender name (optional)>',
    text: '1234 is your verification code'

  result = api_instance.send_omnimessage(omnimessage)
  puts result
rescue MessenteApi::ApiError => e
  puts "Exception when calling send_omnimessage: #{e}"
  puts e.response_body
// PM > Install-Package com.Messente.Api

using System;
using System.Diagnostics;
using System.Collections.Generic;
using com.Messente.Api.Api;
using com.Messente.Api.Client;
using com.Messente.Api.Model;

namespace Example
    public class SendOmniMessageExample
        public static void Main()
            Configuration conf = new Configuration();
            conf.Username = "YOUR_MESSENTE_API_USERNAME";
            conf.Password = "YOUR_MESSENTE_API_PASSWORD";
            var apiInstance = new OmnimessageApi(conf);

            var sms = new SMS(
                sender: "<sender name (optional)>",
                text: "1234 is your verification code"
            List<object> messages = new List<object>();

            var omnimessage = new Omnimessage(
                to: "<recipient_phone_number>",
                messages: messages

                var result = apiInstance.SendOmnimessage(omnimessage);
            catch (Exception e)
                Debug.Print("Exception when calling SendOmnimessage: " + e.Message);

curl -X POST \
  '' \
  -H 'Content-Type: application/json' \
  -d '{
    "to": "<recipient_phone_number>",
    "messages": [
        "channel": "sms",
        "sender": "<sender name (optional)>",
        "text": "1234 is your verification code"

4. Track the message delivery status

Use the IDs in the API response to track message delivery statuses.

Messente tracks your sent message and reports status updates back to you.

To be able to view the status, you must add a callback URL to the message. Messente will use this URL to make HTTP POST requests, if there is a status update.

Learn more about the delivery status

    "messages": [
            "channel": "viber",
            "message_id": "2311234-7c23-4f7e-1234-02761e55ffdd",
            "sender": "Verigator"
            "channel": "whatsapp",
            "message_id": "53eb1234-695f-1234-9ab0-86425e78ede0",
            "sender": "Verigator"
            "channel": "sms",
            "message_id": "6e821234-edf2-4fe5-1234-b62062037c56",
            "sender": "Verigator"
    "omnimessage_id": "2f151234-e772-48fb-a66a-1234fb3f203e",
    "to": "+372555666777"


You're now ready to start sending OTPs everywhere.

Learn more about delivery reports and error codes.

Go to full API specification