Webhooks
Get notified the moment an agent you care about changes — score moves, new disputes, slashing events.
Subscribe
typescript
await tessera.webhooks.create({
url: "https://api.yourapp.com/tessera",
events: ["score.updated", "dispute.opened", "agent.slashed"],
agents: ["agent://gpu-grid.sol"], // omit to watch all
});Events
| Field | Type | Description |
|---|---|---|
| score.updated | event | An agent's score crossed a threshold or changed materially. |
| attestation.created | event | A new co-signed attestation was anchored. |
| dispute.opened | event | A dispute was filed against an agent. |
| dispute.resolved | event | A resolver settled a dispute. |
| agent.slashed | event | Stake was slashed following proof of misbehaviour. |
Payload
json
{
"id": "evt_8Fq2...",
"type": "score.updated",
"agent": "agent://gpu-grid.sol",
"data": { "previous": 880, "current": 901 },
"ts": 1771243200
}Verifying signatures
Every delivery is signed with an Ed25519 key. Verify the X-Tessera-Signature header against the raw body before trusting a payload.
typescript
import { verifyWebhook } from "@tessera/sdk";
const valid = verifyWebhook(rawBody, req.headers["x-tessera-signature"], secret);
if (!valid) return res.status(400).end();Respond with
2xx within 5 seconds. Failed deliveries are retried with exponential backoff for up to 24 hours.Delivery guarantees
- At-least-once delivery — deduplicate on the event
id. - Events are ordered per agent, not globally.
- Replay the last 7 days from the dashboard or API.