GetOTP Documentation

Viber OTP

The Viber OTP allows you to perform OTP via SMS.

Request for Viber OTP API

To request for Viber OTP, make a POST request to our OTP endpoint.

https://api.otp.dev/v1/verifications

With the following Basic HTTP verification method:

DescriptionRequiredData TypeExample
Your API KeyYesStringmtbi2w4hlendfpxa1igthcu5p6mzxf7k

Note

With the following parameters:

NameDescriptionRequiredData TypeExample
channelThe channel of verification messageYesStringviber
senderName (unique identifier) of the senderYesStringGetOTP
phonePhone number as digits without spaces or special characters, beginning with the country dialing codeYesString60123456789
templateThe unique identifier of the template, which should always contain the {code} attributeYesUUID6d16aa9d-bf19-4141-8169-48b46d972fc6
code_lengthThe length of the code, which falls within the range of 4 to 8 characters.At least one of the following is required: 'code_length' or'code'.Number4
codeThe 'code' field accepts only digits and must be between 4 to 8 characters in length.At least one of the following is required: 'code_length' or'code'.String1234
number_formattingDefaults to true. If provided, leading 0 after the country code and before the network code will be removed.NoBooleantrue
payloadThe value provided with this parameter will be sent back to the client through the Webhook URL.NoString
For JSON object, convert into JSON string.
{\"order_id\":\"xfdu48sfdjsdf\", \"agent_id\":2258}

Note

Notes on the phone parameter:

  • You must provide a phone number as digits without spaces or special characters, beginning with the country dialing code.
  • Examples

    Below is an example request using cURL:

    curl --request POST \
         --url https://api.otp.dev/v1/verifications \
         --header 'X-OTP-Key: {YOUR_API_KEY}' \
         --header 'accept: application/json' \
         --header 'content-type: application/json' \
         --data '
    {
        "data": {
            "channel": "viber",
            "sender": "GetOTP",
            "phone": "60123456789",
            "template": "550e8400-e29b-41d4-a716-446655440000"
        }
    }
    '

    The response would be a JSON structure, returned with HTTP 200 Codestatus code:

    {
      "account_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "message_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "phone": "60123456789",
      "create_date": "2025-08-18T06:28:58.962Z",
      "expire_date": "2025-08-18T06:28:58.962Z"
    }

    Response data details:

    NameDescriptionData TypeExample
    account_idThe unique identifier of the accountString3fa85f64-5717-4562-b3fc-2c963f66afa6
    message_idThe unique identifier of the messageString3fa85f64-5717-4562-b3fc-2c963f66afa6
    phoneRecipient's phone numberString60123456789
    create_dateCreation date of the verification in UTC, formatted as yyyy-mm-dd hh:mm:ssString2025-08-18 00:00:00
    expire_dateExpiration date of the verification in UTC, formatted as yyyy-mm-dd hh:mm:ssString2025-08-18 02:00:00

    If there is an error with the API call, you will receive a JSON response with 400+ status code, error code and message.

    {
      "errors": [{
        "timestamp": "2025-09-11 11:36:42",
        "path": "/v1/verifications",
        "method": "POST",
        "status": 400,
        "message": "Invalid code length",
        "code": "1623"
      }]
    }

    Please refer to this table for details:

    Error CodeDescriptionHTTP Code
    1512Invalid template id400
    1513Template is not found 404
    1515Invalid channel400
    1523Invalid recipient number(s)400
    1620'sender' is missing400
    1621'phone' is missing400
    1622'template' is missing 400
    1623Invalid code length400
    1624Template does not contain keyword {code}400
    1625'data.from' is blocked400
    1628Incompatible template was provided400
    1629Provide either 'data.code' or 'data.code_length' but not both400
    1631When 'data.channel' is not VOICE 'data.code' must be valid and 4 to 8 characters long400
    1632'data.code' should be numeric if provided400
    1705Invalid payload400