Let your system hear about every sale, the moment it happens.

Cord's webhooks notify your server every time something happens in your sales cycle: a quote sent, viewed, approved or paid, an invoice issued, a new client. Each notice is a JSON POST signed with HMAC-SHA256, with automatic retries and a history you can review in the Workbench.

On every plan: 16 endpoints on Free, Starter and Professional, 32 on Scale and 100 on Developer.

POST https://erp.materialesdelvalle.mx/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": "MXN",
    "total": 71780.8,
    "cliente": "Distribuidora El Zarco",
    "cliente_id": "9b41c2e0-3d7a-4f12-8c55-6e0b1a2d4f90",
    "link_publico": "https://cordhq.app/q/q8Fz2LkP"
  }
}
signed · HMAC-SHA2565 s timeout · up to 11 attempts

SIGNATURE

Verify the notice came from Cord.

Every delivery carries X-Cord-Signature-V1 with a timestamp and the HMAC-SHA256 of the raw body, signed with your endpoint's secret. You validate it in a few lines before processing the event, and the timestamp protects you from someone replaying an old delivery.

  • X-Cord-Event-Id to deduplicate without reading the body
  • X-Cord-Attempt tells you which delivery attempt it is
  • During a rotation it signs with both the new and the previous secret
verify-cord.jsNode.js
import crypto from 'node:crypto';

// header = req.headers['x-cord-signature-v1'], rawBody = unparsed body
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();
  // during a rotation two v1 values arrive: one match is enough
  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);
  });
}

CATALOG

41 events for the whole sales cycle.

Not just quotes. Get notices for invoices finalized, sent, paid or overdue, partial or failed payments, refunds, disputes, payouts, clients, products, tasks and promises to pay. Subscribe each endpoint only to what it needs.

  • quote.* · invoice.* · payment.* · refund.* · payout.*
  • client.* · product.* · task.* · promise.* · dispute.*
  • The same types GET /api/v1/events returns
OverviewWebhooksEventsAPILogsHealth
AllSentInternal60
invoice.finalizedSent eventSep 30, 16:58
quote.paidSent eventSep 30, 16:52
viewedCOT-0151Sep 30, 16:47
quote.approvedSent eventSep 30, 16:31
payment.partialSent eventSep 30, 16:12
client.createdSent eventSep 30, 15:40
promise.createdSent eventSep 30, 15:21
payout.paidSent eventSep 30, 14:05
emailCOT-0149Sep 30, 13:48
invoice.overdueSent eventSep 30, 09:00

NO CODE

Zapier, Make and n8n, without copying keys.

Zapier and Make connect to Cord with OAuth: you authorize the app once and it shows up in the Workbench as an authorized connection you can revoke anytime. n8n uses an API key. All three create their own webhook subscriptions, with a separate allowance of 100 that does not use up your team's endpoints.

  • OAuth authorization for Zapier and Make
  • Revoke an app without touching your keys
  • HubSpot, Slack and Microsoft Teams connect directly from Settings
OverviewWebhooksEventsAPILogsHealth

API keys

They connect your own system or n8n with Cord. Zapier and Make do not need them: they show up here as authorized connections. Treat each key like a password.

TestLiveProfessional plan: 3/20+ Generate key
NameTokenPermissionsLast usedCreated
ZapierOAuthAuthorized connectionWritetoday, 10:41Sep 12, 2026Revoke
MakeOAuthAuthorized connectionWriteyesterday, 18:02Sep 3, 2026Revoke
n8n · AutomationsLiveSecretsk_live_••••••••••••••••••••c71eWritetoday, 09:15Aug 28, 2026Revoke
ERP · Nightly syncLiveSecretsk_live_••••••••••••••••••••8f2aWritetoday, 10:57Aug 21, 2026Revoke
Client portalLivePublishablepk_live_••••••••••••••••••••41c9Readtoday, 09:00Sep 5, 2026Revoke

FREQUENTLY ASKED QUESTIONS

What developers ask about Webhooks and integrations.

An automatic notice: when an event happens in your account, such as an approved quote or a paid invoice, Cord sends a JSON POST to the URL you registered, signed with HMAC-SHA256 so you can verify where it came from.

Cord retries up to 11 times with growing waits over almost four days, with a 5-second timeout per attempt. After 3 consecutive failures you get a notice and after 5 the endpoint is disabled until you turn it back on.

Use X-Cord-Event-Id, which also travels as the id field in the body. It stays the same across every retry of an event, so you only need to store the ones you already handled.

No. Direct connections exist for HubSpot, Slack and Microsoft Teams, among others. For SAP, Salesforce or Oracle you point a webhook at your backend or at Zapier, Make or n8n, and use the REST API to write back into Cord.

16 on Free, Starter and Professional, 32 on Scale and 100 on Developer. Subscriptions created by Zapier, Make or n8n have a separate allowance of 100 per organization.

Explore the rest of the developer platform.

Receive your first event in minutes.

Register an endpoint in the Workbench and hit Test to watch the delivery arrive.

See what you'll pay

Integrated per-transaction pricing with no hidden fees.

Pricing info →

Start building

Start operating and sending quotes in just 10 minutes.

Integration options →