What Azalee proves
Azalee stores technical events in a tamper-evident chain and produces verifiable exports, Merkle inclusion proofs and external timestamp evidence. A matching hash shows that a locally supplied record matches the committed fingerprint.
Quickstart: one completed interaction
For a simple integration, the customer backend sends one event after a successful AI interaction. Keep the secret webhook URL on the server. Hash input and output locally; do not transmit raw text, customer data or secrets.
POST https://azalee.garden/api/webhook?token=wh_…
Content-Type: application/json
{
"event": {
"event_type": "interaction.completed",
"status": "completed",
"session_id": "sess_42",
"correlation_id": "turn_9",
"input_hash": "sha-256:<local-hash>",
"output_hash": "sha-256:<local-hash>",
"model_provider": "configured-provider",
"model_name": "configured-model"
},
"metadata": { "source": "customer_backend", "storage": "hash_only" }
}
Complete interaction lifecycle
For fine-grained evidence, every event in one turn uses the same session_id and correlation_id. The sequence makes success, blocking and failure visible.
| Sequence | Event | Technical evidence |
|---|---|---|
| 1 | interaction.started | input_hash |
| 2 | model.response.completed or model.response.failed | Input/output hash, model and duration |
| 3 | output.delivered or output.blocked | output_hash and optional reason code |
| 4 | interaction.completed or interaction.failed | Final status and total duration |
Tool, policy and oversight events
- Tools:
tool.call.started,tool.call.completed,tool.call.failed,tool.call.blocked - Human oversight:
human.approval.requested,granted,rejectedandhuman.override - Policy and risk:
policy.checked,allowed,blocked,escalatedandrisk.detected - Changes:
model.changed,prompt_template.changedandconfig.changed - Transparency:
transparency.notice.shownrecords that an AI disclosure was triggered.
Data minimization and operations
Suitable control fields include event type, status, duration, opaque session and correlation IDs, model and configuration versions, policy ID, reason code and fields ending in _hash. Do not send raw prompts, answers, transcripts, files, tool payloads, customer records, email addresses, passwords, API keys, authorization headers or tokens.
Delivery is fail-open: use short timeouts and stable idempotency keys, record delivery errors locally, and never block the user response or tool execution because audit delivery failed.