Quickstart
The fastest path to seeing a trace in Boidra Platform: start the servers, POST a single OpenTelemetry span, and find it in the dashboard.
1. Start the backend and dashboard
Follow Installation to get the backend on :3010 and the dashboard on :5173. You do not need to seed demo data for this.
2. Send one span
Boidra Platform ingests OTLP/HTTP. The endpoint is POST /otel/v1/traces and it accepts OTLP JSON (as well as protobuf). Send a single invoke_agent span with the GenAI attributes Boidra Platform reads:
curl -X POST http://localhost:3010/otel/v1/traces \
-H "Content-Type: application/json" \
-d '{
"resourceSpans": [{
"resource": { "attributes": [
{ "key": "service.name", "value": { "stringValue": "quickstart-agent" } }
]},
"scopeSpans": [{
"spans": [{
"traceId": "5b8efff798038103d269b633813fc60c",
"spanId": "eee19b7ec3c1b174",
"name": "invoke_agent quickstart-agent",
"startTimeUnixNano": "1710000000000000000",
"endTimeUnixNano": "1710000001500000000",
"attributes": [
{ "key": "gen_ai.operation.name", "value": { "stringValue": "invoke_agent" } },
{ "key": "gen_ai.agent.name", "value": { "stringValue": "quickstart-agent" } },
{ "key": "gen_ai.request.model", "value": { "stringValue": "gpt-4o" } },
{ "key": "gen_ai.usage.input_tokens", "value": { "intValue": "1200" } },
{ "key": "gen_ai.usage.output_tokens", "value": { "intValue": "340" } }
],
"status": { "code": 1 }
}]
}]
}]
}'A 200 response with { "partialSuccess": {} } means the span was accepted.
Timestamps
startTimeUnixNano / endTimeUnixNano are nanoseconds since the Unix epoch. Use a recent timestamp so the span falls inside the dashboard's default time window (e.g. in your own scripts, Date.now() * 1e6).
3. Find it in the dashboard
Open http://localhost:5173, go to Traces, and you'll see a trace for quickstart-agent with model gpt-4o and ~1,540 tokens. Click it to inspect the span.
Watch it live
The Live tab on the Traces page streams ingest as it happens — leave it open and fire the curl again to watch spans arrive.
What just happened
gen_ai.operation.name = invoke_agent→ Boidra Platform classified this as an agent turn.gen_ai.agent.name→ the service identity in the dashboard.gen_ai.request.model+gen_ai.usage.*→ the model and token counts (which drive cost).
That's the whole contract. Next, wire it up from a real SDK instead of curl:
- Overview — the data model and shared exporter config.
- SAP Cloud SDK for Python — the recommended path.
