Tempo API Reference
IceGate provides a Tempo®-compatible HTTP API for querying distributed traces, served on port 3200.
The endpoints documented below are the ones implemented - this is a subset of Tempo's API, not a
complete reimplementation, so anything not listed here should be assumed unimplemented. TraceQL is
supported for /api/search; TraceQL features that are not yet implemented return
501 Not Implemented rather than silently returning wrong results. See
Trademarks for attribution.
Base URL
http://localhost:3200
Authentication
All requests require the X-Scope-OrgID header for tenant identification:
X-Scope-OrgID: my-tenant
Implementation Status
Warning
The Tempo API implements a subset of Tempo's HTTP read API. Trace retrieval and /api/search are available, and TraceQL is supported for search - TraceQL features that are not yet implemented return 501 Not Implemented rather than silently returning wrong results.
Endpoints
Get Trace by ID
Retrieve a complete trace by its trace ID.
Endpoint: GET /api/traces/{traceID}
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
traceID |
string | Yes | 32-character hex trace ID |
Example:
curl http://localhost:3200/api/traces/5B8EFFF798038103D269B633813FC60C \
-H "X-Scope-OrgID: my-tenant"
Response:
{
"batches": [
{
"resource": {
"attributes": [
{"key": "service.name", "value": {"stringValue": "api-service"}}
]
},
"scopeSpans": [
{
"spans": [
{
"traceId": "5B8EFFF798038103D269B633813FC60C",
"spanId": "EEE19B7EC3C1B174",
"name": "GET /api/users",
"kind": 2,
"startTimeUnixNano": "1704067200000000000",
"endTimeUnixNano": "1704067200100000000",
"status": {"code": 1}
}
]
}
]
}
]
}
Search Traces
Search for traces matching criteria.
Endpoint: GET /api/search
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
tags |
string | No | Tag filter (e.g., service.name=api) |
minDuration |
duration | No | Minimum span duration |
maxDuration |
duration | No | Maximum span duration |
limit |
int | No | Maximum results (default: 20) |
start |
int | No | Start timestamp (Unix seconds) |
end |
int | No | End timestamp (Unix seconds) |
Example:
curl -G http://localhost:3200/api/search \
--data-urlencode 'tags=service.name=api-service' \
--data-urlencode 'minDuration=100ms' \
--data-urlencode 'limit=10' \
-H "X-Scope-OrgID: my-tenant"
Search Tags
Get available tag names for search.
Endpoint: GET /api/search/tags
Example:
curl http://localhost:3200/api/search/tags \
-H "X-Scope-OrgID: my-tenant"
Search Tag Values
Get values for a specific tag.
Endpoint: GET /api/search/tag/{tag}/values
Example:
curl http://localhost:3200/api/search/tag/service.name/values \
-H "X-Scope-OrgID: my-tenant"
Span Data Model
Spans stored in IceGate include:
| Field | Type | Description |
|---|---|---|
trace_id |
bytes | 16-byte trace identifier |
span_id |
bytes | 8-byte span identifier |
parent_span_id |
bytes | Parent span (if any) |
name |
string | Operation name |
kind |
int | SpanKind (0=Unspecified, 1=Internal, 2=Server, 3=Client, 4=Producer, 5=Consumer) |
start_timestamp |
timestamp | Span start time |
end_timestamp |
timestamp | Span end time |
duration_micros |
long | Duration in microseconds |
status_code |
int | Status (0=Unset, 1=OK, 2=Error) |
attributes |
map | Merged resource/scope/span attributes |
events |
array | Span events |
links |
array | Links to other spans |
Next Steps
- Learn about Data Ingestion
- Explore the Loki API for logs
- See Prometheus API for the planned metrics API (not implemented yet)