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 |
name (string) | A human-readable label for the template. | Optional |
category (string) | The category of the message template. | Required |
params (array) | A list of dynamic parameters (variables) used within the template text. | Required |
params.name (string) | Defines the variable name to be used as a placeholder in the template. | Conditional: Required if params is not empty. |
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. |
locales (array) | Configuration for language and message content. | Required |
locales.lang (string) | Template language code (e.g., en, ru, fr). | Required |
locales.template (string) | The message string containing static text and placeholders. | Required |
varExample (array) | A list of example values for the declared parameters. Used for template moderation. | Required |
varExample.name (string) | The name of the parameter (must match a name defined in params). | Conditional: Required if params is not empty. |
varExample.example (string) | Conditional. A sample value for the parameter content. Required if params is not empty. | Conditional: Required if params is not empty. |
Comments
0 comments
Please sign in to leave a comment.