opentelemetry-api breaking changes
Every breaking API change we have recorded in opentelemetry-api on PyPI: 144 breaking changes in 11 versions. Below are its newest 6 versions, removals and renames first, each with its source.
Newest change October 6, 2026

On this page
1.45.1
- Behavior changed
The API now discards tracestate headers longer than 8192 characters instead of parsing them. Code that depends on very long tracestate values will see them dropped. github.com - Default changed
The OTLP proto HTTP exporter again uses requests as its default HTTP transport, so proxy environment variables such as HTTPS_PROXY are honored. Users who relied on the 1.45.0 transport should check their proxy and transport setup. github.com - Signature changed
opentelemetry.util.types.AnyValue
Was AnyValue; now AnyValue: TypeAlias. pypi.org - Signature changed
opentelemetry.util.types.AttributeValue
Was AttributeValue; now AttributeValue: TypeAlias. pypi.org
1.45.0
- Behavior changed
opentelemetry.api.trace.span.TraceState
Subclasses of Logger must now implement the enabled method, or they will break. github.com - Behavior changed
opentelemetry.exporter.otlp.proto.http
The default HTTP backend for the OTLP proto HTTP exporter changed to urllib3 after a refactor to shared packages. github.com - Behavior changed
opentelemetry.sdk.processor.SimpleSpanProcessor
Spans ended after shutdown() are now dropped instead of being sent to the exporter, and counted with error.type=already_shutdown. github.com - Behavior changed
opentelemetry.util.types.AttributeValue
The AttributeValue type now accepts None, mixed sequences and mappings. Bytes attribute values in the SDK are passed through as-is instead of being decoded to a string. github.com - Configuration changed
Ruff default ruleset enabled for the repository in opentelemetry-api 1.45.0 github.com - Signature changed
opentelemetry.attributes.BoundedAttributes
Was class BoundedAttributes(MutableMapping); now class BoundedAttributes(MutableMapping[str, types.AnyValue]). pypi.org - Signature changed
opentelemetry.attributes.BoundedAttributes.__deepcopy__
Was def __deepcopy__(self, memo: dict) -> BoundedAttributes; now def __deepcopy__(self, memo: dict[int, Any]) -> BoundedAttributes. pypi.org - Signature changed
opentelemetry.attributes.BoundedAttributes.__init__
Was def __init__(self, maxlen: int | None = None, attributes: types._ExtendedAttributes | None = None, immutable: bool = True, max_value_len: int | None = None, extended_attributes: bool = False); now def __init__(self, maxlen: int | None... pypi.org - Signature changed
opentelemetry.attributes.BoundedAttributes.copy
Was def copy(self); now def copy(self) -> MutableMapping[str, types.AnyValue]. pypi.org - Signature changed
opentelemetry.metrics._Gauge.set
Was def set(self, amount: int | float, attributes: Attributes | None = None, context: Context | None = None) -> None; now def set(self, amount: float, attributes: Attributes = None, context: Context | None = None) -> None. pypi.org
And 11 more in this version.
1.44.0
- Removed
The deprecated Events API and SDK are removed. Use LogRecord with the event_name field set instead. github.com - Renamed
opentelemetry.sdk._configuration
Declarative configuration moves from opentelemetry.sdk._configuration into the opentelemetry-configuration package under the opentelemetry.configuration namespace. The sdk extra remains as an alias. github.com - Behavior changed
ExplicitBucketHistogramAggregation
ExplicitBucketHistogramAggregation now raises ValueError when boundaries are not strictly increasing or finite. Code passing such boundaries must fix them. github.com - Behavior changed
ReadableLogRecord.context
The context on exported log records is now an empty Context() instead of the original. Custom log exporters that read context must be updated. github.com - Default changed
ProcessResourceDetector
process.command_args and process.command_line are no longer collected by default. Users who need them must pass include_command_args=True. github.com - Configuration changed
When OTEL_CONFIG_FILE is set, Python-implementation extensions via OTEL_PYTHON_* variables are bypassed. Settings must move into the declarative config file. github.com - Signature changed
EnvironmentGetter.get
Environment snapshot caching is removed. Callers must now pass the mapping to read environment variables from as the first argument of EnvironmentGetter.get. github.com
1.43.0
- Removed
opentelemetry.propagate.entry_points
opentelemetry.propagate.entry_points was removed in opentelemetry-api 1.43.0 pypi.org - Behavior changed
Entry points for opentelemetry_context are loaded only when OTEL_PYTHON_CONTEXT is defined; otherwise ContextVarsRuntimeContext is returned. Set the variable to keep using a custom context plugin. github.com - Behavior changed
EnvironmentGetter
EnvironmentGetter now skips environment variable names that are not normalized, so code relying on them will no longer see those values. github.com - Behavior changed
EnvironmentSetter
EnvironmentSetter now writes empty propagation names as _ instead of the empty name. github.com - Signature changed
opentelemetry.propagators.composite.CompositePropagator.__init__
Was def __init__(self, propagators: typing.Sequence[textmap.TextMapPropagator]) -> None; now def __init__(self, propagators: collections.abc.Sequence[textmap.TextMapPropagator]) -> None. pypi.org - Signature changed
opentelemetry.propagators.textmap.DefaultGetter
Was class DefaultGetter(Getter[typing.Mapping[str, CarrierValT]]); now class DefaultGetter(Getter[Mapping[str, CarrierValT]]). pypi.org - Signature changed
opentelemetry.propagators.textmap.DefaultGetter.get
Was def get(self, carrier: typing.Mapping[str, CarrierValT], key: str) -> list[str] | None; now def get(self, carrier: Mapping[str, CarrierValT], key: str) -> list[str] | None. pypi.org - Signature changed
opentelemetry.propagators.textmap.DefaultGetter.keys
Was def keys(self, carrier: typing.Mapping[str, CarrierValT]) -> list[str]; now def keys(self, carrier: Mapping[str, CarrierValT]) -> list[str]. pypi.org - Signature changed
opentelemetry.propagators.textmap.DefaultSetter
Was class DefaultSetter(Setter[typing.MutableMapping[str, CarrierValT]]); now class DefaultSetter(Setter[MutableMapping[str, CarrierValT]]). pypi.org - Signature changed
opentelemetry.propagators.textmap.DefaultSetter.set
Was def set(self, carrier: typing.MutableMapping[str, CarrierValT], key: str, value: CarrierValT) -> None; now def set(self, carrier: MutableMapping[str, CarrierValT], key: str, value: CarrierValT) -> None. pypi.org
And 5 more in this version.
1.42.0
- Removed
Python 3.9 is no longer supported; Python 3.10 or later is now required. Upgrade the interpreter before installing this release. github.com - Renamed
K8S_CONTAINER_CPU_LIMIT_UTILIZATION
The semantic conventions bump to 1.41.1 changes the metric name for K8S_CONTAINER_CPU_LIMIT_UTILIZATION. Update dashboards and queries that use the old metric name. github.com - Renamed
K8S_CONTAINER_CPU_REQUEST_UTILIZATION
The semantic conventions bump to 1.41.1 changes the metric name for K8S_CONTAINER_CPU_REQUEST_UTILIZATION. Update dashboards and queries that use the old metric name. github.com - Behavior changed
Resource detector entry points are now loaded only when listed in OTEL_EXPERIMENTAL_RESOURCE_DETECTORS. Detectors that were picked up automatically must now be listed there. github.com - Behavior changed
EnvironmentGetter
EnvironmentGetter and EnvironmentSetter now use normalized environment variable names. Check any custom getter or setter that relies on the old names. github.com - Behavior changed
EnvironmentSetter
EnvironmentGetter and EnvironmentSetter now use normalized environment variable names. Check any custom getter or setter that relies on the old names. github.com - Behavior changed
W3CBaggagePropagator.inject
inject() now caps baggage at 180 entries, 4096 bytes per pair and 8192 bytes for the total header. Baggage that was previously sent in full may now be truncated. github.com - Signature changed
opentelemetry.attributes.BoundedAttributes.__init__
Was def __init__(self, maxlen: Optional[int] = None, attributes: Optional[types._ExtendedAttributes] = None, immutable: bool = True, max_value_len: Optional[int] = None, extended_attributes: bool = False); now def __init__(self, maxlen... pypi.org - Signature changed
opentelemetry.baggage.clear
Was def clear(context: Optional[Context] = None) -> Context; now def clear(context: Context | None = None) -> Context. pypi.org - Signature changed
opentelemetry.baggage.Context
Was class Context(typing.Dict[str, object]); now class Context(dict[str, object]). pypi.org
And 68 more in this version.
1.41.0
- Behavior changed
Log records logged at Python's CRITICAL level are now exported with FATAL severity text instead of the previous value. github.com - Default changed
BatchLogRecordProcessor.schedule_delay_millis
Logs may now be exported up to five times more often by default. Set the schedule delay explicitly (for example with OTEL_BLRP_SCHEDULE_DELAY) to keep the previous interval. github.com - Signature changed
opentelemetry.baggage.get_value
Was def get_value(key: str, context: typing.Optional[Context] = None) -> 'object'; now def get_value(key: str, context: typing.Optional[Context] = None) -> object. pypi.org - Signature changed
opentelemetry.baggage.set_value
Was def set_value(key: str, value: 'object', context: typing.Optional[Context] = None) -> Context; now def set_value(key: str, value: object, context: typing.Optional[Context] = None) -> Context. pypi.org - Signature changed
opentelemetry.context.get_value
Was def get_value(key: str, context: typing.Optional[Context] = None) -> 'object'; now def get_value(key: str, context: typing.Optional[Context] = None) -> object. pypi.org - Signature changed
opentelemetry.context.set_value
Was def set_value(key: str, value: 'object', context: typing.Optional[Context] = None) -> Context; now def set_value(key: str, value: object, context: typing.Optional[Context] = None) -> Context. pypi.org - Signature changed
opentelemetry.trace.propagation.get_value
Was def get_value(key: str, context: typing.Optional[Context] = None) -> 'object'; now def get_value(key: str, context: typing.Optional[Context] = None) -> object. pypi.org - Signature changed
opentelemetry.trace.propagation.set_value
Was def set_value(key: str, value: 'object', context: typing.Optional[Context] = None) -> Context; now def set_value(key: str, value: object, context: typing.Optional[Context] = None) -> Context. pypi.org
Check your code
These are the changes. To see which of them reach your code, scan a public repository, or have your coding agent call check_code with your manifest or lockfile over MCP. The API reads every change in every version, not only the newest. On Team and up, a fix pull request opens for the changes that reach a connected repository. Nothing merges or deploys.

Put your code on continuous management.
Scan a public repository now, or give your agent one line.
See how out of date your code is.
Tell your agent what changed since it was trained.
claude mcp add --transport http since https://api.since.dev/mcp