type: "llm" or "tool". Both share the common fields below and add a type-specific properties object. The SDK validates events against this contract before sending; the ingest API validates again on receipt.
Common fields
Client-generated UUIDv4 identifying the event. Unique within your space —
the deduplication key. Generate it once per event and reuse it across
retries.
Event type discriminator.
Set by the ingest API from your API key. Any client-supplied value is
overridden — omit it.
UUIDv4 shared by the events of one logical operation. See
Traces and context.
Call start, milliseconds since the Unix epoch.
Call end, milliseconds since the Unix epoch.
Call duration in milliseconds, typically
endTimeMs - startTimeMs.Outcome of the call.
Where the event came from.
Identifiers the dashboard aggregates by. The object is required but every
field is optional — send
{} when none apply.Custom dimensions. Values must be strings or numbers — send
{} when none
apply.LLM events
LLM events settype: "llm" and carry properties.llm:
Model identifier as the provider names it, for example
gpt-5.4-nano or
claude-haiku-4-5.Model provider, for example
openai. Derived by the ingest API from the
model name when recognized — omit it.Gateway the call went through when not calling the provider directly, for
example a model router.
What was sent to the model.
What the model returned.
Token usage. All fields are required — use
0 where a provider does not
report a breakdown.USD cost breakdown:
{ inputUncachedUsd, inputCacheReadUsd, inputCacheWriteUsd, outputUsd, totalUsd }. Computed by the ingest API from
its model catalog when the model is recognized — omit it.Tool events
Tool events settype: "tool" and carry properties.tool:
Tool name, for example
get_weather.Serialized tool input, typically JSON.
Serialized tool output, typically JSON.