Subcore AI Docs
Telemetry read API

Events

Search telemetry events across conversations by type, tool, agent and time.

GET /telemetry/events

Events across every conversation, newest first. This is the endpoint for questions that are not about one conversation: how often a tool ran, what a particular agent has been doing, what happened in the last hour.

Parameters

ParameterTypeDescription
coreSlugstringConfine to one agent. Omit to span every agent the key may read
eventTypestringExact match, e.g. tool.called, session.ended
toolIdstringExact match on the tool that produced the event
agentIdstringExact match on the agent that produced it
fromISO 8601Lower bound on the event time, inclusive
toISO 8601Upper bound on the event time, inclusive
cursorstringnextCursor from the previous page
limitintegerPage size. Default 25, maximum 100

Filters combine with AND. All of them are exact matches; there is no prefix, wildcard or full-text search on this endpoint.

from and to here bound the event's own timestamp, which is the plain meaning. Note that this is different from GET /telemetry/sessions, where the same two parameters select sessions that were active in the window.

The event shape

The same shape is returned by this endpoint, by GET /telemetry/sessions/{sid} and by GET /telemetry/runs/{runId}.

FieldTypeDescription
iduuidThe event's own id
sidstringThe session this event belongs to
trace_idstring | nullTrace id, when the emitter set one
core_iduuidThe agent's id
core_slugstringThe agent's slug — the name you filter by
event_typestringe.g. tool.called, session.ended
eventobjectThe full event payload as the deployment emitted it
environmentstring | nullThe emitting environment
run_typestring | nullproduction, test or eval
run_idstring | nullThe evaluation run, when this event belongs to one
channelstring | nullvoice, sms, chat, email, …
agent_idstring | nullThe agent within the deployment
tool_idstring | nullThe tool, on tool events
created_atstringWhen the event happened

The organization id is not returned. It is the same for every row you can see, because the key already fixed it.

event is the emitter's own payload, so its inner shape depends on the event type and on the kit version that produced it. Treat the columns above as the stable contract and read event defensively.

Examples

Every tool call in the last hour:

curl -H "Authorization: Bearer $SUBCORE_API_KEY" \
  "https://api.subcore.ai/telemetry/events?eventType=tool.called&from=2026-09-04T12:00:00Z"

One tool on one agent:

curl -H "Authorization: Bearer $SUBCORE_API_KEY" \
  "https://api.subcore.ai/telemetry/events?coreSlug=support-agent&toolId=lookup_order&limit=100"

An empty query value means "not filtered", not "equal to the empty string". ?channel= and omitting channel do the same thing.

On this page