Webhook RelayQuickstart

Go SDK

github.com/philiprehberger/go-webhook-relay-client

Generated client + hand-written signature verifier. View source on GitHub.

Install

shell
go get github.com/philiprehberger/go-webhook-relay-client

Send an event

go
import webhookrelay "github.com/philiprehberger/go-webhook-relay-client"

client := webhookrelay.NewClient(os.Getenv("WEBHOOK_RELAY_KEY"))

event, err := client.Ingest(ctx, webhookrelay.EventCreateInput{
    Type:           "order.created",
    Payload:        map[string]any{"orderId": 42},
    IdempotencyKey: "order-42-created",
})
if err != nil {
    log.Fatal(err)
}
fmt.Println(event["id"])

Verify on the receiver

go
import webhookrelay "github.com/philiprehberger/go-webhook-relay-client"

func WebhookHandler(w http.ResponseWriter, r *http.Request) {
    body, _ := io.ReadAll(r.Body)
    if !webhookrelay.VerifySignature(
        os.Getenv("WEBHOOK_SECRET"),
        string(body),
        r.Header.Get("X-Webhook-Signature"),
        0,  // default tolerance: 5 minutes
    ) {
        http.Error(w, "bad signature", http.StatusBadRequest)
        return
    }
    // ... handle event
}