OTP
Envoyer un OTP
Envoie un code de vérification OTP via SMS ou WhatsApp
POST
/
send
/
otp
Envoyer un OTP
curl --request POST \
--url https://api.dexchange-sms.com/api/v1/send/otp \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"service": "<string>",
"number": "<string>",
"channel": "<string>",
"signature": "<string>"
}
'import requests
url = "https://api.dexchange-sms.com/api/v1/send/otp"
payload = {
"service": "<string>",
"number": "<string>",
"channel": "<string>",
"signature": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
service: '<string>',
number: '<string>',
channel: '<string>',
signature: '<string>'
})
};
fetch('https://api.dexchange-sms.com/api/v1/send/otp', 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.dexchange-sms.com/api/v1/send/otp",
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([
'service' => '<string>',
'number' => '<string>',
'channel' => '<string>',
'signature' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.dexchange-sms.com/api/v1/send/otp"
payload := strings.NewReader("{\n \"service\": \"<string>\",\n \"number\": \"<string>\",\n \"channel\": \"<string>\",\n \"signature\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.dexchange-sms.com/api/v1/send/otp")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"service\": \"<string>\",\n \"number\": \"<string>\",\n \"channel\": \"<string>\",\n \"signature\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.dexchange-sms.com/api/v1/send/otp")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"service\": \"<string>\",\n \"number\": \"<string>\",\n \"channel\": \"<string>\",\n \"signature\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"statusCode": 400,
"message": "Solde SMS insuffisant",
"error": "Bad Request"
}
{
"statusCode": 400,
"message": "Erreur lors de l'envoi du code de vérification",
"error": "Bad Request"
}
{
"statusCode": 400,
"message": "Erreur lors de l'envoi du code de vérification via WhatsApp",
"error": "Bad Request"
}
Description
Cet endpoint permet d’envoyer un code de vérification à 4 chiffres (OTP) à un numéro de téléphone. Le code peut être envoyé par SMS ou par WhatsApp. Le code OTP est valide pendant 15 minutes.Paramètres de la requête
string
required
Le nom de votre service ou application. Ce nom apparaîtra dans le message envoyé au destinataire.Exemple :
"MonApplication", "MaBoutique", "ServiceClient"string
required
Le numéro de téléphone du destinataire au format international (sans le
+).Exemple : "221771234567"string
default:"sms"
Le canal d’envoi du code OTP.Valeurs possibles :
"sms" ou "whatsapp"string
La signature personnalisée pour l’envoi (optionnel). Par défaut :
"DEXCHANGE".Exemple de requête
curl -X POST https://api.dexchange-sms.com/api/v1/send/otp \
-H "X-Api-Key: VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{
"service": "MonApplication",
"number": "221771234567",
"channel": "sms"
}'
curl -X POST https://api.dexchange-sms.com/api/v1/send/otp \
-H "X-Api-Key: VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{
"service": "MonApplication",
"number": "221771234567",
"channel": "whatsapp"
}'
const response = await fetch('https://api.dexchange-sms.com/api/v1/send/otp', {
method: 'POST',
headers: {
'X-Api-Key': 'VOTRE_CLE_API',
'Content-Type': 'application/json'
},
body: JSON.stringify({
service: 'MonApplication',
number: '221771234567',
channel: 'sms'
})
});
const data = await response.json();
console.log(`OTP envoyé ! ID: ${data.smsID}`);
import requests
response = requests.post(
'https://api.dexchange-sms.com/api/v1/send/otp',
headers={
'X-Api-Key': 'VOTRE_CLE_API',
'Content-Type': 'application/json'
},
json={
'service': 'MonApplication',
'number': '221771234567',
'channel': 'sms'
}
)
data = response.json()
print(f"OTP envoyé ! ID: {data['smsID']}")
<?php
$data = [
'service' => 'MonApplication',
'number' => '221771234567',
'channel' => 'sms'
];
$ch = curl_init('https://api.dexchange-sms.com/api/v1/send/otp');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'X-Api-Key: VOTRE_CLE_API',
'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
echo "OTP envoyé ! ID: " . $result['smsID'];
Réponse
string
Message de confirmation de l’envoi
string
Identifiant unique de l’OTP envoyé (à utiliser pour la vérification si nécessaire)
string
Le nom du service pour lequel l’OTP a été envoyé
Exemple de réponse réussie
{
"message": "Code de vérification envoyé avec succès",
"smsID": "abc123xyz789",
"service": "MonApplication"
}
Message reçu par l’utilisateur
Le destinataire recevra un message du type :Votre code de vérification pour MonApplication est: 1234
Erreurs possibles
{
"statusCode": 400,
"message": "Solde SMS insuffisant",
"error": "Bad Request"
}
{
"statusCode": 400,
"message": "Erreur lors de l'envoi du code de vérification",
"error": "Bad Request"
}
{
"statusCode": 400,
"message": "Erreur lors de l'envoi du code de vérification via WhatsApp",
"error": "Bad Request"
}
Workflow complet
1
Envoi de l'OTP
Appelez
POST /send/otp avec le numéro de l’utilisateur2
L'utilisateur reçoit le code
Un code à 4 chiffres est envoyé par SMS ou WhatsApp
3
L'utilisateur saisit le code
L’utilisateur entre le code dans votre application
4
Vérification du code
Appelez
POST /verify/otp pour valider le codeNotes importantes
Expiration : Le code OTP expire après 15 minutes. Passé ce délai, l’utilisateur devra demander un nouveau code.
WhatsApp : L’envoi via WhatsApp peut être plus fiable dans certaines régions et offre une meilleure expérience utilisateur.
Un seul code actif : Si vous envoyez plusieurs OTP au même numéro pour le même service, seul le dernier code sera valide.
⌘I
Envoyer un OTP
curl --request POST \
--url https://api.dexchange-sms.com/api/v1/send/otp \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"service": "<string>",
"number": "<string>",
"channel": "<string>",
"signature": "<string>"
}
'import requests
url = "https://api.dexchange-sms.com/api/v1/send/otp"
payload = {
"service": "<string>",
"number": "<string>",
"channel": "<string>",
"signature": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
service: '<string>',
number: '<string>',
channel: '<string>',
signature: '<string>'
})
};
fetch('https://api.dexchange-sms.com/api/v1/send/otp', 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.dexchange-sms.com/api/v1/send/otp",
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([
'service' => '<string>',
'number' => '<string>',
'channel' => '<string>',
'signature' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.dexchange-sms.com/api/v1/send/otp"
payload := strings.NewReader("{\n \"service\": \"<string>\",\n \"number\": \"<string>\",\n \"channel\": \"<string>\",\n \"signature\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.dexchange-sms.com/api/v1/send/otp")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"service\": \"<string>\",\n \"number\": \"<string>\",\n \"channel\": \"<string>\",\n \"signature\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.dexchange-sms.com/api/v1/send/otp")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"service\": \"<string>\",\n \"number\": \"<string>\",\n \"channel\": \"<string>\",\n \"signature\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"statusCode": 400,
"message": "Solde SMS insuffisant",
"error": "Bad Request"
}
{
"statusCode": 400,
"message": "Erreur lors de l'envoi du code de vérification",
"error": "Bad Request"
}
{
"statusCode": 400,
"message": "Erreur lors de l'envoi du code de vérification via WhatsApp",
"error": "Bad Request"
}