README.md

May 18, 2026 · View on GitHub

HookSniff - Webhook Infrastructure

Website | Documentation

Rust client library for the HookSniff webhook delivery platform.

Crates.io docs.rs License

Features

  • Reliable webhook delivery — automatic retries with exponential backoff
  • HMAC signatures — Standard Webhooks compliant (HMAC-SHA256)
  • 30+ API resources — Applications, Endpoints, Messages, Streaming, Integrations, and more
  • Async/await — built on Tokio + Hyper
  • Type-safe — full serde deserialization with strongly-typed models

Installation

[dependencies]
hooksniff = "1.5"

Quick Start

use hooksniff::api::HookSniff;

#[tokio::main]
async fn main() {
    let client = HookSniff::new("your-api-token".to_string(), None);

    // List endpoints
    let endpoints = client.endpoint().list(None).await.unwrap();
    for ep in endpoints.data {
        println!("Endpoint: {} ({})", ep.id, ep.url);
    }
}

API Resources

ResourceMethodDescription
endpoint()CRUDManage webhook endpoints
message()CRUDSend and manage messages
message_attempt()CRUDTrack delivery attempts
event_type()CRUDManage event types
environment()Export/ImportOrganization settings
background_task()List/GetBackground task status
connector()CRUDThird-party connectors
integration()CRUDApp integrations
inbound()CRUDInbound webhook configs
streaming()CRUDReal-time streaming
message_poller()PollPoll-based message consumption
operational_webhook()CRUDOperational webhook endpoints
api_key()CRUDAPI key management
alert()CRUDDelivery alerts
analytics()AggregateUsage analytics
billing()GetBilling information
audit_log()ListAudit trail
custom_domain()CRUDCustom domains
rate_limit()CRUDPer-endpoint rate limits
routing()CRUDWebhook routing rules
schema()CRUDJSON schema registry
template()CRUDPayload templates
notification()List/ReadNotifications
sso()GetSSO configuration
team()ListTeam members
portal()GetCustomer portal
playground()GetAPI playground
service_token()CRUDService tokens
statistics()AggregateUsage statistics

Webhook Verification

use hooksniff::webhooks::Webhook;

let wh = Webhook::new("whsec_...".to_string());
let headers = /* extract headers from request */;
let payload = /* request body */;

let verified = wh.verify(payload, headers)?;
// `verified` contains the parsed event

License

MIT