Quickstart
Connect an existing trace source or send an event through the Tensile ingestion API.
Watch the workflow: Inspect a recorded tool failure · Authored dummy data
See how stored demo events can be inspected in Raw Logs. This clip does not execute the request examples or verify a live API response. Filter authored requests, inspect one failed tool call and read its recorded timeout. An event failure does not establish a customer outcome.
Read matching command examples.
Read the walkthrough transcript
- 00:00 — Filter the loaded requests to Failed. These are authored demo events.
- 00:05 — Inspect one failed tool call. Its identity and latency remain visible.
- 00:10 — Read the recorded timeout. An event failure is separate from a customer outcome.
Choose a supported path:
- Existing traces: connect Braintrust or Langfuse in Settings → Integrations.
- New events: send server-side requests to the ingestion API.
Start with the server-side API requests below.
Before you start
In the Tensile dashboard, open Settings → API Keys and create a key. Keep it in a server-side secret store and out of source control. See Authentication.
Prepare request files
Run this with Python 3 on the server that will send the requests. It creates a new session ID, event ID and current timestamp. These files contain dummy data and no API key. Replace the example input and output with permitted trace text.
import json
import time
import uuid
session_id = str(uuid.uuid4())
timestamp_ms = time.time_ns() // 1_000_000
session = {
"session_id": session_id,
"user_data": {"user_id": "demo_user_8f21"},
"timestamp": timestamp_ms,
"metadata": {"environment": "development"},
}
event = {
"event_id": str(uuid.uuid4()),
"session_id": session_id,
"timestamp": timestamp_ms,
"primitive_name": "support-bot",
"primitive_type": "PRIMITIVE_TYPE_AGENT_TURN",
"args": "How do I reset my password?",
"result": "Open Settings, then Security.",
"success": True,
"metadata": {"environment": "development"},
}
for filename, body in [
("tensile-session.json", session),
("tensile-event.json", event),
]:
with open(filename, "w") as output:
json.dump(body, output)Save the code as prepare-tensile-requests.py and run python3 prepare-tensile-requests.py.
Send a session
curl --fail --silent --show-error \
https://api.withtensile.com/api/v1/capture-session \
-H "x-api-key: $TENSILE_API_KEY" \
-H "Content-Type: application/json" \
--data @tensile-session.jsonSend an event
curl --fail --silent --show-error \
https://api.withtensile.com/api/v1/capture-event \
-H "x-api-key: $TENSILE_API_KEY" \
-H "Content-Type: application/json" \
--data @tensile-event.jsonThe capture path does not replace an omitted or zero timestamp with the current
time. The prepared files set it explicitly so new records match the intended
time range. A 202 response confirms acceptance into the ingestion buffer.
Verify
- Open
/raw-logsdirectly in the Tensile dashboard, or follow a contextual Raw Logs link. For a connected provider, use Settings → Integrations → View logs with its source scope. - Find
support-botand expand the row. - Confirm the input, output, status and session identifier.
Seeing the selected event verifies stored arrival for that event. It does not by itself define or validate an evaluator. Events can take a few seconds to appear; if nothing appears after a minute, confirm the key and endpoint.