The platform does not send marketing SMS between 8 PM and 8 AM on weekdays, as well as on Sundays and public holidays (legal restriction). If a message is sent during that time, it will be on hold until the next working day at 8 AM.
Not sending marketing SMS? Contact us to disable this restriction:
Required Parameters
Name
Value
apiKey
phoneNumbers
Recipient phone numbers.
To send to multiple recipients, separate numbers with commas. Maximum of 500 numbers per request.
Supported formats:
National (06xxxxxxxx) or international (+336xxxxxxxx) for French numbers.
International (+496xxxxxxxx) for numbers outside France.
message
SMS content. 160 characters max per SMS (additional SMS units will be charged per 153-character segment beyond that).
Line break → :br: Note: Line break counts as two characters.
€ symbol → :euro:
The character ” must be escaped (\”) for the SMS to be valid. Otherwise, a 400 error will be returned.
Optional Parameters
Name
Value
sender
Sender name. If left empty, SMS will be sent using a short operator code (e.g., 36xxx).
Sender name must be between 3 and 11 characters, no special characters allowed.
Note: Some mobile devices may not display spaces properly.
tag
String up to 20 characters, no spaces, lowercase only
scheduledDeliveryDate
dd/mm/YYYY (scheduled delivery)
time
Format: 0–24 (delivery hour)
If scheduledDeliveryDate is set, this parameter is required
minute
Format: 0–55 (5-min intervals)
If scheduledDeliveryDate is set, this parameter is required
urlResponse
URL to receive SMS replies (e.g., http://www.myresponseurl.com)
urlDlr
URL to receive delivery reports (e.g., http://www.mydlrurl.com)
isStopSms
1 to add STOP notice at the end of SMS (mandatory and automatic for marketing SMS)
isUnicode
If set to 1: Enables Unicode mode (max 70 characters per SMS).
Note: Unicode SMS must be enabled on your account by an administrator. Contact support to enable this feature.
sandbox
1 for Sandbox Mode
No SMS will be sent, and no credit will be charged. These SMS will be automatically deleted from your logs every day.
_format
json or xml
Requests
<?php
// Prepare data for POST request
$fields = array(
'apiKey' => 'YOUR API KEY',
'phoneNumbers' => '+336xxxxxxxx',
'message' => 'This is your message',
'sender' => 'mycompany',
'scheduledDeliveryDate' => '21/10/2014',
'time' => 9,
'minute' => 0
);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://api.smspartner.fr/v1/send');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($fields));
$result = curl_exec($curl);
curl_close($curl);
// Process your response here
echo $result;
?>
Imports System.IO
Imports System.Net
Module Module1
Sub Main()
Dim base_url As String = "http://api.smspartner.fr/v1/"
Dim apiKey As String = "VOTRE_APIKEY"
#send sms
url = base_url & "send"
#note : utiliser une librairie JSON en production, par exemple :
#https//www.nuget.org/packages/Newtonsoft.Json/
Dim parameters As String = String.Format(
"{{""apiKey"":""{0}"",""phoneNumbers"":""{1}"",""message"":""{2}""}}",
apiKey,
"+33XXXXXXXXX",
"message de test")
Console.Write(parameters)
apiRequest("POST", url, parameters)
End Sub
Function apiRequest(method As String, url As String, parameters As String) As String
Dim request As HttpWebRequest
request = WebRequest.Create(url)
request.Method = method
request.Timeout = 10000 # timeout in ms
request.ContentType = "application/json; charset=utf-8"
request.ContentLength = 0
#set POST data
If Not String.IsNullOrEmpty(parameters) Then
request.ContentLength = parameters.Length
Using reqStream As StreamWriter = New StreamWriter(request.GetRequestStream())
reqStream.Write(parameters)
End Using
End If
#get response
Dim returnValue As String = Nothing
Using response As HttpWebResponse = request.GetResponse()
If response.StatusCode = HttpStatusCode.OK Then
Using resStream = response.GetResponseStream()
If resStream IsNot Nothing Then
Using reader As New StreamReader(resStream)
returnValue = reader.ReadToEnd()
End Using
End If
End Using
End If
End Using
apiRequest = returnValue
End Function
End Module
import http.client
import json
conn = http.client.HTTPSConnection("api.smspartner.fr")
payload = json.dumps({
"apiKey": "your api key smspartner", #remplacez par votre clé API SMSPartner
"phoneNumbers": "+336xxxxxxxx", #remplacez par votre numéro de téléphone
"sender": "Your sender name",
"gamme": 1,
"message": "Cest un message test PYTHON", #remplacez par votre message
"webhookUrl": "https://webhook.site/TOKEN" #remplacez TOKEN par votre token webhook.site
})
headers = {
'Content-Type': 'application/json',
'Content-Length': str(len(payload)),
'cache-control': 'no-cache'
}
conn.request("POST", "/v1/send", payload, headers) #Une requête POST est envoyée au serveur SMSPartner avec le chemin d'URL "/v1/send"
res = conn.getresponse() #La réponse est ensuite stockée dans la variable res.
data = res.read()
print(data.decode("utf-8")) #Cette ligne lit les données de la réponse HTTP.
curl -H "Content-Type: application/json" -X POST -d '{"apiKey":"xxxxx","phoneNumbers":"xxxx","message":"test","sender":"mycompany"}' https://api.smspartner.fr/v1/send
// Importer le module 'https' de Node.js
const https = require('https');
// Objet JSON qui contient les informations nécessaires pour envoyer le SMS
const data = JSON.stringify({
apiKey: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', //remplacez par votre clé API
phoneNumbers: '+336XXXXXXXX', //remplacez par votre numéro de téléphone
sender: 'NodeJS',
gamme: 1,
message: "Cest un message test NodeJS" //remplacez par votre message
});
// Définir les options pour la requête HTTP POST vers l'API SMS Partner
const options = {
hostname: 'api.smspartner.fr',
port: 443,
path: '/v1/send',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': data.length,
'cache-control': 'no-cache',
'webhookUrl': 'https://webhook.site/TOKEN' // Webhook URL *cette ligne est optionnel*
}
};
// Demande HTTP POST avec les options et les données définies précédemment
const req = https.request(options, (res) => {
console.log(`statusCode: ${res.statusCode}`);
// Afficher les données de réponse de l'API sur la sortie standard
res.on('data', (d) => {
process.stdout.write(d);
});
});
// Affichage en cas d'erreur lors de l'exécution de la requête HTTP POST
req.on('error', (error) => {
console.error(error);
});
// Envoyer les données de l'objet 'data' à la demande
req.write(data);
// Terminer la demande HTTP POST
req.end();
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.OutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.stream.Collectors;
import org.json.JSONObject;
public class SMSRequest {
public static void main(String[] args) {
try {
// Création de l'objet URL avec l'adresse de l'API SMS
URL url = new URL("https://api.smspartner.fr/v1/send");
// Ouverture de la connexion HTTP avec l'API
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("cache-control", "no-cache");
conn.setDoOutput(true);
// Création de l'objet JSON contenant les paramètres du SMS à envoyer
JSONObject json = new JSONObject();
json.put("apiKey", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"); //your api key smspartner
json.put("phoneNumbers", "+336XXXXXXXX"); //your phone number
json.put("virtualNumber", "+336XXXXXXXX");
json.put("sender", "demo JAVA");
json.put("gamme", 1);
json.put("message", "C'est un message test en JAVA !");
json.put("webhookUrl", "https://webhook.site/TOKEN"); //your webhook url
// Écriture des données JSON dans le corps de la requête HTTP
OutputStream os = conn.getOutputStream();
os.write(json.toString().getBytes());
os.flush();
// Lecture de la réponse de l'API
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String response = br.lines().collect(Collectors.joining());
System.out.println(response);
// Fermeture de la connexion HTTP
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
import SwiftUI
struct SMSUnitaire: View {
var body: some View {
// Un bouton qui appelle la fonction sendSMS() lorsqu'il est pressé
Button(action: {
sendSMS()
}) {
Text("Envoyer SMS unitaire")
.font(.system(size: 20)) // Taille du texte
.foregroundColor(.white) // Couleur du texte
.frame(minWidth: 0, maxWidth: .infinity) // Taille du bouton, qui s'ajuste automatiquement
.padding() // Padding autour du texte
.background(LinearGradient(gradient: Gradient(colors: [Color.blue, Color.blue.opacity(0.8)]), startPoint: .top, endPoint: .bottom)) // Fond du bouton, un dégradé de bleu
.cornerRadius(10) // Coins arrondis du bouton
.padding(.horizontal) // Espacement horizontal autour du bouton
}
}
func sendSMS() {
// Objet JSON contenant les informations nécessaires pour envoyer le SMS
let data = [
"apiKey": "XXXXXXXXXXXX YOUR API KEY XXXXXXXXXXXXX", // remplacez par votre clé API
"phoneNumbers": "+336XXXXXXXX", // remplacez par votre numéro de téléphone
"sender": "Swift",
"gamme": 1,
"message": "C'est un message test Swift" // remplacez par votre message
] as [String : Any]
// Conversion de l'objet JSON en données
guard let jsonData = try? JSONSerialization.data(withJSONObject: data, options: []) else {
fatalError("Erreur lors de la conversion des données en JSON.")
}
// Définition des options pour la requête HTTP POST à l'API SMS Partner
let url = URL(string: "https://api.smspartner.fr/v1/send")!
var request = URLRequest(url: url)
request.httpMethod = "POST" // Méthode HTTP
request.httpBody = jsonData // Corps de la requête
request.addValue("application/json", forHTTPHeaderField: "Content-Type") // Type de contenu
request.addValue("\(jsonData.count)", forHTTPHeaderField: "Content-Length") // Longueur du contenu
request.addValue("no-cache", forHTTPHeaderField: "cache-control") // Contrôle du cache
request.addValue("https://webhook.site/TOKEN", forHTTPHeaderField: "webhookUrl") // URL du webhook *cette ligne est facultative*
// Exécution de la requête HTTP POST avec les options et données définies précédemment
let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
guard let httpResponse = response as? HTTPURLResponse else {
fatalError("Erreur : réponse HTTP non valide.")
}
print("statusCode: \(httpResponse.statusCode)") // Impression du statut HTTP
if let error = error {
print("Error: \(error.localizedDescription)") // Impression de l'erreur, si elle existe
}
if let data = data {
if let responseString = String(data: data, encoding: .utf8) {
print("Réponse : \(responseString)") // Impression de la réponse, si elle existe
}
}
}
task.resume() // Démarrage de la tâche
}
}
package main
import (
"bytes"
"fmt"
"net/http"
)
func main() {
apiKey := "VOTRE CLE API"
phoneNumbers := "+336xxxxxxxx"
message := "Ceci est votre message"
sender := "monentreprise"
scheduledDeliveryDate := "21/10/2014"
time := 9
minute := 0
// Construire le corps JSON pour la requête POST
jsonData := fmt.Sprintf(`{
"apiKey": "%s",
"phoneNumbers": "%s",
"message": "%s",
"sender": "%s",
"scheduledDeliveryDate": "%s",
"time": %d,
"minute": %d
}`, apiKey, phoneNumbers, message, sender, scheduledDeliveryDate, time, minute)
// Effectuer la requête POST
url := "https://api.smspartner.fr/v1/send"
req, err := http.NewRequest("POST", url, bytes.NewBuffer([]byte(jsonData)))
if err != nil {
fmt.Println("Erreur lors de la création de la requête:", err)
return
}
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
fmt.Println("Erreur lors de l'envoi de la requête:", err)
return
}
defer resp.Body.Close()
// Traiter la réponse
if resp.StatusCode == http.StatusOK {
body := new(bytes.Buffer)
_, err := body.ReadFrom(resp.Body)
if err != nil {
fmt.Println("Erreur lors de la lecture de la réponse:", err)
return
}
fmt.Println(body.String())
} else {
fmt.Println("La requête POST a échoué. Code de réponse:", resp.StatusCode)
}
}
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
class Program
{
private static readonly HttpClient client = new HttpClient();
static async Task Main(string[] args)
{
var request = new
{
apiKey = "YOUR_API_KEY",
phoneNumbers = "+336xxxxxxxx",
message = "This is your message",
sender = "mycompany",
scheduledDeliveryDate = "21/10/2014",
time = 9,
minute = 0
};
var content = new StringContent(
JsonConvert.SerializeObject(request),
Encoding.UTF8,
"application/json");
HttpResponseMessage response = await client.PostAsync("https://api.smspartner.fr/v1/send", content);
if (response.IsSuccessStatusCode)
{
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
else
{
Console.WriteLine("POST request failed with status code: " + response.StatusCode);
}
}
}
{
"success": false,
"code":9,
"errors": [{
"elementId": "children[message].data",
"message": "Message is required"
}, {
"elementId": "children[phoneNumbers].data",
"message": "This phone number is not valid (922264)"
}, {
"elementId": "children[sender].data",
"message": "Sender cannot exceed 11 characters"
}, {
"elementId": "children[scheduledDeliveryDate].data",
"message": "The date (21/11/2014 :) is earlier than the current date."
}, {
"elementId": "children[minute].data",
"message": "Minute is required"
}, {
"elementId": "children[time].data",
"message": "Hour is required"
}]
}
<?xml version='1.0' encoding='UTF-8'?>
<result>
<entry>false</entry>
<entry>9</entry>
<entry>
<entry>
<entry>children[message].data</entry>
<entry>Message is required</entry>
</entry>
<entry>
<entry>children[phoneNumbers].data</entry>
<entry>This phone number is not valid (922264)</entry>
</entry>
<entry>
<entry>children[sender].data</entry>
<entry>Sender cannot exceed 11 characters</entry>
</entry>
<entry>
<entry>children[scheduledDeliveryDate].data</entry>
<entry>The date (21/11/2014 :) is earlier than the current date. If you wish to send it now, please select [Immediate send]</entry>
</entry>
<entry>
<entry>children[minute].data</entry>
<entry>Minute is required</entry>
</entry>
<entry>
<entry>children[time].data</entry>
<entry>Hour is required</entry>
</entry>
</entry>
</result>
Error Codes
Response Code
Description
1
API Key is required
2
Phone number is required
9
One or more constraints were not met during sending: - Sender cannot exceed 11 characters - Invalid phone number - If <code>scheduledDeliveryDate</code> is set: The date is earlier than the current date. Minute is required. Hour is required.
10
Invalid API Key
11
Insufficient credits
Some will be replaced upon sending. Please review them.