# OpenTelemetry Inputs

URL: https://docs.nexart.io/docs/evidence-bridge/opentelemetry

Use one validated OpenTelemetry span JSON object as an Evidence Bridge source, then explicitly map it to AI Execution or Operational Execution evidence.

OpenTelemetry is a source format, not an evidence type. Choose AI Execution or Operational Execution separately.

## OpenTelemetry V1 input contract

V1 accepts exactly one recognizable OpenTelemetry span JSON object per request.

Single-span JSON

```
{
  "traceId": "4bf92f3577b34da6a3ce929d0e0e4736",
  "spanId": "00f067aa0ba902b7",
  "parentSpanId": "7a1f4c2d9e8b1234",
  "name": "chat completion",
  "startTime": "2026-09-11T10:15:00.000Z",
  "endTime": "2026-09-11T10:15:01.200Z",
  "attributes": {
    "gen_ai.system": "openai",
    "gen_ai.request.model": "gpt-4.1",
    "gen_ai.input": { "prompt": "Summarize this complaint." },
    "gen_ai.output": { "summary": "The customer requests a refund." },
    "gen_ai.request.temperature": 0.2,
    "gen_ai.request.max_tokens": 250,
    "gen_ai.request.top_p": 0.9,
    "gen_ai.request.seed": 7,
    "gen_ai.execution.role": "advisory"
  },
  "resource": { "service.name": "support-agent" },
  "scope": { "name": "example.ai.instrumentation", "version": "1.0.0" },
  "status": { "code": "OK" }
}
```

### Requirements

- `traceId` MUST be a non-zero 32-character hexadecimal identifier.
- `spanId` MUST be a non-zero 16-character hexadecimal identifier.
- `parentSpanId`, when present, MUST be a valid non-zero span identifier.
- `startTime` and optional `endTime` MUST be ISO 8601.
- `attributes`, `resource`, `scope` and `status`, when present, MUST be objects.

### Rejected inputs

- arrays of spans and multiple-span requests
- `resourceSpans`, `scopeSpans` or `spans` batch envelopes
- protobuf and OTLP/gRPC
- collector or exporter infrastructure
- arbitrary JSON that is not a recognizable span
- all-zero trace or span identifiers

## Auto-map behavior

Auto-map recognizes approved exact paths for:

- `spanId` and `startTime`
- `attributes["gen_ai.system"]`
- `attributes["gen_ai.request.model"]`
- `attributes["gen_ai.input"]` and `attributes["gen_ai.output"]`
- approved generation parameters and `attributes["gen_ai.execution.role"]`
- `traceId` and `resource["service.name"]`

Unknown attributes, nested lookalikes, HTTP fields, database statements, authorization headers, webhook payloads, exception data and vendor-specific lookalikes remain unmapped unless a user adds explicit reviewed rules.

Use a logical event identifier for idempotency. For span-based events, `traceId:spanId`is safer than `traceId` alone.

Create an OpenTelemetry profile, or review profile authoring first.
