Quickstart#
This walk goes from nothing to a sealed, cryptographically provable event. It takes about ten minutes, most of which is waiting for the first sealing run.
The examples use https://app.sigilbase.io as the base URL and the placeholder key sgb_example.xxxx. Substitute your own instance and the key you create in step 2.
1. Create a stream#
Sign in, open Streams, and choose New stream. Name it Admin actions. The slug, admin-actions, becomes part of the API path. A stream is an independent ledger: its events are numbered from 1 with no gaps, and its hash chain never crosses into another stream.
2. Create an API key#
Open API keys and create a key. The full token is shown once and never again, because only a hash of its secret is stored. It looks like this:
sgb_k7f2m9qwx4njp8ce.4kJq...
Everything before the final dot is the public key id. Everything after it is the secret.
3. Send your first event#
Append an event with one request. The payload is your own JSON object; note that numbers in it must be integers (see Sending events for why).
curl -s -X POST https://app.sigilbase.io/api/v1/streams/admin-actions/events \
-H "Authorization: Bearer sgb_example.xxxx" \
-H "Content-Type: application/json" \
-d '{
"occurred_at": "2026-07-09T09:15:00.000000Z",
"actor": "user:42",
"action": "role.granted",
"resource": "user:9f31",
"payload": {"role": "admin", "granted_by": "user:42"}
}'
The response confirms the append and returns the event's entry hash:
{
"id": "0197c9a4-1b2f-7c3d-9e4a-5f6b7c8d9e0f",
"sequence": 1,
"entry_hash": "8c1f7a2b9d4e6f0a3b5c7d9e1f2a4b6c8d0e2f4a6b8c0d2e4f6a8b0c2d4e6f8a",
"received_at": "2026-07-09T09:15:03.412876Z"
}
4. Read it back#
curl -s https://app.sigilbase.io/api/v1/streams/admin-actions/events/1 \
-H "Authorization: Bearer sgb_example.xxxx"
You will also see the event in the UI: open your stream and the event is the first row, with an unsealed seal mark next to it.
5. Watch it seal#
A sealing run executes every five minutes. It gathers each stream's unsealed events, builds a Merkle tree over their entry hashes, and signs the resulting checkpoint. When it has run, the seal mark in the UI closes and the event's checkpoint_id is set.
6. Fetch the proof#
Once sealed, ask for the event's inclusion proof:
curl -s https://app.sigilbase.io/api/v1/streams/admin-actions/events/1/proof \
-H "Authorization: Bearer sgb_example.xxxx"
The response holds the event, its audit path, and the signed checkpoint. Reading and proofs walks through recomputing the Merkle root from these values by hand. If you ask before the sealing run has happened, you get a 409 telling you to try again after the next run.
Where next#
- The full field reference, batching, idempotent retries, and every error: Sending events.
- Exporting a range of events as an audit-ready file: Evidence bundles.