Sent to your endpoint when a proof is anchored

Headers: ProofLedger-Signature (t=<unix seconds>,v1=<hex HMAC-SHA256 of "t.body" with your secret>) and ProofLedger-Event-Id. Answer 2xx within 10 s. Failed deliveries are retried after 1, 5, 30, 120, 360, 720 and 1,440 minutes (almost two days), then the endpoint is switched off and the account emailed. At-least-once: dedupe by event id. Since 2026-10-15 the payload also carries data.bundle, the proof bundle for the chain this event is about (see GET /api/v1/proof/{id}/bundle).

postWebhookproofAnchored

Payload

idstring
type'proof.polygon.anchored' | 'proof.bitcoin.anchored' | 'webhook.test'
created_atstring date-time

Example payload

{
  "id": "evt_8812",
  "data": {
    "proof": {
      "status": "approved",
      "certificate_url": "https://proofledger.io/cert/42",
      "verification_url": "https://proofledger.io/verify.html?hash=a1b2c3..."
    },
    "bundle": {
      "format": "verify-proof/1",
      "service": "proofledger",
      "algorithm": "sha256",
      "certificate_url": "https://proofledger.io/cert/42",
      "verification_url": "https://proofledger.io/verify.html?hash=a1b2c3..."
    }
  }
}

Response

Any 2xx acknowledges the event.

Changes

Webhooks have no change history: a webhook is keyed by its event name rather than a path and method, so no recorded change can name it.