Integrations

Webhooks

Subscribe to 100+ Zivvy events with HMAC-SHA256 signed, retry-safe deliveries.

The snag

Polling for record changes is slow, expensive, and always missing the edge case you care about.

How Zivvy helps

Register a webhook subscription against 100+ events; every delivery is HMAC-SHA256 signed with your secret and retries with exponential backoff for 24 hours.

What you get

  • 100+ typed event slugs (sales-orders.submitted, payment-entries.paid, ...)
  • HMAC-SHA256 signature via X-Zivvy-Signature header
  • Exponential retries for 24h + per-event delivery log

Workflow stream

Ship a payload only when sales-invoices.submitted actually fires

Common uses

  1. 01

    Ship a payload only when sales-invoices.submitted actually fires

  2. 02

    Chain Zivvy → Slack → PagerDuty for on-call alerts

  3. 03

    Warehouse ingest that mirrors every /v1/... row change

Integration code

Open API reference

Register a subscription

curl -X POST https://integrate.zivvy.xyz/v1/webhook-subscriptions \
  -H "Authorization: Bearer $ZIVVY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "target_url": "https://api.your-app.com/hooks/zivvy",
    "events": ["sales-invoices.paid", "sales-orders.submitted"],
    "secret": "whsec_..."
  }'

Verify + handle

import crypto from "crypto";

function verify(rawBody, signature, secret) {
  const digest = crypto
    .createHmac("sha256", secret)
    .update(rawBody)
    .digest("hex");
  return crypto.timingSafeEqual(
    Buffer.from(digest),
    Buffer.from(signature)
  );
}

export async function POST(req) {
  const raw = await req.text();
  const ok = verify(raw, req.headers.get("x-zivvy-signature"), process.env.WHSEC);
  if (!ok) return new Response("bad signature", { status: 401 });
  const evt = JSON.parse(raw);
  // ...handle evt.event
  return new Response("ok");
}

Verify in Python

import hmac, hashlib

def verify(raw: bytes, signature: str, secret: str) -> bool:
    digest = hmac.new(secret.encode(), raw, hashlib.sha256).hexdigest()
    return hmac.compare_digest(digest, signature)

API endpoints

POST /v1/webhook-subscriptionsGET /v1/webhook-subscriptionsDELETE /v1/webhook-subscriptions/{id}GET /v1/webhook-deliveries

Events emitted

HMAC-SHA256 signed webhooks, retried for 24 hours.

  • customers.created
  • sales-orders.submitted
  • sales-invoices.paid
  • payment-entries.paid
  • stock-entries.submitted

0

free seats forever

0

card required to start

1

workspace for the workflow

Questions

Ready to try it?

Free plan. Two seats. No card.