curl --request POST \
--url https://api.torpedo.co.mz/api/v1/verify \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"to": "+258841234567",
"channel": "whatsapp",
"fallback": "sms",
"code": "<string>",
"codeLength": 8,
"template": "<string>",
"clientRef": "<string>",
"ip": "<string>"
}
'import requests
url = "https://api.torpedo.co.mz/api/v1/verify"
payload = {
"to": "+258841234567",
"channel": "whatsapp",
"fallback": "sms",
"code": "<string>",
"codeLength": 8,
"template": "<string>",
"clientRef": "<string>",
"ip": "<string>"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
to: '+258841234567',
channel: 'whatsapp',
fallback: 'sms',
code: '<string>',
codeLength: 8,
template: '<string>',
clientRef: '<string>',
ip: '<string>'
})
};
fetch('https://api.torpedo.co.mz/api/v1/verify', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.torpedo.co.mz/api/v1/verify",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'to' => '+258841234567',
'channel' => 'whatsapp',
'fallback' => 'sms',
'code' => '<string>',
'codeLength' => 8,
'template' => '<string>',
'clientRef' => '<string>',
'ip' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.torpedo.co.mz/api/v1/verify"
payload := strings.NewReader("{\n \"to\": \"+258841234567\",\n \"channel\": \"whatsapp\",\n \"fallback\": \"sms\",\n \"code\": \"<string>\",\n \"codeLength\": 8,\n \"template\": \"<string>\",\n \"clientRef\": \"<string>\",\n \"ip\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.torpedo.co.mz/api/v1/verify")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"to\": \"+258841234567\",\n \"channel\": \"whatsapp\",\n \"fallback\": \"sms\",\n \"code\": \"<string>\",\n \"codeLength\": 8,\n \"template\": \"<string>\",\n \"clientRef\": \"<string>\",\n \"ip\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.torpedo.co.mz/api/v1/verify")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"to\": \"+258841234567\",\n \"channel\": \"whatsapp\",\n \"fallback\": \"sms\",\n \"code\": \"<string>\",\n \"codeLength\": 8,\n \"template\": \"<string>\",\n \"clientRef\": \"<string>\",\n \"ip\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "pending",
"to": "+258841234567",
"channel": "whatsapp",
"fallback": "sms",
"locale": "pt",
"codeSource": "generated",
"isTest": true,
"clientRef": "signup-4821",
"checkAttempts": 0,
"maxCheckAttempts": 5,
"sendCount": 1,
"maxSends": 5,
"expiresAt": "2023-11-07T05:31:56Z",
"resendAvailableAt": "2023-11-07T05:31:56Z",
"approvedAt": "2023-11-07T05:31:56Z",
"createdAt": "2023-11-07T05:31:56Z",
"attempts": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"channel": "whatsapp",
"trigger": "initial",
"status": "queued",
"errorCode": "131026",
"errorCategory": "recipient_unreachable",
"createdAt": "2023-11-07T05:31:56Z"
}
]
}
}{
"errors": [
{
"code": "VALIDATION_ERROR",
"message": "Domain not verified",
"field": "from"
}
]
}{
"errors": [
{
"code": "VALIDATION_ERROR",
"message": "Domain not verified",
"field": "from"
}
]
}{
"errors": [
{
"code": "VALIDATION_ERROR",
"message": "Domain not verified",
"field": "from"
}
]
}{
"errors": [
{
"code": "VALIDATION_ERROR",
"message": "Domain not verified",
"field": "from"
}
]
}{
"errors": [
{
"code": "VALIDATION_ERROR",
"message": "Domain not verified",
"field": "from"
}
]
}{
"errors": [
{
"code": "VALIDATION_ERROR",
"message": "Domain not verified",
"field": "from"
}
]
}Start a verification
Sends a one-time code to a phone number over WhatsApp (default) or SMS and returns a
verification. Returns 202 Accepted; the code is sent in the background.
A number can only have one pending verification at a time. Sends are charged from the workspace’s WhatsApp balance (or SMS credits for SMS).
curl --request POST \
--url https://api.torpedo.co.mz/api/v1/verify \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"to": "+258841234567",
"channel": "whatsapp",
"fallback": "sms",
"code": "<string>",
"codeLength": 8,
"template": "<string>",
"clientRef": "<string>",
"ip": "<string>"
}
'import requests
url = "https://api.torpedo.co.mz/api/v1/verify"
payload = {
"to": "+258841234567",
"channel": "whatsapp",
"fallback": "sms",
"code": "<string>",
"codeLength": 8,
"template": "<string>",
"clientRef": "<string>",
"ip": "<string>"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
to: '+258841234567',
channel: 'whatsapp',
fallback: 'sms',
code: '<string>',
codeLength: 8,
template: '<string>',
clientRef: '<string>',
ip: '<string>'
})
};
fetch('https://api.torpedo.co.mz/api/v1/verify', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.torpedo.co.mz/api/v1/verify",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'to' => '+258841234567',
'channel' => 'whatsapp',
'fallback' => 'sms',
'code' => '<string>',
'codeLength' => 8,
'template' => '<string>',
'clientRef' => '<string>',
'ip' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.torpedo.co.mz/api/v1/verify"
payload := strings.NewReader("{\n \"to\": \"+258841234567\",\n \"channel\": \"whatsapp\",\n \"fallback\": \"sms\",\n \"code\": \"<string>\",\n \"codeLength\": 8,\n \"template\": \"<string>\",\n \"clientRef\": \"<string>\",\n \"ip\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.torpedo.co.mz/api/v1/verify")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"to\": \"+258841234567\",\n \"channel\": \"whatsapp\",\n \"fallback\": \"sms\",\n \"code\": \"<string>\",\n \"codeLength\": 8,\n \"template\": \"<string>\",\n \"clientRef\": \"<string>\",\n \"ip\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.torpedo.co.mz/api/v1/verify")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"to\": \"+258841234567\",\n \"channel\": \"whatsapp\",\n \"fallback\": \"sms\",\n \"code\": \"<string>\",\n \"codeLength\": 8,\n \"template\": \"<string>\",\n \"clientRef\": \"<string>\",\n \"ip\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "pending",
"to": "+258841234567",
"channel": "whatsapp",
"fallback": "sms",
"locale": "pt",
"codeSource": "generated",
"isTest": true,
"clientRef": "signup-4821",
"checkAttempts": 0,
"maxCheckAttempts": 5,
"sendCount": 1,
"maxSends": 5,
"expiresAt": "2023-11-07T05:31:56Z",
"resendAvailableAt": "2023-11-07T05:31:56Z",
"approvedAt": "2023-11-07T05:31:56Z",
"createdAt": "2023-11-07T05:31:56Z",
"attempts": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"channel": "whatsapp",
"trigger": "initial",
"status": "queued",
"errorCode": "131026",
"errorCategory": "recipient_unreachable",
"createdAt": "2023-11-07T05:31:56Z"
}
]
}
}{
"errors": [
{
"code": "VALIDATION_ERROR",
"message": "Domain not verified",
"field": "from"
}
]
}{
"errors": [
{
"code": "VALIDATION_ERROR",
"message": "Domain not verified",
"field": "from"
}
]
}{
"errors": [
{
"code": "VALIDATION_ERROR",
"message": "Domain not verified",
"field": "from"
}
]
}{
"errors": [
{
"code": "VALIDATION_ERROR",
"message": "Domain not verified",
"field": "from"
}
]
}{
"errors": [
{
"code": "VALIDATION_ERROR",
"message": "Domain not verified",
"field": "from"
}
]
}{
"errors": [
{
"code": "VALIDATION_ERROR",
"message": "Domain not verified",
"field": "from"
}
]
}Authorizations
Prefix tor_ followed by a base64url-encoded random key.
Create and manage API keys from the authenticated Torpedo dashboard.
Headers
Unique key for replaying the original accepted response without sending again. Leading and trailing whitespace is removed; only the first 255 characters are retained.
Body
Recipient phone number in E.164 format
^\+[1-9]\d{7,14}$"+258841234567"
SMS only works for Mozambican mobile numbers.
whatsapp, sms Send the code by SMS if WhatsApp fails. Defaults to the workspace setting.
sms Template language. Defaults to the workspace setting.
pt, en Your own code. Omit it to let Torpedo generate one. Can't be combined with codeLength.
^(?=.*\d)[A-Za-z0-9]{4,10}$Length of the generated code. Defaults to the workspace setting.
6 <= x <= 10Name of an approved WhatsApp authentication template.
512Your own reference, returned on the verification and in webhooks.
128The end user's IP address, used for per-IP rate limiting.
64Response
Verification started
Show child attributes
Show child attributes