Skip to content

Webhooks ​

Outbound webhooks send the rows you select in the Data Platform to an external service, on demand. Use them to push data into tools like Zapier, Make, n8n, or any HTTP endpoint. They are fired by a person, not by a change to the data — for "when a row changes" automation, see the Zapier integration.

How Webhooks Work ​

  1. Configure — Set up a webhook endpoint in your view's properties
  2. Select — Choose rows in the Data Platform
  3. Send — Use the "Send to webhook" bulk action
  4. Receive — Your endpoint receives the row data as JSON

Setting Up a Webhook ​

Add a Webhook Endpoint ​

  1. Open a view in the Data Platform
  2. Click the Properties panel (right sidebar)
  3. Scroll to the Webhooks section
  4. Click Add Webhook
  5. Fill in:
    • Name — A descriptive label (e.g., "Zapier - New Subscribers")
    • URL — Your webhook endpoint URL. HTTP and HTTPS are both accepted; addresses on private or internal networks are refused
    • Headers — Optional custom HTTP headers (key-value pairs)
    • HMAC Secret — Optional signing secret for payload verification
  6. Click Save

Enable/Disable Webhooks ​

Toggle the enabled switch next to any webhook to temporarily disable it without deleting the configuration.

Sending Data to a Webhook ​

  1. Select rows in the Data Platform (individually or "Select All")
  2. Click the more menu (⋯) in the bulk action bar
  3. Choose Send to webhook
  4. Pick which webhook endpoint to send to
  5. Confirm the send

The operation runs asynchronously: a notification tells you it has started, another reports the result when it finishes, and the delivery appears in the webhook's delivery log. There is no intermediate progress.

Payload Format ​

SchemaStack sends a JSON payload with this structure:

json
{
  "rows": [
    { "id": 1, "name": "Alice", "email": "[email protected]" },
    { "id": 2, "name": "Bob", "email": "[email protected]" }
  ],
  "metadata": {
    "viewId": "a1b2c3d4-...",
    "tableName": "contacts",
    "rowCount": 2,
    "timestamp": "2026-04-04T12:00:00Z",
    "jobId": "e5f6g7h8-..."
  }
}

HTTP Headers ​

Every webhook request includes:

HeaderDescription
Content-Typeapplication/json
User-AgentSchemaStack-Webhook/1.0
X-SchemaStack-Delivery-IdUnique delivery ID (same as jobId)
X-SchemaStack-SignatureHMAC-SHA256 signature (if secret configured)

Plus any custom headers you configured.

HMAC Signature Verification ​

If you set an HMAC secret, SchemaStack signs each payload with HMAC-SHA256:

X-SchemaStack-Signature: sha256=<hex-encoded-signature>

To verify in your endpoint:

javascript
const crypto = require('crypto');

function verifySignature(payload, signature, secret) {
  const expected = crypto
    .createHmac('sha256', secret)
    .update(payload)
    .digest('hex');
  return `sha256=${expected}` === signature;
}

Delivery Log ​

Each send leaves one delivery record on the webhook, describing its final attempt. The properties panel shows:

  • Status code — HTTP response from your endpoint, or ERR when nothing answered
  • Time — When the delivery finished
  • Duration — Round-trip time in milliseconds
  • Error message — If the delivery failed

Two more fields are stored and returned by the deliveries endpoint but not displayed in the panel: the attempt number (1–3) and the first 4 KB of the response body. Intermediate failed attempts are not recorded separately.

Retry Policy ​

Failed deliveries are retried up to 3 times with exponential backoff:

AttemptDelay
1stImmediate
2nd1 second
3rd4 seconds

Retries occur for server errors (5xx), rate limits (429), and when the endpoint does not answer at all (connection refused, timeout). Client errors (4xx except 429) are not retried. Each attempt has a 30-second timeout.

Limits ​

  • Maximum rows per send: 10,000 — a larger selection fails before anything is sent
  • Request timeout: 30 seconds per attempt
  • Response body stored: 4 KB (truncated)
  • SSRF protection: Private/internal IPs are blocked when the URL is saved
  • Empty selection: if no rows match, nothing is sent and the job is recorded as a success with status 200

Use with Zapier ​

The easiest way to connect SchemaStack to external services is through Zapier:

  1. Set up a Webhooks by Zapier trigger (Catch Hook)
  2. Copy the webhook URL from Zapier
  3. Add it as a webhook in SchemaStack
  4. Send test data to map fields in Zapier
  5. Connect to any of Zapier's 7,000+ integrations

See the Zapier Integration guide for details.

SchemaStack Documentation