Start here
Your first request in four steps
Connect and enable WhatsApp for a supported mobile.
Confirm the recipient with the number-check endpoint.
Send with waonly=yes.
To retrieve received messages: activate collection, call /getwa/synchronisation/, wait for recovery, then call /getwa.
MANDATORY BEFORE RETRIEVING RECEIVED MESSAGES
Request WhatsApp synchronization first.
Before calling /getwa to view received WhatsApp messages, you must request a synchronization window through https://api.smsmobileapi.com/getwa/synchronisation/. This explicit step is required to securely authorize the exchange between WhatsApp and SMSMobileAPI. Wait for recovery, then call /getwa.
WEBHOOK V2 POUR CETTE API
Abonnez-vous uniquement aux événements mobiles dont votre workflow a besoin.
Une destination peut tout recevoir, ou vous pouvez séparer les systèmes de production, l'analytique et les alertes opérationnelles. Chaque événement porte un nom précis afin que votre application puisse le traiter de manière prévisible.
whatsapp.submittedWhatsApp soumis
Un travail d'envoi de WhatsApp a été créé.
whatsapp.sentWhatsApp envoyé
L'environnement WhatsApp connecté a confirmé que le message a été envoyé.
whatsapp.failedWhatsApp en échec
L'opération d'envoi WhatsApp a échoué.
whatsapp.receivedWhatsApp reçu
Un message WhatsApp a été récupéré après que le compte a demandé la synchronisation.
whatsapp.voice.transcribedMessage vocal transcrit
Un message vocal WhatsApp récupéré et éligible a été converti en texte exploitable.
Authentication
Keep credentials on your server
Use apikey for direct integrations. OAuth2 client credentials are available for server-side applications; request a token and send it as Authorization: Bearer ACCESS_TOKEN.
Gestion des historiques
Vider l’historique en toute sécurité : vérifier, supprimer et suivre l’avancement
Ces endpoints vident l’historique serveur sélectionné pour votre clé API, pas les messages sur les téléphones ou les services externes. Ils ne constituent pas une procédure d’effacement du compte. Une nouvelle activité peut apparaître après le nettoyage.
Comprendre request_id et la reprise d’une suppression
Par défaut, les lignes liées à un service ou en cours de traitement restent visibles. Utilisez include_linked=1 uniquement si vous acceptez le risque d’interrompre les intégrations ou les traitements en cours.
Comment fonctionne request_id
- Vérifiez le nombre de lignes avec action=preview. Aucun request_id n’est nécessaire et aucune ligne n’est supprimée.
- Générez un request_id unique pour une nouvelle suppression, par exemple un UUID. Conservez-le avant d’envoyer action=delete.
- Pour reprendre après une erreur, un délai dépassé ou une réponse HTTP 202, réutilisez la même clé API, le même endpoint d’historique, le même request_id et la même valeur include_linked. Ne générez jamais automatiquement un nouvel identifiant après une erreur.
- Lorsque completed=true, l’opération est terminée. Réutiliser son identifiant renvoie le même résultat sans supprimer les nouvelles lignes arrivées entre-temps. Utilisez un nouvel identifiant uniquement pour démarrer volontairement un nouveau nettoyage.
request_id identifie votre opération de suppression, et non un SMS individuel. Format autorisé : 16-128 lettres, chiffres, tirets ou soulignements ASCII. Un UUID généré avec crypto.randomUUID() est approprié.
La suppression s’effectue par lots. Une réponse HTTP 202 avec continue_required=true demande de répéter action=delete après 3 secondes. Aucun cron ne prend le relais. action=status consulte uniquement l’avancement, même si la réponse HTTP vaut 200.
Exemples de suppression et de consultation de l’avancement
Remplacez le request_id d’exemple par votre propre identifiant unique avant de commencer. Les requêtes delete ci-dessous modifient réellement l’historique du compte : ce ne sont pas des aperçus.
curl -X POST "https://api.smsmobileapi.com/delete-history-whatsapp-sent/" \
--data-urlencode "apikey=YOUR_API_KEY" \
-d "action=delete" -d "include_linked=0" \
-d "request_id=6d54ac58-41f1-4fbc-9a39-6e6c86089451"curl -X POST "https://api.smsmobileapi.com/delete-history-whatsapp-sent/" \
-H "Authorization: Bearer YOUR_OAUTH_ACCESS_TOKEN" \
-d "action=delete" -d "include_linked=0" \
-d "request_id=6d54ac58-41f1-4fbc-9a39-6e6c86089451"curl -G "https://api.smsmobileapi.com/delete-history-whatsapp-sent/" \
--data-urlencode "apikey=YOUR_API_KEY" \
-d "action=status" \
-d "request_id=6d54ac58-41f1-4fbc-9a39-6e6c86089451"GET accepte aussi action=preview ou action=delete. POST est recommandé : les paramètres d’URL peuvent apparaître dans l’historique du navigateur et les journaux serveur. N’insérez jamais une URL de suppression dans un lien public, une image ou un mécanisme de préchargement.
Pour POST, envoyez tous les paramètres du corps du formulaire ou d'un objet JSON, jamais dans la chaîne de requête. Les paramètres inconnus sont rejetés; les filtres mobiles ou la date ne sont pas pris en charge.
Authentification des endpoints d’historique
Utiliser apikey ou un jeton d'accès Authorization: Bearer émis par SMSMobileAPI OAuth2. N'envoyez pas de jeton de rafraîchissement ou de clé API sous forme de jeton Bearer. Les jetons périmés sont refusés.
Lorsque des scopes sont définis, history:read autorise preview et status ; history:delete autorise aussi la suppression. Les restrictions du jeton et du client OAuth s’appliquent toutes les deux. Les anciens jetons sans scope conservent leur accès existant au compte.
OAuth2 sélectionne la clé API primaire unique. Si plusieurs clés primaires existent, fournir également apikey pour sélectionner une appartenant au compte. Les clés secondaires n'accordent jamais l'accès à l'historique de la clé primaire.
Lire la réponse avant de continuer
count_delete est le nombre cumulatif retiré par cette opération. selected_at_start est la sélection initiale; protected_at_start compte les enregistrements exclus. Utilisez preview.linked_or_processing pour compter les enregistrements liés même lorsque include_linked=1.
{
"result": {
"error": 0,
"history": "whatsapp-sent",
"action": "delete",
"request_id": "6d54ac58-41f1-4fbc-9a39-6e6c86089451",
"status": "processing",
"completed": false,
"count_delete": 100,
"total_before": 250,
"selected_at_start": 200,
"protected_at_start": 50,
"include_linked": 0,
"continue_required": true,
"message": "Repeat GET or POST with the same request_id and include_linked to continue. Status requests do not run deletion."
}
}- 200 avec completed=true : terminé. Une réponse HTTP 200 à preview ou status ne suffit pas, à elle seule, à confirmer la fin de la suppression.
- 400 INVALID_REQUEST_ID : vérifiez le format de l’identifiant. 404 REQUEST_NOT_FOUND : aucune opération ne correspond à cet identifiant, cette clé API et cet historique.
- 401 : identifiants invalides ou expirés. 403 : autorisations OAuth insuffisantes ou compte non autorisé.
- 409 HISTORY_BUSY : un autre nettoyage est en cours ; continuez-le depuis le client original. 409 INCLUDE_LINKED_CONFLICT : restaurer la valeur originale de include_linked.
- 409 OAUTH_ACCOUNT_AMBIGUOUS: fournir une clé API appartenant à ce compte.
- 503 ou interruption du réseau : certains lots peuvent déjà être complétés. Vérifiez la configuration, puis reessayez avec le request_id original. Ne créez pas automatiquement une opération de remplacement.
POST · GET
Send a WhatsApp message
https://api.smsmobileapi.com/sendsmsSends a WhatsApp text or supported media through the connected environment.
Use it for individual recipients or a dashboard contact group.
Parameters
| Nom | Type | Requirement | Description |
|---|---|---|---|
apikey |
string | Required | Your API key; omit when using a Bearer token. |
recipients |
phone | Required | Country code plus number, without + or 00. |
message |
string | Required | Text body; multiple lines are supported. |
waonly |
yes | Required | Must be yes to request WhatsApp-only delivery. |
url_media |
HTTPS URL | Facultatif | Public PDF, document, archive or JPG/PNG URL. |
url_media_shorted |
yes | Facultatif | Use a shortened download URL with PDF preview mode. |
pdf_with_image |
yes | Facultatif | Add an image preview for a PDF. |
encrypt_message |
yes | Facultatif | Require recipient-side decryption. |
contactGroup |
GUID | Facultatif | Send to every contact in a dashboard group. |
Request example
curl -X POST "https://api.smsmobileapi.com/sendsms?waonly=yes" \
-d "apikey=YOUR_API_KEY" \
-d "recipients=191728660" \
--data-urlencode "message=Your order is ready."
Example response
{
"result": {
"error": 0,
"sent": "1",
"id": "MESSAGE_GUID",
"send_with_whatsapp": "1"
}
}
Want to run this request? Connect your API key at the top of the page to unlock the interactive tester.
Connect key ↑- Supported media URLs must be public HTTPS resources.
- WhatsApp formatting: *bold*, _italic_, ~strikethrough~ and triple-backtick monospace.
POST · GET
Resend an unsent WhatsApp message
https://api.smsmobileapi.com/resendwa/Retries a WhatsApp message that currently has an error status.
Use it after diagnosing a failed WhatsApp log entry.
Parameters
| Nom | Type | Requirement | Description |
|---|---|---|---|
apikey |
string | Required | Your API key. |
guid |
string | Required | GUID of the failed message. |
Request example
curl "https://api.smsmobileapi.com/resendwa/?apikey=YOUR_API_KEY&guid=MESSAGE_GUID"
Want to run this request? Connect your API key at the top of the page to unlock the interactive tester.
Connect key ↑- Only failed messages are eligible for resend.
GET
Activate inbound retrieval
https://api.smsmobileapi.com/getwa/active/Activates, deactivates or toggles WhatsApp message retrieval.
Activate collection first. Then, before retrieving received messages, you must request synchronization through /getwa/synchronisation/.
Parameters
| Nom | Type | Requirement | Description |
|---|---|---|---|
apikey |
string | Required | Your API key. |
statut |
0 | 1 | x | Facultatif | 1 activates, 0 deactivates, x or omission toggles the current state. |
Request example
curl "https://api.smsmobileapi.com/getwa/active/?apikey=YOUR_API_KEY&statut=1"
Example response
{
"success": true,
"read_message_active": 1,
"status_note": "Activated"
}
Want to run this request? Connect your API key at the top of the page to unlock the interactive tester.
Connect key ↑- Inbound retrieval is disabled by default for privacy.
- Activation alone does not retrieve messages: a synchronization request remains mandatory before using /getwa for newly received activity.
GET
Required: request WhatsApp synchronization
https://api.smsmobileapi.com/getwa/synchronisation/Mandatory security step before retrieving received WhatsApp messages. It opens a time-limited synchronization window.
You must call this endpoint before /getwa whenever you need SMSMobileAPI to check WhatsApp for newly received messages. Wait for recovery, then call /getwa.
Parameters
| Nom | Type | Requirement | Description |
|---|---|---|---|
apikey |
string | Required | Your API key. |
Request example
curl "https://api.smsmobileapi.com/getwa/synchronisation/?apikey=YOUR_API_KEY"
Example response
{
"error": "0",
"messages": "synchronized",
"expire_at": "2026-03-11 12:27:00",
"expire_at_unix": "1773232020"
}
Want to run this request? Connect your API key at the top of the page to unlock the interactive tester.
Connect key ↑- Synchronization is for receiving messages only. Do not call it before sending.
- The response returns expire_at and expire_at_unix. Request another synchronization window when you need to collect newer received messages.
- A synchronization request is mandatory to protect the exchange between WhatsApp and SMSMobileAPI.
GET
Retrieve WhatsApp messages
https://api.smsmobileapi.com/getwaReturns received WhatsApp messages that were recovered during a requested synchronization window.
Mandatory prerequisite: activate inbound retrieval, call https://api.smsmobileapi.com/getwa/synchronisation/ first, wait for recovery, then call this endpoint. /getwa does not itself start synchronization.
Parameters
| Nom | Type | Requirement | Description |
|---|---|---|---|
apikey |
string | Required | Your API key. |
before |
Unix timestamp | Facultatif | Return records before this timestamp. |
date |
YYYY-MM-DD | Facultatif | Return records for one date. |
message_type |
text | audio | Facultatif | Filter text messages or audio messages converted to text; omit for both. |
Request example
curl "https://api.smsmobileapi.com/getwa/?apikey=YOUR_API_KEY&message_type=text"
Example response
{
"date": "2026-03-11",
"hour": "12:27:00",
"timestamp": "1773232020",
"number": "19176728660",
"contact": "SMSMobileAPI",
"message": "When will I receive my order?",
"guid": "652fcfc0-12a8-46f5-b5ba-9391135b8b4c"
}
Want to run this request? Connect your API key at the top of the page to unlock the interactive tester.
Connect key ↑
GET
Check a WhatsApp number
https://api.smsmobileapi.com/whatsapp/checknumber/Checks whether a phone number is available on WhatsApp.
Use it before sending to reduce avoidable failures.
Parameters
| Nom | Type | Requirement | Description |
|---|---|---|---|
apikey |
string | Required | Your API key. |
recipients |
phone | Required | Country code plus number, without + or 00. |
Request example
curl "https://api.smsmobileapi.com/whatsapp/checknumber/?apikey=YOUR_API_KEY&recipients=19176728660"
Example response
{
"contact_found_on_whatsapp": "yes",
"recipients": "19176728660"
}
Want to run this request? Connect your API key at the top of the page to unlock the interactive tester.
Connect key ↑
POST
Create an OAuth2 access token
https://api.smsmobileapi.com/oauth2/tokenExchanges client credentials for a Bearer token.
Use it for server-to-server integrations where short-lived credentials are preferred.
Parameters
| Nom | Type | Requirement | Description |
|---|---|---|---|
grant_type |
string | Required | Must be client_credentials. |
client_id |
string | Required | Client ID from the dashboard. |
client_secret |
string | Required | Client secret from the dashboard. |
Request example
curl -X POST "https://api.smsmobileapi.com/oauth2/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials" \
-d "client_id=YOUR_CLIENT_ID" \
-d "client_secret=YOUR_CLIENT_SECRET"
Want to run this request? Connect your API key at the top of the page to unlock the interactive tester.
Connect key ↑- Keep the client secret on your server. Never include it in mobile or browser code.
POST · GET
Vider l’historique des messages WhatsApp envoyés
https://api.smsmobileapi.com/delete-history-whatsapp-sent/Efface les enregistrements du serveur des messages WhatsApp envoyés. Il ne supprime pas les messages des conversations WhatsApp.
Commencez par preview, vérifiez les compteurs, puis demandez explicitement la suppression. Elle concerne tout l’historique sélectionné pour la clé API, sans filtre de date, de mobile ou de message.
Parameters
| Nom | Type | Requirement | Description |
|---|---|---|---|
apikey |
string | Facultatif | Requis sans OAuth2. Avec OAuth2, sélectionnez en option une clé API appartenant au même compte. |
action |
preview | delete | status | Facultatif | preview compte les lignes sans les supprimer ; delete démarre ou poursuit la suppression ; status consulte l’avancement sans poursuivre. L’API utilise delete par défaut ; ce testeur choisit preview par sécurité. |
include_linked |
0 | 1 | Facultatif | Valeur par défaut : 0, pour conserver les lignes liées ou en cours de traitement. Choisissez 1 pour les inclure, au risque de perturber les intégrations. Conservez la même valeur lors de la reprise d’une suppression. |
request_id |
string | Facultatif | Obligatoire pour delete et status, facultatif pour preview. Utilisez 16 à 128 lettres, chiffres, tirets (-) ou tirets bas (_). Générez un identifiant unique par nouvelle suppression et conservez-le pour chaque reprise. Il ne s’agit ni de l’identifiant d’un message ni d’une clé API. |
Request example
curl -X POST "https://api.smsmobileapi.com/delete-history-whatsapp-sent/" \
--data-urlencode "apikey=YOUR_API_KEY" \
-d "action=preview" -d "include_linked=0"
Exemples de suppression et de consultation de l’avancement
Remplacez le request_id d’exemple par votre propre identifiant unique avant de commencer. Les requêtes delete ci-dessous modifient réellement l’historique du compte : ce ne sont pas des aperçus.
curl -X POST "https://api.smsmobileapi.com/delete-history-whatsapp-sent/" \
--data-urlencode "apikey=YOUR_API_KEY" \
-d "action=delete" -d "include_linked=0" \
-d "request_id=6d54ac58-41f1-4fbc-9a39-6e6c86089451"curl -X POST "https://api.smsmobileapi.com/delete-history-whatsapp-sent/" \
-H "Authorization: Bearer YOUR_OAUTH_ACCESS_TOKEN" \
-d "action=delete" -d "include_linked=0" \
-d "request_id=6d54ac58-41f1-4fbc-9a39-6e6c86089451"curl -G "https://api.smsmobileapi.com/delete-history-whatsapp-sent/" \
--data-urlencode "apikey=YOUR_API_KEY" \
-d "action=status" \
-d "request_id=6d54ac58-41f1-4fbc-9a39-6e6c86089451"Example response
{
"result": {
"error": 0,
"history": "whatsapp-sent",
"action": "preview",
"total": 120,
"simple": 100,
"linked_or_processing": 20,
"selected": 100,
"include_linked": 0,
"operation_in_progress": false,
"active_include_linked": null
}
}
Want to run this request? Connect your API key at the top of the page to unlock the interactive tester.
Connect key ↑- L'exemple ci-dessus est un aperçu, pas une suppression. Les nombres sont des exemples; la sélection définitive est fixée lorsque la suppression commence.
- include_linked=1 peut perturber GHL, Zapier, les automatismes, les liens de désabonnement ou le suivi de la livraison. Il ne contourne jamais les contrôles d'intégrité de la propriété ou du stockage des comptes.
POST · GET
Vider l’historique des messages WhatsApp reçus
https://api.smsmobileapi.com/delete-history-whatsapp-received/Vide les journaux serveur des messages WhatsApp reçus, sans déconnecter WhatsApp ni supprimer les conversations.
Commencez par preview, vérifiez les compteurs, puis demandez explicitement la suppression. Elle concerne tout l’historique sélectionné pour la clé API, sans filtre de date, de mobile ou de message.
Parameters
| Nom | Type | Requirement | Description |
|---|---|---|---|
apikey |
string | Facultatif | Requis sans OAuth2. Avec OAuth2, sélectionnez en option une clé API appartenant au même compte. |
action |
preview | delete | status | Facultatif | preview compte les lignes sans les supprimer ; delete démarre ou poursuit la suppression ; status consulte l’avancement sans poursuivre. L’API utilise delete par défaut ; ce testeur choisit preview par sécurité. |
include_linked |
0 | 1 | Facultatif | Valeur par défaut : 0, pour conserver les lignes liées ou en cours de traitement. Choisissez 1 pour les inclure, au risque de perturber les intégrations. Conservez la même valeur lors de la reprise d’une suppression. |
request_id |
string | Facultatif | Obligatoire pour delete et status, facultatif pour preview. Utilisez 16 à 128 lettres, chiffres, tirets (-) ou tirets bas (_). Générez un identifiant unique par nouvelle suppression et conservez-le pour chaque reprise. Il ne s’agit ni de l’identifiant d’un message ni d’une clé API. |
Request example
curl -X POST "https://api.smsmobileapi.com/delete-history-whatsapp-received/" \
--data-urlencode "apikey=YOUR_API_KEY" \
-d "action=preview" -d "include_linked=0"
Exemples de suppression et de consultation de l’avancement
Remplacez le request_id d’exemple par votre propre identifiant unique avant de commencer. Les requêtes delete ci-dessous modifient réellement l’historique du compte : ce ne sont pas des aperçus.
curl -X POST "https://api.smsmobileapi.com/delete-history-whatsapp-received/" \
--data-urlencode "apikey=YOUR_API_KEY" \
-d "action=delete" -d "include_linked=0" \
-d "request_id=6d54ac58-41f1-4fbc-9a39-6e6c86089451"curl -X POST "https://api.smsmobileapi.com/delete-history-whatsapp-received/" \
-H "Authorization: Bearer YOUR_OAUTH_ACCESS_TOKEN" \
-d "action=delete" -d "include_linked=0" \
-d "request_id=6d54ac58-41f1-4fbc-9a39-6e6c86089451"curl -G "https://api.smsmobileapi.com/delete-history-whatsapp-received/" \
--data-urlencode "apikey=YOUR_API_KEY" \
-d "action=status" \
-d "request_id=6d54ac58-41f1-4fbc-9a39-6e6c86089451"Example response
{
"result": {
"error": 0,
"history": "whatsapp-received",
"action": "preview",
"total": 120,
"simple": 100,
"linked_or_processing": 20,
"selected": 100,
"include_linked": 0,
"operation_in_progress": false,
"active_include_linked": null
}
}
Want to run this request? Connect your API key at the top of the page to unlock the interactive tester.
Connect key ↑- L'exemple ci-dessus est un aperçu, pas une suppression. Les nombres sont des exemples; la sélection définitive est fixée lorsque la suppression commence.
- include_linked=1 peut perturber GHL, Zapier, les automatismes, les liens de désabonnement ou le suivi de la livraison. Il ne contourne jamais les contrôles d'intégrité de la propriété ou du stockage des comptes.
Troubleshooting
Errors and safe retries
Read the HTTP status and the JSON error field before retrying. Do not retry validation or authentication failures without correcting the request first.
| HTTP | Code | What to do |
|---|---|---|
| 400 | missing_parameter | A required parameter is empty or absent. Check the parameter table for the endpoint. |
| 403 | invalid_apikey | The API key is unknown, expired or not authorized for the requested feature. |
| 429 | too_many_requests | Requests are arriving too quickly. Wait, then retry with exponential backoff. |
| 500 | server_error | The service could not complete the request. Keep the response and contact support if it persists. |
Need help?
Bring the request context—not your secrets.
Share the endpoint, timestamp, HTTP status and sanitized response. Never include API keys, tokens or private message content.
Official mobile application
The secure bridge between your phone, dashboard and API.
SMS and call operations pass through the official SMSMobileAPI app installed on your connected phone. The app securely pairs the device with your account, synchronizes authorized events and links the mobile network to the dashboard and REST API.
- Signed releases distributed through the official Google Play and Apple App Store listings
- Google and Apple platform review, signing and distribution controls
- Secure device pairing, HTTPS transport and authenticated API access
- Only the permissions required for the mobile features you enable


