Skip to main content

What you get

When a payment confirms, AlgoVoi delivers a payment.confirmed event to one or more destinations you configure in Settings → Notifications:
  • 9 destinations: Slack, Discord, Microsoft Teams, Mattermost, Rocket.Chat, Google Chat, Zulip, Telegram, generic webhook (your own backend).
  • Stripe-shaped event JSON for the generic webhook. Chat destinations get human-readable cards instead.
  • HMAC-SHA256 signing in Stripe-compatible header format.
  • Auto-retry up to 32 hours with exponential backoff.
  • Audit log at dash.algovoi.co.uk/notifications showing every delivery attempt with status, attempt count, last HTTP code, last error, and a payload preview.
  • Manual retry button for failed deliveries.

Generic webhook event schema

Field notes

HMAC verification

Header: X-AlgoVoi-Signature: t={unix_ts},v1={hex} Verify by:
  1. Parsing t and v1 from the header.
  2. Rejecting if abs(now - t) > 300. Five-minute tolerance, replay window.
  3. Computing hmac_sha256(secret, f"{t}.{raw_body}").
  4. Comparing in constant time with v1.

Python example

Node example

Retry schedule

If your endpoint returns non-2xx or times out (5 second timeout per attempt), AlgoVoi schedules a retry: Six attempts over about 32 hours. After the sixth, the delivery is marked failed. You can manually retry from the dashboard audit log even after dead-letter.

Idempotency contract

Receivers must dedupe on id. AlgoVoi guarantees at-least-once delivery, not exactly-once. The same event may arrive twice if:
  • Your endpoint returned 2xx but we didn’t receive the response in time
  • A worker process restarted mid-delivery
  • A maintenance retry fired against a delivery that had already succeeded
Persistent dedupe (Redis SET, DB unique index on id) is your responsibility.

Status codes

AlgoVoi treats responses by status family: For events you intentionally don’t handle (future event types), return 200 with a body indicating you ignored it. 4xx will trigger retry storms.

See also