Retour aux docs APIJavaScript REST

JavaScript avec l’API REST

Le SDK npm public n’est pas encore disponible. Cette route reste accessible pour la compatibilité des liens existants et documente l’intégration JavaScript actuellement supportée avec l’API REST et `fetch`.

Ce qu’il couvre

Contrat OpenAPI 3.1 public et téléchargeable.
Appels REST avec les headers `Authorization`, `Idempotency-Key` et `X-Request-Id`.
`POST /v1/sms/send` suit le contrat asynchrone `202 Accepted` avec `queued: true` et `status: accepted`.
Les routes `/v1/whatsapp/*` couvrent l’envoi, les templates, les conversations et les messages WhatsApp.
Validation de signature webhook avec les primitives cryptographiques de Node.js.
Exemples compatibles avec les backends, workers et jobs planifiés.
Surface disponible

API REST + fetch

Aucune dépendance Coussema à installer
import crypto from 'node:crypto';

const baseUrl = process.env.COUSSEMA_BASE_URL ?? 'https://api.coussema.com';
const apiKey = process.env.COUSSEMA_API_KEY ?? '';
const response = await fetch(`${baseUrl}/v1/sms/send`, {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
    'Idempotency-Key': crypto.randomUUID(),
    'X-Request-Id': 'javascript-rest-send-001',
  },
  body: JSON.stringify({
    to: '243810000000',
    message: 'Votre code est 482019',
    senderName: 'COUSSEMA',
  }),
});

const result = await response.json();
if (!response.ok) throw new Error(`SMS request failed: ${response.status}`);

console.log({
  queued: result.queued,
  status: result.status,
  messageId: result.message.id,
  remainingQuota: result.remainingQuota,
});

Quand utiliser fetch

  • Backends Node.js qui orchestrent les envois SMS et la gestion des contacts.
  • Workers ou crons qui appellent l’API avec une clé serveur.
  • Serveurs webhook qui vérifient la signature Coussema sur le corps brut.

Contrat d’envoi REST

Une réponse `202 Accepted` signifie que le message est accepté et mis en file côté Coussema. Conservez `message.id` pour le suivi. `provider.messageId` reste toujours `null` sur cette surface publique; la preuve de livraison arrive ensuite via DLR ou webhook.