Retour aux docs APIIntegration cookbook
Exemples prêts à brancher
Curl pour le diagnostic rapide et `fetch` pour un backend Node. Le SDK npm public n’est pas encore disponible; ces exemples utilisent les routes réellement exposées par la plateforme.
JavaScript REST
Exemple Node.js
import crypto from 'node:crypto';
const baseUrl = process.env.COUSSEMA_BASE_URL ?? 'https://api.coussema.com';
const apiKey = process.env.COUSSEMA_API_KEY ?? '';
const smsResponse = await fetch(`${baseUrl}/v1/sms/send`, {
method: 'POST',
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
'Idempotency-Key': crypto.randomUUID(),
'X-Request-Id': 'docs-example-001',
},
body: JSON.stringify({
to: '243810000000',
message: 'Bonjour depuis Coussema.',
senderName: 'COUSSEMA',
}),
});
const sms = await smsResponse.json();
if (!smsResponse.ok) throw new Error(`SMS request failed: ${smsResponse.status}`);
const contactsResponse = await fetch(`${baseUrl}/v1/contacts?limit=20`, {
headers: { Authorization: `Bearer ${apiKey}` },
});
const contacts = await contactsResponse.json();
console.log({
accepted: sms.queued === true && sms.status === 'accepted',
messageId: sms.message.id,
contacts: contacts.items.length,
});Envoyer un SMS
Mutation idempotente minimale avec corrélation explicite. La réponse `202 Accepted` confirme la mise en file.
curl -X POST https://api.coussema.com/v1/sms/send \
-H 'Authorization: Bearer csm_live_xxxxxxxxxxxx_xxx' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 7228b5c7-cb1d-43c0-8d68-2e9f68a5fba5' \
-H 'X-Request-Id: send-001' \
-d '{
"to": "243810000000",
"message": "Votre code est 482019",
"senderName": "COUSSEMA",
"clientReference": "order-482019"
}'Réponse attendue
HTTP/1.1 202 Accepted
Content-Type: application/json
{
"success": true,
"queued": true,
"status": "accepted",
"count": 1,
"remainingQuota": 999,
"message": {
"id": "11111111-1111-4111-8111-111111111111",
"clientReference": "order-482019"
},
"provider": {
"code": "coussema",
"messageId": null,
"httpStatus": 202
}
}Créer un contact
Le contact rejoint immédiatement le runtime partagé du dashboard et des campagnes.
curl -X POST https://api.coussema.com/v1/contacts \
-H 'Authorization: Bearer csm_live_xxxxxxxxxxxx_xxx' \
-H 'Content-Type: application/json' \
-H 'X-Request-Id: contact-create-001' \
-d '{
"firstName": "Amina",
"lastName": "Mbayo",
"phoneNumber": "243810000000",
"tags": ["clients-vip", "kinshasa"]
}'Planifier une campagne
Le worker se charge ensuite du staging, des retries provider et des webhooks sortants.
curl -X POST https://api.coussema.com/v1/campaigns \
-H 'Authorization: Bearer csm_live_xxxxxxxxxxxx_xxx' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 26b7af09-c8b0-4b11-b0b5-99a3e2d82d90' \
-d '{
"name": "Lancement Avril",
"content": "Notre offre est disponible jusqu a dimanche.",
"senderName": "COUSSEMA",
"scheduledAt": "2026-04-10T08:00:00.000Z",
"recipients": [
"243810000000",
"243820000000"
]
}'Créer un webhook sortant
Le secret de signature est renvoyé une seule fois. Conservez-le immédiatement.
curl -X POST https://api.coussema.com/v1/webhooks \
-H 'Authorization: Bearer csm_live_xxxxxxxxxxxx_xxx' \
-H 'Content-Type: application/json' \
-d '{
"url": "https://example.com/webhooks/coussema",
"subscribed_events": ["message.delivered", "message.failed"]
}'