Webhooks

Webhooks

Receive real-time HTTP callbacks when events occur in Legistry AI.

Setup

Configure a webhook endpoint in Settings → Webhooks or via the API:

POST /api/v1/webhooks/subscribe
{
  "url": "https://yourapp.com/webhooks/legistry",
  "events": ["contract.created", "signature.completed", "compliance.alert"],
  "secret": "your-webhook-secret"
}

Event Types

EventTriggered When
contract.createdA new contract is created
contract.updatedA contract is modified
contract.deletedA contract is deleted
contract.analyzedAI analysis completes
signature.requestedSignature request sent
signature.viewedSigner viewed the document
signature.completedSignature collected
signature.declinedSigner declined
signature.expiredRequest expired
compliance.alertNew compliance issue found
vendor.createdNew vendor added
vendor.risk_assessedRisk assessment completed
team.member_joinedNew team member registered

Payload Format

{
  "event": "signature.completed",
  "timestamp": "2026-03-08T14:30:00Z",
  "data": {
    "signature_id": "sig-uuid",
    "contract_id": "contract-uuid",
    "signer_name": "Jane Smith",
    "signer_email": "jane@acme.com"
  },
  "organization_id": "org-uuid"
}

Security

Every webhook request includes a signature header:

X-Legistry-Signature: sha256=abc123...
X-Legistry-Event: signature.completed
X-Legistry-Delivery: unique-delivery-id

Verifying Signatures

import hmac
import hashlib
 
def verify_webhook(payload: bytes, signature: str, secret: str) -> bool:
    expected = hmac.new(
        secret.encode(),
        payload,
        hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(f"sha256={expected}", signature)

Retry Policy

Failed deliveries are retried up to 3 times with exponential backoff:

AttemptDelay
1Immediate
230 seconds
35 minutes

If all retries fail, the webhook is marked as failed in the dashboard.