cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Viber requires all transactional and OTP messages to use pre-approved templates. Using approved templates guarantees your messages are compliant with Viber's content policy and billed at transactional rates. Template registration is handled through your Sinch account manager.

Step 1: Prepare your template content

Before submitting, make sure each template meets Viber's requirements:

  • Category: either OTP or Transactional.
  • Language: one language per template. If you need the same message in several languages, each language is a separate template.
  • Length: 1–1,000 characters of message text.
  • Variables: up to 8 dynamic placeholders written in double curly braces, e.g. {{order_id}}. Variable names are English only, max 50 characters. Multiple variables can sit back-to-back if separated by at least one space.
  • Structure: the template must start and end with fixed text, not a variable. The one exception is {{pin}} in OTP templates, which may be the last element.
  • OTP templates must include a {{pin}} variable. These render in Viber with a dedicated "Copy" button for the code.
  • Example values: for every variable, provide a realistic sample value (max 125 characters). Viber's moderators use these to evaluate the template.

Note: when you later send messages, each variable value is limited to 125 characters and may not contain URLs or links.

Step 2: Submit to your Sinch account manager

Send your account manager, for each template:

  • Your Viber Service ID (business account)
  • Template name (optional, for your own tracking)
  • Category (OTP or Transactional)
  • Language
  • The full template text with placeholders
  • Variable names and example values

For large volumes, submit templates in bulk via spreadsheet (up to 100 templates per file); your account manager can provide the format.

 

Step 3: Moderation

Once submitted, the template enters Viber's moderation queue with status Pending. Viber reviews templates within up to 24 hours on business days. The outcome is either:

  • Approved — the template receives a Template ID and is ready to use.
  • Declined — the template was rejected for content policy reasons.

Your account manager will confirm the result and share the Template ID.

Reference the Template ID in your send request, supply values for every variable exactly as named in the template, and set the language to match the template's locale. Only templates in Approved status can be sent; requests referencing a Pending or Declined template will fail.

Good to know

  • Templates cannot be edited. To change an approved template, submit a new one and retire the old one.
  • Each Service ID can hold up to 2,000 templates.
  • Templates are tied to a specific Service ID and cannot be shared across accounts.

-----------------Parameter details---------------------------------------------------------

Parameter (data type)

Description

Validations

service_id (integer)

Route parameter. The service ID for which the action is performed.

Required
Must exist and belong to the partner performing the request.

name (string)

A human-readable label for the template.

Optional
Max length: 64
Allowed: letters, digits, spaces. Special characters are not allowed.

category (string)

The category of the message template.

Required
Options: OTP, Transactional.

params (array)

A list of dynamic parameters (variables) used within the template text.

Required
Max items - 8
Pass an empty array {} if the template is static (contains no variables).

params.name (string)

Defines the variable name to be used as a placeholder in the template.

Conditional: Required if params is not empty.
Max length - 50 characters.
English Only.
Note for OTP category: If the template is for OTP(category=OTP), it must include the {{pin}} placeholder.

params.type (string)

The data type of the variable that you will use in send template message request.

Conditional: Required if params is not empty.
Must be “TEXT”
Templates variables validations

locales (array)

Configuration for language and message content.

Required
Max items - 1

locales.lang (string)

Template language code (e.g., en, ru, fr).

Required
Min length - 1 character
Format must match one of the values supported by the system. Please refer to the table below for the exact string format.

locales.template (string)

The message string containing static text and placeholders.

Required
Min length - 1 character
Max length - 1000 characters.
Must start and end with static text, not a variable. The only exception is the {{pin}} placeholder for OTP templates, which can be placed at the very end.
Multiple parameters can be used back-to-back, provided they are separated by at least a single space.

varExample (array)

A list of example values for the declared parameters. Used for template moderation.

Required
Max Items - 8
Pass an empty array [] for static templates.

varExample.name (string)

The name of the parameter (must match a name defined in params).

Conditional: Required if params is not empty.
Max length - 50 characters.

varExample.example (string)

Conditional. A sample value for the parameter content. Required if params is not empty.

Conditional: Required if params is not empty.
Max length - 125 characters.
Please note - When sending an actual message, the placeholder value is limited to 125 characters, links are not allowed.

Version history
Last update:
‎09-21-2026 03:20 AM
Updated by: