# Distributed Trace Explorer > Paste an OTLP, Jaeger or Zipkin trace: span tree, critical path, self-time, N+1 calls and errors. Paste a trace exported as OTLP JSON (resourceSpans), Jaeger JSON (data[].spans) or Zipkin v2 JSON. The explorer rebuilds the span tree, computes self-time (excluding overlapping child spans), the critical path that determines end-to-end latency, the slowest services, error spans, and detects N+1 queries and fan-out (many sibling spans with the same name), with a service call graph and a waterfall. Part of usefulweb.site (https://usefulweb.site/). Results are deterministic calculations from the inputs and the listed assumptions; the API returns exactly what the web page shows. ## Use it - Human interface: https://distributedtraceexplorer.usefulweb.site/ (interactive tool at https://distributedtraceexplorer.usefulweb.site/tool) - JSON API: POST https://distributedtraceexplorer.usefulweb.site/api/v1/calculate with a JSON object of inputs (schema: https://distributedtraceexplorer.usefulweb.site/api/v1/tool) - OpenAPI: https://distributedtraceexplorer.usefulweb.site/openapi.json - MCP (Streamable HTTP): https://distributedtraceexplorer.usefulweb.site/mcp - tool `distributed_trace_explorer` ## Inputs - text (textarea): Trace JSON - OTLP/JSON export (e.g. from the OpenTelemetry Collector file exporter), Jaeger UI "Download JSON" / API /api/traces/{id}, or a Zipkin v2 span array. - file (file): Or upload the file - Read in memory as UTF-8 text and not stored. Max 5 MiB. - traceId (text): Trace id (optional) - If the payload contains several traces; default is the trace with the most spans. - repeatThreshold (integer): Flag repeated sibling spans from - Minimum number of same-named sibling spans to report as N+1 / fan-out. ## Method - Formats: OTLP/JSON (resource service.name, startTimeUnixNano/endTimeUnixNano, status.code 2 = ERROR), Jaeger JSON (µs startTime/duration, CHILD_OF references, error=true tag) and Zipkin v2 (µs timestamp/duration, "error" tag; shared client/server spans are split so the server span becomes the client span's child). - Self-time = span duration minus the union of its children's intervals (clipped to the span), so concurrent children are not double-counted. - Critical path: from the longest root span, repeatedly take the child that finishes last before the current cursor, recurse into it, and move the cursor to its start; time not covered by a critical child is the span's own critical time. - Repeated siblings: children of one parent with the same service + normalised name/statement (ids and literals masked) at or above the threshold. If their summed duration ≈ wall time they ran sequentially (N+1); if wall time ≤ 40% of the sum they ran in parallel (fan-out). - Root-cause errors are error spans none of whose descendants also errored.