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.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"
  }
}
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
OverviewLogsErrorsEventsWebhooksShellAPI keysHealth
All typesAllFailedQueuedDeliveredObject ID…Live
invoice.paidInvoice paidf3a8d1c4…2a61SystemOct 9, 16:52:08
quote.createdQuote createdc2f9a1d4…f2b7APIOct 9, 16:43:29
quote.approvedQuote approved8a3e5d17…2e85SystemOct 9, 16:31:40
client.updatedClient updated9b41c2e0…4f90APIOct 9, 16:29:52
payment.partialPartial payment receiveda72c19e4…d4b3SystemOct 9, 16:12:05
task.completedTask completed4e0c7b2a…9a27DashboardOct 9, 15:58:17
refund.succeededRefund completede6b1d904…1f63SystemOct 9, 15:40:51
promise.createdPayment promise recorded0d5f8c3e…d635DashboardOct 9, 15:21:33
payout.paidPayout paidSystemOct 9, 14:05:00
dispute.createdDispute opened7b9e2a41…2a59SystemOct 9, 11:20:46
invoice.overdueInvoice overdue5d0e7c31…1b88SystemOct 9, 09:00:02
quote.expiring3c7a1e90…7f30SystemOct 9, 08:00:01
product.updatedProduct updated61f2a8d0…7f48DashboardOct 9, 07:12:44

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
OverviewLogsErrorsEventsWebhooksShellAPI keysHealth
API usage this month3,486 / 5,000Only calls made with live keys count; test and Workbench calls don't.
API version2026-10-01Every key and webhook is pinned to the current version when created; the Cord-Version header overrides it per request.

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: 5/20+ Generate key
NameTokenPermissionsLast usedCreated
ZapierOAuthAuthorized connectionWritetoday, 16:31Sep 24, 2026LogsRevoke
MakeOAuthAuthorized connectionWriteyesterday, 18:02Sep 18, 2026LogsRevoke
Claude · FinanceLiveRestrictedrk_live_••••••••••••••••••••7c3d3 resourcestoday, 16:37Sep 10, 2026LogsEditRollRevoke
n8n · AutomationsLiveSecret1 IPsk_live_••••••••••••••••••••c71eWritetoday, 15:12Sep 1, 2026LogsEditRollRevoke
Client portalLivePublishablepk_live_••••••••••••••••••••41c9Readtoday, 16:41Aug 28, 2026LogsEditRollRevoke
ERP · Nightly syncLiveSecret2 IPExpires Oct 14, 2026sk_live_••••••••••••••••••••8f2aWritetoday, 16:43Aug 21, 2026LogsEditRollRevoke
Local testingTestSecretsk_test_••••••••••••••••••••d77eWritetoday, 15:31Aug 19, 2026LogsEditRollRevoke
Reports scriptLiveSecretsk_live_••••••••••••••••••••b0e3ReadSep 10, 11:00Aug 1, 2026Revoked

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 test event.

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

See what you'll pay

Published pricing, with the fee for every payment in plain view.

Pricing details →

Start building

Start operating and sending quotes on the Free plan.

Integration options →