Automation & API · Tell your stack

Webhooks

Signed deliveries of your library, on your schedule. The Components → Webhook connector posts your parts as JSON batches, signed to the Standard Webhooks spec and paced to what your receiver can take. Trigger them by hand or by cron.

Sideband
sideband.local / connectors / webhook
POST · signed Components → Webhook (JSON)

POST /hooks/components HTTP/1.1

host: erp.internal.example

content-type: application/json

webhook-id: msg_2x9Kq3pP7vQ1

webhook-timestamp: 1781078400

webhook-signature: v1,K5oZ8f0u3pX2mN7qL1sR4tWyB6cE9aH0=

{
  "entities": [
    {
      "id": "CMP-1044",
      "name": "RC0402FR-0710KL",
      "ipn": "RES-0402-10K",
      "status": "active",
      "tags": ["passives"],
      "parameters": [{ "type": "Resistance", "value": "10K" }],
      "mpns": [{ "manufacturer": "Yageo", "partNumber": "RC0402FR-0710KL" }],
      "symbols": [...], "footprints": [...], "attachments": [...]
    },
    … up to 250 entities per delivery
  ]
}

A single delivery, as it leaves the connector. The signature values shown are illustrative.

Batching

Two hundred and fifty at a time

A push walks every non-deleted component in the library and ships them in batches of up to 250 entities per POST. A thousand-part library lands in five requests, and your receiver can upsert each batch keyed by id or IPN.

Push now

1,038 components

  • POST 1/5 250 entities 202
  • POST 2/5 250 entities 202
  • POST 3/5 250 entities 202
  • POST 4/5 250 entities 202
  • POST 5/5 38 entities 202

One run walks every non-deleted component; nothing for the receiver to page through.

Signing

Verified with a library you already have

Every delivery carries webhook-id, webhook-timestamp and webhook-signature headers: an HMAC-SHA256 over the exact bytes sent, per the Standard Webhooks spec. The spec is open, so verification is whatever standardwebhooks package your stack already uses, pointed at the raw request body.

Don't re-serialize the JSON before verifying; the signature covers the bytes as they arrived.

import { Webhook } from "standardwebhooks";

const wh = new Webhook(process.env.WHSEC); // whsec_…
const payload = wh.verify(rawBody, req.headers);
// throws on a bad signature or a stale timestamp

Pacing

Polite to rate-limited receivers

Outbound runs go through a throttle with configurable requests per second and concurrency. A bulk push against an ERP that allows four requests a second takes a little longer, and works the first time.

Outbound throttle

requests/second: 4 concurrency: 2
queue
receiver

A rate-limited endpoint is respected; batches arrive at the pace you set.

Trigger

By hand, or on the clock

Push now runs a full delivery of the library the moment you click it. For steady sync, attach a cron schedule instead and the same run repeats unattended, so the downstream copy stays a few hours old at most, on a cadence you chose.

Push now

Walks the whole library in one run; handy after a bulk edit, or while you test against a Svix Play URL.

Scheduled active

0 */6 * * *: every 6 hours, the same full walk, unattended.

Your policy

Retries, written by you

The connector is ordinary code you can read and edit, so retry and backoff behaviour is yours to define. Helpers like sendWebhook handle the delivery itself, so a policy runs to a few lines.

export async function push(entities, config, helpers) {
  for (let attempt = 1, delay = 1000; ; attempt++, delay *= 2) {
    const res = await helpers.sendWebhook(config.url, entities);
    if (res.ok) return;
    if (attempt === 3) throw new Error(`gave up: ${res.status}`);
    await new Promise((r) => setTimeout(r, delay));
  }
}

Outbound only: Sideband is not a webhook broker. No inbound event subscriptions, no per-event triggers. To pull data in, use an inbound connector.

How it works

From zero to in-sync in three steps

01

Point it at a URL

Give the Components → Webhook connector your endpoint and a whsec_… signing secret. A Svix Play URL is a fine first receiver while you watch deliveries land.

02

Verify the signature

On your side, check the raw body against the webhook-id, webhook-timestamp and webhook-signature headers using any Standard Webhooks library.

03

Push now or schedule

Run a full walk of the library by hand, or attach a cron schedule and leave it to run on its own cadence.

Put every part on one data model

Download Sideband for Windows and give your whole team one source of truth. Free 30-day trial — no card required.

Request access

Beta 1.0.0-beta.4 · Windows · free