Votre système est informé de chaque vente, à l’instant même.

Les webhooks de Cord préviennent votre serveur dès qu’un événement survient dans votre cycle de vente : un devis envoyé, consulté, approuvé ou payé, une facture émise, un nouveau client. Chaque notification est un POST JSON signé avec HMAC-SHA256, avec des nouvelles tentatives automatiques et un historique consultable dans le Workbench.

Dans toutes les offres : 16 endpoints dans les offres Gratuite, Starter et Professionnel, 32 dans Scale et 100 dans Developer.

POST https://erp.mdvalle-usa.com/webhooks/cord200 OK
User-Agent: Cord-Webhooks/1.0
X-Cord-Event: quote.paid
X-Cord-Event-Id: evt_9c1f4be07a2d4e61b3f8a05c7d92e1aa
X-Cord-Attempt: 1
X-Cord-Signature-V1: t=1790786728,v1=5f2c09d1e4a7b38c…
{
  "id": "evt_9c1f4be07a2d4e61b3f8a05c7d92e1aa",
  "event": "quote.paid",
  "created_at": "2026-09-30T22:45:28.114Z",
  "data": {
    "id": "c2f9a1d4-7b3e-4c1a-9e55-01a6c3d8f2b7",
    "folio": "COT-0149",
    "status": "paid",
    "moneda": "USD",
    "total": 4123.4,
    "cliente": "Ridgeline Builders LLC",
    "cliente_id": "9b41c2e0-3d7a-4f12-8c55-6e0b1a2d4f90",
    "link_publico": "https://cordhq.app/q/q8Fz2LkP"
  }
}
signé · HMAC-SHA256délai de 5 s · jusqu’à 11 tentatives

SIGNATURE

Vérifiez que la notification vient bien de Cord.

Chaque envoi porte X-Cord-Signature-V1, avec un horodatage et le HMAC-SHA256 du corps brut, signé avec le secret de votre endpoint. Vous le validez en quelques lignes avant de traiter l’événement, et l’horodatage vous protège contre le renvoi d’un ancien envoi par un tiers.

  • X-Cord-Event-Id pour dédupliquer sans lire le corps
  • X-Cord-Attempt indique le numéro de la tentative d’envoi
  • Pendant une rotation, la signature utilise le nouveau secret et l’ancien
verify-cord.jsNode.js
import crypto from 'node:crypto';

// header = req.headers['x-cord-signature-v1'], rawBody = corps brut, non analysé
export function verifyCord(rawBody, header, secret) {
  const parts = header.split(',');
  const t = parts.find((p) => p.startsWith('t='))?.slice(2);
  if (!t || Math.abs(Date.now() / 1000 - Number(t)) > 300) return false;
  const expected = crypto.createHmac('sha256', secret)
    .update(`${t}.${rawBody}`).digest();
  // pendant une rotation, deux v1 arrivent : une seule correspondance suffit
  return parts.filter((p) => p.startsWith('v1=')).some((p) => {
    const got = Buffer.from(p.slice(3), 'hex');
    return got.length === expected.length && crypto.timingSafeEqual(got, expected);
  });
}

CATALOGUE

41 événements pour tout le cycle de vente.

Pas seulement des devis. Recevez des notifications pour les factures finalisées, envoyées, payées ou en retard, les paiements partiels ou échoués, les remboursements, les litiges, les versements, les clients, les produits, les tâches et les promesses de paiement. Abonnez chaque endpoint uniquement à ce dont il a besoin.

  • quote.* · invoice.* · payment.* · refund.* · payout.*
  • client.* · product.* · task.* · promise.* · dispute.*
  • Les mêmes types que renvoie GET /api/v1/events
Vue d’ensembleJournauxErreursÉvénementsWebhooksShellClés APISanté
Tous les typesTousÉchouésEn attenteEnvoyésID de l’objet…En direct
invoice.paidFacture payéef3a8d1c4…2a61Système9 oct., 16:52:08
quote.createdDevis crééc2f9a1d4…f2b7API9 oct., 16:43:29
quote.approvedDevis approuvé8a3e5d17…2e85Système9 oct., 16:31:40
client.updatedClient mis à jour9b41c2e0…4f90API9 oct., 16:29:52
payment.partialPaiement partiel reçua72c19e4…d4b3Système9 oct., 16:12:05
task.completedTâche terminée4e0c7b2a…9a27Tableau de bord9 oct., 15:58:17
refund.succeededRemboursement effectuée6b1d904…1f63Système9 oct., 15:40:51
promise.createdPromesse de paiement enregistrée0d5f8c3e…d635Tableau de bord9 oct., 15:21:33
payout.paidVersement effectuéSystème9 oct., 14:05:00
dispute.createdLitige ouvert7b9e2a41…2a59Système9 oct., 11:20:46
invoice.overdueFacture en retard5d0e7c31…1b88Système9 oct., 09:00:02
quote.expiring3c7a1e90…7f30Système9 oct., 08:00:01
product.updatedProduit mis à jour61f2a8d0…7f48Tableau de bord9 oct., 07:12:44

SANS CODE

Zapier, Make et n8n, sans copier de clé.

Zapier et Make se connectent à Cord via OAuth : vous autorisez l’application une fois et elle apparaît dans le Workbench comme connexion autorisée, révocable à tout moment. n8n utilise une clé API. Tous trois créent leurs propres abonnements webhook, avec un quota distinct de 100 qui n’entame pas les endpoints de votre équipe.

  • Autorisation OAuth pour Zapier et Make
  • Révoquez une application sans toucher à vos clés
  • HubSpot, Slack et Microsoft Teams se connectent directement depuis les Paramètres
Vue d’ensembleJournauxErreursÉvénementsWebhooksShellClés APISanté
Utilisation de l’API ce mois-ci3 486 / 5 000Seuls les appels avec des clés live comptent ; ceux en test et depuis le Workbench, non.
Version de l’API2026-10-01Chaque clé et chaque webhook restent liés à la version en vigueur lors de leur création ; l’en-tête Cord-Version la modifie par requête.

Clés API

Elles connectent votre propre système ou n8n à Cord. Zapier et Make n’en ont pas besoin : ils apparaissent ici comme connexions autorisées. Traitez chaque clé comme un mot de passe.

TestLiveOffre Professionnel : 5/20+ Générer une clé
NomJetonDroitsDernière utilisationCréation
ZapierOAuthConnexion autoriséeÉcritureaujourd’hui, 16:3124 sept. 2026JournauxRévoquer
MakeOAuthConnexion autoriséeÉcriturehier, 18:0218 sept. 2026JournauxRévoquer
Claude · FinanceLiveRestreinterk_live_••••••••••••••••••••7c3d3 ressourcesaujourd’hui, 16:3710 sept. 2026JournauxModifierRenouvelerRévoquer
n8n · AutomatisationsLiveSecrète1 IPsk_live_••••••••••••••••••••c71eÉcritureaujourd’hui, 15:121 sept. 2026JournauxModifierRenouvelerRévoquer
Portail clientsLivePubliablepk_live_••••••••••••••••••••41c9Lectureaujourd’hui, 16:4128 août 2026JournauxModifierRenouvelerRévoquer
ERP · Synchro nocturneLiveSecrète2 IPExpire le 14 oct. 2026sk_live_••••••••••••••••••••8f2aÉcritureaujourd’hui, 16:4321 août 2026JournauxModifierRenouvelerRévoquer
Tests en localTestSecrètesk_test_••••••••••••••••••••d77eÉcritureaujourd’hui, 15:3119 août 2026JournauxModifierRenouvelerRévoquer
Script de rapportsLiveSecrètesk_live_••••••••••••••••••••b0e3Lecture10 sept., 11:001 août 2026Révoquée

QUESTIONS FRÉQUENTES

Webhooks et intégrations : les questions des développeurs.

C’est une notification automatique : lorsqu’un événement se produit dans votre compte, comme un devis approuvé ou une facture payée, Cord envoie un POST JSON à l’URL que vous avez enregistrée, signé avec HMAC-SHA256 pour que vous puissiez en vérifier l’origine.

Cord retente jusqu’à 11 fois, avec un délai croissant, pendant près de quatre jours, et un délai d’expiration de 5 secondes par tentative. Après 3 échecs consécutifs, vous recevez une alerte, et après 5 l’endpoint est désactivé jusqu’à ce que vous le réactiviez.

Utilisez X-Cord-Event-Id, également présent dans le champ id du corps. Il reste identique à chaque tentative d’un même événement : il suffit de conserver ceux que vous avez déjà traités.

Non. La connexion directe existe notamment pour HubSpot, Slack et Microsoft Teams. Pour SAP, Salesforce ou Oracle, vous dirigez un webhook vers votre backend ou vers Zapier, Make ou n8n, et vous utilisez l’API REST pour écrire en retour dans Cord.

16 dans les offres Gratuite, Starter et Professionnel, 32 dans Scale et 100 dans Developer. Les abonnements créés par Zapier, Make ou n8n disposent d’un quota distinct de 100 par organisation.

Découvrez le reste de la plateforme pour développeurs.

Recevez votre premier événement de test.

Enregistrez un endpoint dans le Workbench et utilisez Tester pour voir l’envoi arriver.

Sachez ce que vous paierez

Des tarifs publiés, avec les frais de chaque encaissement bien visibles.

En savoir plus sur les tarifs →

Lancez-vous

Commencez à travailler et à envoyer des devis avec le plan Gratuit.

Options d’intégration →