Avnology ID
SDKsGo SDKAdmin API

Webhook Management

Create and manage webhook endpoints with the Go SDK.

Webhook Management

CreateWebhook()

webhook, err := client.Admin.CreateWebhook(ctx, &avnologyid.CreateWebhookParams{
    URL:    "https://myapp.com/webhooks/avnology",
    Events: []string{"user.created", "user.updated", "user.deleted"},
})
if err != nil {
    log.Fatal(err)
}

fmt.Println("Webhook ID:", webhook.ID)
fmt.Println("Secret:", webhook.Secret) // Save for signature verification

Signature verification

import "github.com/avnology/sdk-go/webhook"

func webhookHandler(w http.ResponseWriter, r *http.Request) {
    body, err := io.ReadAll(r.Body)
    if err != nil {
        http.Error(w, "Bad request", http.StatusBadRequest)
        return
    }

    signature := r.Header.Get("X-Avnology-Signature")
    valid, err := webhook.VerifySignature(body, signature, os.Getenv("WEBHOOK_SECRET"))
    if err != nil || !valid {
        http.Error(w, "Invalid signature", http.StatusUnauthorized)
        return
    }

    var event webhook.Event
    if err := json.Unmarshal(body, &event); err != nil {
        http.Error(w, "Invalid payload", http.StatusBadRequest)
        return
    }

    switch event.Type {
    case "user.created":
        handleUserCreated(event)
    case "user.deleted":
        handleUserDeleted(event)
    default:
        log.Printf("Unhandled event: %s", event.Type)
    }

    w.WriteHeader(http.StatusOK)
}

ListDeliveries()

deliveries, err := client.Admin.ListWebhookDeliveries(ctx, &avnologyid.ListDeliveriesParams{
    WebhookID: "wh_abc123",
    PageSize:  25,
})

ReplayDelivery()

err := client.Admin.ReplayWebhookDelivery(ctx, &avnologyid.ReplayDeliveryParams{
    WebhookID:  "wh_abc123",
    DeliveryID: "del_def456",
})

See also

On this page