Custom Webhook

Overview

  • Custom Webhook lets you receive alert notifications at your own HTTP endpoint.

  • We send a signed JSON payload for each alert; you validate the signature and handle the data.

Setup

  • Destination: choose “Custom webhook” when creating a channel.

  • Minimum plan: Premium.

  • Parameters:

    • webhookUrl: your HTTPS endpoint that accepts POSTs.

    • webhookSecret: your shared secret used to sign payloads.

  • Test: use the channel “Ping” or trigger a small alert to verify delivery.

Security

  • Signature header: X-Signature.

  • Algorithm: HMAC-SHA256 over the exact JSON request body using your webhookSecret.

  • Verification:

    • Compute hex(hmac_sha256(secret, raw_body)) on your server.

    • Compare with the X-Signature header.

    • Important: use the raw request body bytes (do not re-stringify).

Payload

  • Content type: application/json.

  • Top-level fields:

    • title: notification title (string).

    • content: human-readable message (string).

    • text: same as content for convenience (string).

    • event: raw event that triggered the alert (object).

  • event fields:

    • id: event identifier (string, optional).

    • marketEventType: event type (string).

    • currency: asset symbol or identifier (string).

    • date: Unix timestamp in seconds (number, UTC).

    • parameters: array of { parameterId: string, value: string | number | boolean }.

Example Values

  • Headers:

    • Content-Type: application/json

    • X-Signature:

  • Body (shape):

    • title: “Big order on BTC/USD”

    • content: “$100 worth of BTC market bought on Binance BTC/USD spot at $30,000”

    • text: “$100 worth of BTC market bought on Binance BTC/USD spot at $30,000”

    • event:

    • id: “01HXYZ…”

    • marketEventType: “MARKET_ORDER”

    • currency: “BTC”

    • date: 1716392011

    • parameters:

      • { parameterId: “amountUsd”, value: 100 }

      • { parameterId: “exchange”, value: “binance” }

      • { parameterId: “side”, value: “buy” }

Last updated