# Context Propagation — OpenTelemetry

Source: https://www.skillbyai.com/en/opentelemetry/t-propagation

> Passing trace IDs between services.

## W3C Trace Context headers

For a trace to cross services, the caller must pass the **context** (trace ID, parent span ID, sampling decision) to the callee. OpenTelemetry uses the W3C **Trace Context** standard by default: a `traceparent` HTTP header, plus optional `tracestate`. **Baggage** carries additional key-value pairs (such as a tenant ID) across services. Instrumented HTTP clients inject the headers and instrumented servers extract them; for message queues, the context travels in message headers.

## The traceparent header

Format: version-traceid-parentid-flags (example from the W3C specification).

```text
traceparent: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
              |  |                                |                |
              |  trace-id (16 bytes, 32 hex)       parent span id   flags (01 = sampled)
              version                              (8 bytes, 16 hex)

baggage: tenant.id=acme,plan=enterprise
```

## Broken traces usually mean lost context

If traces stop at a service boundary, check that both sides are instrumented and that proxies or queues forward the headers.

**Quiz:** Which HTTP header carries W3C trace context?

- [ ] content-type
- [ ] x-request-id
- [ ] authorization
- [x] traceparent

*Answer:* traceparent. tracestate and baggage are optional companions.
