Connexion
Base URL
https://sender.opportail.com/v1
X-API-Key: votre_cle_api
Content-Type: application/jsonEnvoyez des messages, suivez leur livraison, consultez les conversations et automatisez les événements.
Ces routes sont implémentées et protégées par clé API. Les actions WhatsApp nécessitent une instance connectée et peuvent dépendre des capacités du fournisseur.
Gardez la clé API côté serveur et transmettez-la avec chaque requête protégée.
Base URL
https://sender.opportail.com/v1
X-API-Key: votre_cle_api
Content-Type: application/jsoncurl -sS \
-H "X-API-Key: $OPSENDER_API_KEY" \
https://sender.opportail.com/v1/instancescurl -sS -X POST \
-H "X-API-Key: $OPSENDER_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: commande_20260904_0001" \
-d '{"to":"+243000000000","type":"text","text":{"body":"Bonjour"}}' \
https://sender.opportail.com/v1/instances/opportail-rdc/messagesInspecter et piloter les numéros WhatsApp.
GET /health
GET /openapi.yaml
GET /capabilities
GET /instances
POST /instances
GET /instances/{instanceId}
GET /instances/{instanceId}/capabilities
POST /instances/{instanceId}/capabilities/probe
GET /instances/{instanceId}/events
POST /instances/{instanceId}/connect
POST /instances/{instanceId}/restart
POST /instances/{instanceId}/disconnectTexte, médias, localisation, sondage, boutons expérimentaux et actions sur les messages.
GET /instances/{instanceId}/messages
POST /instances/{instanceId}/messages
GET /instances/{instanceId}/messages/search
GET /instances/{instanceId}/messages/{messageId}
GET /instances/{instanceId}/messages/{messageId}/media
GET /instances/{instanceId}/messages/{messageId}/delivery
POST /instances/{instanceId}/messages/{messageId}/react
POST /instances/{instanceId}/messages/{messageId}/reply
POST /instances/{instanceId}/messages/{messageId}/forward
POST /instances/{instanceId}/messages/{messageId}/edit
POST /instances/{instanceId}/messages/{messageId}/delete
POST /instances/{instanceId}/chats/{chatId}/readBoutons : envoyez type: buttons avec 1 à 3 éléments. Cette capacité est expérimentale et utilise un repli texte si WhatsApp rejette le rendu interactif ou ne confirme pas sa réception serveur. Les réponses 1, 2, 3 ou le libellé du choix sont automatiquement publiées dans message.button_response.
Recommandé : utilisez Idempotency-Key pour éviter les doublons pendant une reprise réseau.
Consulter le cache et synchroniser l'historique disponible.
GET /instances/{instanceId}/conversations
GET /instances/{instanceId}/conversations/{chatId}/messages
POST /instances/{instanceId}/conversations/{chatId}/read
POST /instances/{instanceId}/conversations/sync
GET /instances/{instanceId}/conversations/sync
GET /instances/{instanceId}/conversations/sync/{jobId}
GET /instances/{instanceId}/chats
GET /instances/{instanceId}/chats/{chatId}/messagesGérer les groupes, participants, administrateurs et invitations.
GET /instances/{instanceId}/groups
GET /instances/{instanceId}/groups/{groupId}
PATCH /instances/{instanceId}/groups/{groupId}
GET /instances/{instanceId}/groups/{groupId}/participants
POST /instances/{instanceId}/groups/{groupId}/participants
DELETE /instances/{instanceId}/groups/{groupId}/participants
POST /instances/{instanceId}/groups/{groupId}/admins
DELETE /instances/{instanceId}/groups/{groupId}/admins
GET /instances/{instanceId}/groups/{groupId}/invite
POST /instances/{instanceId}/groups/{groupId}/invite/reset
POST /instances/{instanceId}/groups/{groupId}/leaveCréer et maintenir les contacts du compte client.
GET /contacts
POST /contacts
GET /contacts/{contactId}
PATCH /contacts/{contactId}
DELETE /contacts/{contactId}Configurer les événements, secrets, tests et relances.
GET /instances/{instanceId}/channels
POST /instances/{instanceId}/channels
GET /instances/{instanceId}/channels/{channelId}
PATCH /instances/{instanceId}/channels/{channelId}
DELETE /instances/{instanceId}/channels/{channelId}
POST /instances/{instanceId}/channels/{channelId}/subscribe
POST /instances/{instanceId}/channels/{channelId}/unsubscribe
POST /instances/{instanceId}/channels/{channelId}/messages
GET /webhooks
POST /webhooks
PATCH /webhooks/{webhookId}
DELETE /webhooks/{webhookId}
POST /webhooks/{webhookId}/active
POST /webhooks/{webhookId}/rotate-secret
POST /webhooks/{webhookId}/test
GET /webhook-deliveries
POST /webhook-deliveries/{deliveryId}/replaymessage.sent, message.ack, message.failed, message.button_response, session.ready, session.disconnected
message.ack fournit deliveryStatus : pending, sent, delivered, read, played ou failed.
X-Opsender-Event
X-Opsender-Delivery
X-Opsender-Signature: sha256=...Parcours recommandé pour HuzaMarket et les plateformes de petites annonces.
"items": [
{ "id": "HM-4821.available", "body": "Oui" },
{ "id": "HM-4821.unavailable", "body": "Non" }
]Les réponses 1/OUI et 2/NON déclenchent message.button_response. Utilisez response.buttonId, pas le texte libre, comme instruction métier.
Vérifiez X-Opsender-Signature sur le corps brut, dédupliquez deliveryId, puis contrôlez que le numéro from appartient au propriétaire de l'annonce avant toute mise à jour.
Activez includeMessageContent, désactivez maskIdentifiers et confirmez sensitiveDataConsent dans la politique du webhook.
Livraison : toute réponse 2xx est acceptée, avec un délai maximal de 10 secondes. Opsender tente par défaut 5 livraisons avec reprises progressives. Le secret HMAC-SHA256 est retourné une seule fois à la création ou à la rotation.
Prévoyez les reprises et traitements asynchrones.
Renvoyez nextCursor sans le modifier et consultez GET /capabilities avant une fonction avancée.
Créez votre compte et commencez par lister vos instances.