What you get
When a payment confirms, AlgoVoi delivers apayment.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/notificationsshowing 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
| Field | Notes |
|---|---|
id | Globally unique. Dedupe on this. Same event may be redelivered if your endpoint times out. |
created | Unix timestamp of delivery, not chain-confirmation timestamp. |
api_version | Bumped if we ever break the schema. Currently "1". |
chain | CAIP-2 network ID. EVM chains are eip155:8453, Solana is the genesis-block hash, others are <chain>:<network>. |
asset.id | The on-chain identifier: ASA ID, HTS token ID, ERC-20 contract, SPL mint, or the Stellar USDC:<issuer> form. |
amount_microunits | Sent as a string, not a number, to avoid JS Number precision loss for high-decimal native tokens. Parse with BigInt if you do arithmetic. |
payment_link_token | Present only for hosted-checkout payments. |
payment_link_label | Free-text label the merchant set when creating the link. Adapters parse this for routing (for example, the Ghost adapter extracts Ghost: <reader_email>). |
HMAC verification
Header:X-AlgoVoi-Signature: t=<unix_ts>,v1=<hex>
Verify by:
- Parsing
tandv1from the header. - Rejecting if
abs(now - t) > 300. Five-minute tolerance, replay window. - Computing
hmac_sha256(secret, f"{t}.{raw_body}"). - 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:| Attempt | Backoff |
|---|---|
| 1st failure | +30s |
| 2nd failure | +2 min |
| 3rd failure | +10 min |
| 4th failure | +1 h |
| 5th failure | +6 h |
| 6th failure | dead-letter |
failed. You can manually retry from the dashboard audit log even after dead-letter.
Idempotency contract
Receivers must dedupe onid. 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
id) is your responsibility.
Status codes
AlgoVoi treats responses by status family:| Status | Outcome |
|---|---|
| 2xx | Success. Delivery marked delivered. |
| 4xx | Failure. Counts as a retry attempt (your endpoint shouldn’t 4xx legitimate events). |
| 5xx, timeout, network error | Failure. Retry with backoff. |
See also
- Notifications concept page for the broader picture (9 destinations, audit log)
- Quickstart to set up your first webhook