Webhooks & events
React to account, client, and money events the moment they happen — no polling. Every delivery is signed so you can trust it before you act on it.
How delivery works
You register one HTTPS endpoint per event type. When the event fires, A8 Core™ POSTs a signed JSON envelope to your URL. You verify the signature, acknowledge with a 2xx, and process asynchronously.
Event catalog
| Event | Fires when |
|---|---|
account.created | An account was opened. |
account.updated | An account’s details or status changed. |
client.created / client.updated | A client was created or changed. |
deposit.posted | A deposit directive posted to an account. |
withdrawal.posted | A withdrawal directive posted. |
transfer.completed / rollover.completed | A transfer or rollover directive completed. |
investment.purchased / investment.sold | An investment directive completed. |
recharacterization.completed / rothconversion.completed | A retirement lifecycle directive completed. |
The payload
Signature-Input: sig1=("@authority" "content-digest");created=1782925451;keyid="a8core-ed25519-2026a";alg="ed25519" Signature: sig1=:k8r2...c1Qe: "EventId": "e51b7c44-9a02-4c18-bb31-77a0d2e9f410", "EventType": "deposit.posted", "OccurredAt": "2026-08-01T17:04:11Z", "Data": { "AccountId": "3c7b1f90-...", "TransactionId": "d99c0a31-...", "Amount": 5000.00 }
Verifying a delivery
Signatures follow RFC 9421. You choose the algorithm per endpoint:
| alg | Model | How you verify |
|---|---|---|
hmac-sha256 | Shared secret (default) | Recompute the HMAC over the signing base and compare in constant time. |
ed25519 | Asymmetric (recommended for third parties) | Verify against A8 Core™’s published Ed25519 public key — no shared secret to leak. |
Resolve keys by keyid (they rotate), and confirm created and OccurredAt are recent to defeat replay. Signing proves authenticity and integrity — not encryption — so always receive over TLS.
Delivery and retries
- Acknowledge with any
2xxquickly; do heavy work after responding. - Failures and timeouts retry with exponential backoff for up to 24 hours.
- Deliveries may repeat — make consumers idempotent by de-duplicating on
EventId.
A robust consumer verifies the signature first, dedupes on EventId, acks fast, and processes asynchronously. Build it once and every event type just works.
Where to next
Talk to a human.
Stuck on an integration? Our team answers developer questions directly.