Turn webhooks into push notificationsReceive events from other services

A connector is a URL another service posts to. Acciti verifies each request, matches it against your rules and sends the notification. You don't run a handler.

  • App Store
  • Stripe
  • GitHub
  • Provisore
  • Sentry
  • Grafana
  • Better Stack
  • Custom

Each kind has its own verification and its own event catalogue. Most services sign the request body, which proves who sent it and that nothing changed on the way. Grafana and Better Stack don't sign, so their connectors check a bearer secret in a header. A header secret can be replayed by anything that can read the request.

Custom connectors

For anything else, use the Custom kind. Sign the raw body with the secret Acciti gives you and send the hex digest in X-Acciti-Signature.

POST /v1/ingest/{connector}
BODY='{"event":"disk.full","host":"db-1"}'SIGNATURE=$(printf '%s' "$BODY" | openssl dgst -sha256 -hmac "$ACCITI_SECRET" -hex | awk '{print $2}')curl https://acciti.com/v1/ingest/$CONNECTOR_ID \  -H "Content-Type: application/json" \  -H "X-Acciti-Signature: sha256=$SIGNATURE" \  -d "$BODY"

Sign the bytes you send

Serialising the body twice can produce two different strings, and the signature won't match.

An event no rule matches is recorded and sends nothing. The dashboard lists the event types each connector received without a rule.

Forward events to your own server

App Store Connect takes one notification URL per app, and some other services do the same. When that URL is a connector, turn on forwarding and Acciti posts every event that passes verification on to a URL you choose. A connector can forward to several URLs, such as your own server and a second service, and each one gets every event. It forwards whether or not a rule matched and whether or not anybody was notified.

The body is the exact bytes the service sent, with Content-Type: application/json. Each request is signed and retried like an outbound webhook, with X-Acciti-Event: connector.forward and a secret of its own for each URL, shown once when you add it. A URL that keeps failing is switched off without affecting the others, and each has its own delivery log. A request that fails verification is never forwarded, and a redelivery Acciti has already recorded is not forwarded twice.

Forwarding stops while your plan doesn't include connectors, and events that arrive during that time aren't forwarded later. The connector's response to the service doesn't mention forwarding.

Every connector and its events