Trois étapes vers une première requête
Créer une clé
Dans le portail (en anglais), Settings → API Keys. Nommez la clé, choisissez une échéance et copiez-la : elle n’apparaît qu’une fois et n’est conservée que sous forme d’empreinte.
Appeler un point de terminaison
Envoyez la clé comme jeton de porteur. GET /api/v1/me renvoie votre organisation, les portées de la clé et sa limite de débit : c’est le premier appel à faire.
S’abonner aux événements
Settings → Webhooks : ajoutez une adresse https sur un hôte que votre organisation a approuvé, cochez les événements voulus, de call.completed à survey.responded, et gardez le secret de signature, affiché une seule fois.
Partir d’une requête qui fonctionne
Aucun paquet à installer : l’API parle HTTPS et JSON, alors ces exemples fonctionnent tels quels.
OpenAPI 3.1
openapi.jsonGET /api/v1/openapi.jsonProduite à partir des schémas que l’API valide, et lisible sans clé.
Ouvrir la spécificationcurl
terminalcurl https://api.inboundcx.com/api/v1/me \ -H "Authorization: Bearer $API_KEY"Vérifie la clé : l’organisation, ses portées et la limite de débit vous reviennent.
JavaScript
fetchconst res = await fetch("https://api.inboundcx.com/api/v1/contacts?includeAutoCreated=false&limit=50", { headers: { Authorization: `Bearer ${process.env.API_KEY}` }, }); if (!res.ok) throw new Error(`${res.status} ${await res.text()}`); const { contacts, nextCursor } = await res.json();Liste les fiches saisies par une personne, 50 à la fois, avec un curseur pour la page suivante.
Python
requestsimport os import requests r = requests.post( "https://api.inboundcx.com/api/v1/messages", headers={"Authorization": f"Bearer {os.environ['API_KEY']}"}, json={"to": "+15145550142", "body": "Your technician arrives between 9 and 11."}, timeout=10, ) r.raise_for_status() message = r.json()["message"]Envoie un texto au nom de l’organisation, facturé au tarif de son transporteur.
Signatures des webhooks
HMAC-SHA256import crypto from "node:crypto"; // Deprecated names with the same values: x-ringfully-timestamp, x-ringfully-signature. const timestamp = req.get("x-inboundcx-timestamp") ?? ""; const signature = req.get("x-inboundcx-signature") ?? ""; const expected = crypto .createHmac("sha256", process.env.INBOUNDCX_WEBHOOK_SECRET) .update(`${timestamp}.${rawBody}`) .digest("hex"); const valid = expected.length === signature.length && crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signature)) && Math.abs(Date.now() - Number(timestamp)) < 5 * 60 * 1000;Lit
x-inboundcx-timestampetx-inboundcx-signature;x-ringfully-timestampetx-ringfully-signatureObsolète arrivent encore, avec les mêmes valeurs.Clés d’API
Pro et BusinessAuthorization: Bearer rk_live_…Créées dans Settings → API Keys. Une clé révoquée à cet endroit cesse de fonctionner dès sa requête suivante.
Ouvrir API Keys dans le portail
Ce que vous pouvez bâtir dès aujourd’hui
Chaque appel consigné dans votre propre système
Recevez call.completed à la fin d’un appel, ou remontez l’historique page par page, et classez chaque appel au dossier du bon client.
GET /api/v1/callsUne liste de contacts toujours à jour
Créez, renommez et supprimez des fiches depuis les logiciels que vous utilisez déjà. Un numéro que votre équipe a déjà appelé est nommé, pas dupliqué.
POST /api/v1/contactsDes textos envoyés depuis vos outils
Envoyez un rappel ou une mise à jour d’intervention depuis votre logiciel de réservation ou de répartition, et lisez les réponses conversation par conversation.
POST /api/v1/messages
Questions sur l’API
Posez vos questions sur une portée, une limite ou un point de terminaison par le formulaire de contact.
Nous écrireÉtat du service
Si nos serveurs, l’application Web et le réseau téléphonique fonctionnent en ce moment, vérifié en direct, avec les incidents consignés.
Voir l’état du service