curl -X POST "https://app.famulor.de/api/user/whatsapp/send-freeform" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"sender_id": 12,
"recipient_phone": "+1234567890",
"message": "Thank you for your inquiry! Our team will review your request and get back to you within 2 hours."
}'
const response = await fetch(
'https://app.famulor.de/api/user/whatsapp/send-freeform',
{
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
sender_id: 12,
recipient_phone: '+1234567890',
message: 'Thank you for your inquiry! Our team will review your request and get back to you within 2 hours.'
})
}
);
const data = await response.json();
console.log(data);
import requests
response = requests.post(
'https://app.famulor.de/api/user/whatsapp/send-freeform',
headers={
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
json={
'sender_id': 12,
'recipient_phone': '+1234567890',
'message': 'Thank you for your inquiry! Our team will review your request and get back to you within 2 hours.'
}
)
print(response.json())
{
"success": true,
"conversation_id": 1234,
"message_id": 567,
"whatsapp_message_id": 890,
"message_sid": "SMxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"session_status": {
"is_open": true,
"can_send_freeform": true,
"requires_template": false,
"message": "Session open (23 hr 45 min remaining). Unlimited free-form messages allowed.",
"minutes_remaining": 1425,
"expires_at": "2026-02-25T10:30:00+00:00"
}
}
{
"success": false,
"error": "Insufficient balance. Please top up your account.",
"error_code": "INSUFFICIENT_BALANCE"
}
{
"success": false,
"error": "The 24-hour messaging window is closed. Customer must reply first, or use a template message.",
"error_code": "SESSION_EXPIRED",
"session_status": {
"is_open": false,
"can_send_freeform": false,
"requires_template": true,
"message": "Session expired. Send a template or wait for customer to reply.",
"expired_at": "2026-02-23T10:30:00+00:00"
}
}
{
"success": false,
"error": "Sender not found or does not belong to you",
"error_code": "SENDER_NOT_FOUND"
}
{
"success": false,
"error": "Invalid phone number format. Use E.164 format (e.g., +14155551234).",
"error_code": "INVALID_PHONE"
}
{
"success": false,
"error": "Sender is not online. Current status: Offline",
"error_code": "SENDER_OFFLINE"
}
WhatsApp
Envoyer un message WhatsApp libre
Envoie un message WhatsApp en texte libre au sein d’une session active de 24 heures via Famulor
POST
/
user
/
whatsapp
/
send-freeform
curl -X POST "https://app.famulor.de/api/user/whatsapp/send-freeform" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"sender_id": 12,
"recipient_phone": "+1234567890",
"message": "Thank you for your inquiry! Our team will review your request and get back to you within 2 hours."
}'
const response = await fetch(
'https://app.famulor.de/api/user/whatsapp/send-freeform',
{
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
sender_id: 12,
recipient_phone: '+1234567890',
message: 'Thank you for your inquiry! Our team will review your request and get back to you within 2 hours.'
})
}
);
const data = await response.json();
console.log(data);
import requests
response = requests.post(
'https://app.famulor.de/api/user/whatsapp/send-freeform',
headers={
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
json={
'sender_id': 12,
'recipient_phone': '+1234567890',
'message': 'Thank you for your inquiry! Our team will review your request and get back to you within 2 hours.'
}
)
print(response.json())
{
"success": true,
"conversation_id": 1234,
"message_id": 567,
"whatsapp_message_id": 890,
"message_sid": "SMxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"session_status": {
"is_open": true,
"can_send_freeform": true,
"requires_template": false,
"message": "Session open (23 hr 45 min remaining). Unlimited free-form messages allowed.",
"minutes_remaining": 1425,
"expires_at": "2026-02-25T10:30:00+00:00"
}
}
{
"success": false,
"error": "Insufficient balance. Please top up your account.",
"error_code": "INSUFFICIENT_BALANCE"
}
{
"success": false,
"error": "The 24-hour messaging window is closed. Customer must reply first, or use a template message.",
"error_code": "SESSION_EXPIRED",
"session_status": {
"is_open": false,
"can_send_freeform": false,
"requires_template": true,
"message": "Session expired. Send a template or wait for customer to reply.",
"expired_at": "2026-02-23T10:30:00+00:00"
}
}
{
"success": false,
"error": "Sender not found or does not belong to you",
"error_code": "SENDER_NOT_FOUND"
}
{
"success": false,
"error": "Invalid phone number format. Use E.164 format (e.g., +14155551234).",
"error_code": "INVALID_PHONE"
}
{
"success": false,
"error": "Sender is not online. Current status: Offline",
"error_code": "SENDER_OFFLINE"
}
API Famulor 1.0 (héritée). Cette page concerne uniquement Famulor 1.0 (
app.famulor.de) et est conservée pour la compatibilité. Pour la plateforme actuelle, consultez la référence API Famulor 2.0.Les messages libres ne peuvent être envoyés que pendant une fenêtre de messagerie de 24 heures active. Si la session a expiré, vous devez d’abord envoyer un message modèle pour relancer la conversation. Utilisez le point de terminaison Statut de session pour vérifier si une session est active.
Ce point de terminaison est limité à 5 requêtes par seconde par utilisateur.
Corps de la requête
integer
requis
L’ID de l’expéditeur WhatsApp depuis lequel envoyer (obtenu via le point de terminaison Récupérer les expéditeurs)
string
requis
Le numéro de téléphone du destinataire au format international (par ex.
+1234567890)string
requis
Le contenu du message à envoyer (4096 caractères maximum)
Champs de réponse
boolean
Indique si le message a été envoyé avec succès
integer
L’ID de la conversation associée à ce message
integer
L’ID de l’enregistrement du message de conversation
integer
L’ID de l’enregistrement du message WhatsApp
string
L’identifiant du message pour le suivi de la livraison
object
Statut de session mis à jour après l’envoi du message
Afficher Propriétés du statut de session
Afficher Propriétés du statut de session
boolean
Indique si la fenêtre de messagerie de 24 heures est actuellement ouverte
boolean
Indique si des messages libres peuvent être envoyés dès maintenant
boolean
Indique si un message modèle est requis
string
Description lisible de l’état de la session
integer
Minutes restantes dans la fenêtre de 24 heures
string
Horodatage ISO 8601 de l’expiration de la session
Réponses d’erreur
curl -X POST "https://app.famulor.de/api/user/whatsapp/send-freeform" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"sender_id": 12,
"recipient_phone": "+1234567890",
"message": "Thank you for your inquiry! Our team will review your request and get back to you within 2 hours."
}'
const response = await fetch(
'https://app.famulor.de/api/user/whatsapp/send-freeform',
{
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
sender_id: 12,
recipient_phone: '+1234567890',
message: 'Thank you for your inquiry! Our team will review your request and get back to you within 2 hours.'
})
}
);
const data = await response.json();
console.log(data);
import requests
response = requests.post(
'https://app.famulor.de/api/user/whatsapp/send-freeform',
headers={
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
json={
'sender_id': 12,
'recipient_phone': '+1234567890',
'message': 'Thank you for your inquiry! Our team will review your request and get back to you within 2 hours.'
}
)
print(response.json())
{
"success": true,
"conversation_id": 1234,
"message_id": 567,
"whatsapp_message_id": 890,
"message_sid": "SMxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"session_status": {
"is_open": true,
"can_send_freeform": true,
"requires_template": false,
"message": "Session open (23 hr 45 min remaining). Unlimited free-form messages allowed.",
"minutes_remaining": 1425,
"expires_at": "2026-02-25T10:30:00+00:00"
}
}
{
"success": false,
"error": "Insufficient balance. Please top up your account.",
"error_code": "INSUFFICIENT_BALANCE"
}
{
"success": false,
"error": "The 24-hour messaging window is closed. Customer must reply first, or use a template message.",
"error_code": "SESSION_EXPIRED",
"session_status": {
"is_open": false,
"can_send_freeform": false,
"requires_template": true,
"message": "Session expired. Send a template or wait for customer to reply.",
"expired_at": "2026-02-23T10:30:00+00:00"
}
}
{
"success": false,
"error": "Sender not found or does not belong to you",
"error_code": "SENDER_NOT_FOUND"
}
{
"success": false,
"error": "Invalid phone number format. Use E.164 format (e.g., +14155551234).",
"error_code": "INVALID_PHONE"
}
{
"success": false,
"error": "Sender is not online. Current status: Offline",
"error_code": "SENDER_OFFLINE"
}
Fenêtre de messagerie de 24 heures
WhatsApp applique une politique de fenêtre de messagerie de 24 heures :- Lorsqu’un client envoie un message à votre numéro WhatsApp Business, une fenêtre de 24 heures s’ouvre.
- Pendant cette fenêtre, vous pouvez envoyer des messages libres sans restriction.
- Une fois la fenêtre expirée, vous devez utiliser un message modèle pour relancer la conversation.
- Chaque nouveau message du client réinitialise le minuteur de 24 heures.
Remarques
- La longueur maximale du message est de 4 096 caractères (limite WhatsApp).
- L’expéditeur doit être
online. Les expéditeurs hors ligne renvoient une erreur503. - Le coût des messages est automatiquement déduit du solde de votre compte Famulor.
- Limite de débit : 5 requêtes par seconde par utilisateur.