Chronicle Labs API is currently in beta. Reach out for access
API REFERENCE
Events
Events are Chronicle's canonical unit. Ingest them individually or in batch, and query the immutable log.
npm install @chronicle-labs/sdkEndpoints
| Method | Path | Status |
|---|---|---|
POST | /v1/events | Beta |
POST | /v1/events/batch | Beta |
GET | /v1/events | Planned for public GA |
Create an event
Ingest a single normalized event. Returns the generated event ID and deduplication status.
sourcestringrequiredSource system identifier.
source_event_idstringrequiredUnique ID from source, used for deduplication.
event_typestringrequiredDot-notation type, e.g. "order.payment_succeeded".
conversation_idstringrequiredSubject / conversation grouping key.
actor_typeenumrequiredOne of "customer", "agent", or "system".
actor_idstringrequiredID of the acting entity.
payloadobjectrequiredArbitrary JSON event body.
tenant_idstringTenant namespace. Defaults to the default tenant.
actor_namestringDisplay name for actor.
ticket_idstringOptional ticket reference.
customer_idstringOptional customer reference.
contains_piibooleanFlag payload as containing PII.
occurred_atdatetimeISO 8601 timestamp. Defaults to now.
const event = await chronicle.events.create({
source: "custom_app",
source_event_id: "order_1001_paid",
event_type: "order.payment_succeeded",
conversation_id: "order_1001",
actor_type: "system",
actor_id: "payments_service",
payload: { order_id: "order_1001", amount: 4999, currency: "usd" },
tenant_id: "tenant_demo",
});{
"event_id": "evt_01J8WNEQ2NWY4G7EJAZ9M8MXXV",
"ingested": true,
"message": "Event ingested successfully"
}Create events in batch
Send an array of event objects. Duplicates are counted but skipped.
const result = await chronicle.events.createBatch([
{ source: "custom_app", source_event_id: "order_1001_paid", /* ... */ },
{ source: "custom_app", source_event_id: "order_1002_paid", /* ... */ },
]);{
"ingested": 2,
"duplicates": 0,
"message": "Batch processed: 2 ingested, 0 duplicates skipped"
}List events
Query the immutable event log with filters. Requires tenant_id.
tenant_idstringrequiredTenant namespace.
sourcestring[]Filter by source (repeatable).
event_typestring[]Filter by event type (repeatable).
startdatetimeStart of time range (ISO 8601).
enddatetimeEnd of time range (ISO 8601).
limitintegerMax events to return (default 25, max 1000).
offsetintegerNumber of results to skip (default 0).
const events = await chronicle.events.list({
tenant_id: "tenant_demo",
source: "custom_app",
limit: 20,
});{
"events": [{ "event_id": "evt_01J8WNEQ...", "source": "custom_app", "event_type": "order.payment_succeeded", "occurred_at": "2026-02-21T10:30:00Z", "ingested_at": "2026-02-21T10:30:01Z" }],
"count": 1,
"has_more": false
}