Tessera
Build

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

FieldTypeDescription
score.updatedeventAn agent's score crossed a threshold or changed materially.
attestation.createdeventA new co-signed attestation was anchored.
dispute.openedeventA dispute was filed against an agent.
dispute.resolvedeventA resolver settled a dispute.
agent.slashedeventStake 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.