---
title: "opentelemetry-api Breaking Changes on PyPI | Since.dev"
description: "What each opentelemetry-api release removed, renamed or changed: 144 breaking changes in 11 versions on PyPI, each with its source."
canonical_url: https://since.dev/packages/pypi/opentelemetry-api
last_updated: 2026-10-06
---

# 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

## 1.45.1

4 breaking changes, first published October 6, 2026.

- **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](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.45.1)
- **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](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.45.1)
- **Signature changed** `opentelemetry.util.types.AnyValue`  

Was AnyValue; now AnyValue: TypeAlias. [pypi.org](https://pypi.org/project/opentelemetry-api/1.45.1/)
- **Signature changed** `opentelemetry.util.types.AttributeValue`  

Was AttributeValue; now AttributeValue: TypeAlias. [pypi.org](https://pypi.org/project/opentelemetry-api/1.45.1/)

## 1.45.0

21 breaking changes, first published September 25, 2026.

- **Behavior changed** `opentelemetry.api.trace.span.TraceState`  

Subclasses of Logger must now implement the enabled method, or they will break. [github.com](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.45.0)
- **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](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.45.0)
- **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](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.45.0)
- **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](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.45.0)
- **Configuration changed**  

Ruff default ruleset enabled for the repository in opentelemetry-api 1.45.0 [github.com](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.45.0)
- **Signature changed** `opentelemetry.attributes.BoundedAttributes`  

Was class BoundedAttributes(MutableMapping); now class BoundedAttributes(MutableMapping\[str, types.AnyValue\]). [pypi.org](https://pypi.org/project/opentelemetry-api/1.45.0/)
- **Signature changed** `opentelemetry.attributes.BoundedAttributes.__deepcopy__`  

Was def \_\_deepcopy\_\_(self, memo: dict) -> BoundedAttributes; now def \_\_deepcopy\_\_(self, memo: dict\[int, Any\]) -> BoundedAttributes. [pypi.org](https://pypi.org/project/opentelemetry-api/1.45.0/)
- **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](https://pypi.org/project/opentelemetry-api/1.45.0/)
- **Signature changed** `opentelemetry.attributes.BoundedAttributes.copy`  

Was def copy(self); now def copy(self) -> MutableMapping\[str, types.AnyValue\]. [pypi.org](https://pypi.org/project/opentelemetry-api/1.45.0/)
- **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](https://pypi.org/project/opentelemetry-api/1.45.0/)

And 11 more in this version.

## 1.44.0

7 breaking changes, first published July 16, 2026.

- **Removed**  

The deprecated Events API and SDK are removed. Use LogRecord with the event_name field set instead. [github.com](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.44.0)
- **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](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.44.0)
- **Behavior changed** `ExplicitBucketHistogramAggregation`  

ExplicitBucketHistogramAggregation now raises ValueError when boundaries are not strictly increasing or finite. Code passing such boundaries must fix them. [github.com](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.44.0)
- **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](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.44.0)
- **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](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.44.0)
- **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](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.44.0)
- **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](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.44.0)

## 1.43.0

15 breaking changes, first published June 24, 2026.

- **Removed** `opentelemetry.propagate.entry_points`  

opentelemetry.propagate.entry_points was removed in opentelemetry-api 1.43.0 [pypi.org](https://pypi.org/project/opentelemetry-api/1.43.0/)
- **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](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.43.0)
- **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](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.43.0)
- **Behavior changed** `EnvironmentSetter`  

EnvironmentSetter now writes empty propagation names as \_ instead of the empty name. [github.com](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.43.0)
- **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](https://pypi.org/project/opentelemetry-api/1.43.0/)
- **Signature changed** `opentelemetry.propagators.textmap.DefaultGetter`  

Was class DefaultGetter(Getter\[typing.Mapping\[str, CarrierValT\]\]); now class DefaultGetter(Getter\[Mapping\[str, CarrierValT\]\]). [pypi.org](https://pypi.org/project/opentelemetry-api/1.43.0/)
- **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](https://pypi.org/project/opentelemetry-api/1.43.0/)
- **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](https://pypi.org/project/opentelemetry-api/1.43.0/)
- **Signature changed** `opentelemetry.propagators.textmap.DefaultSetter`  

Was class DefaultSetter(Setter\[typing.MutableMapping\[str, CarrierValT\]\]); now class DefaultSetter(Setter\[MutableMapping\[str, CarrierValT\]\]). [pypi.org](https://pypi.org/project/opentelemetry-api/1.43.0/)
- **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](https://pypi.org/project/opentelemetry-api/1.43.0/)

And 5 more in this version.

## 1.42.0

78 breaking changes, first published May 19, 2026.

- **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](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.42.0)
- **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](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.42.0)
- **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](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.42.0)
- **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](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.42.0)
- **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](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.42.0)
- **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](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.42.0)
- **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](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.42.0)
- **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](https://pypi.org/project/opentelemetry-api/1.42.0/)
- **Signature changed** `opentelemetry.baggage.clear`  

Was def clear(context: Optional\[Context\] = None) -> Context; now def clear(context: Context | None = None) -> Context. [pypi.org](https://pypi.org/project/opentelemetry-api/1.42.0/)
- **Signature changed** `opentelemetry.baggage.Context`  

Was class Context(typing.Dict\[str, object\]); now class Context(dict\[str, object\]). [pypi.org](https://pypi.org/project/opentelemetry-api/1.42.0/)

And 68 more in this version.

## 1.41.0

8 breaking changes, first published April 9, 2026.

- **Behavior changed**  

Log records logged at Python's CRITICAL level are now exported with FATAL severity text instead of the previous value. [github.com](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.41.0)
- **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](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.41.0)
- **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](https://pypi.org/project/opentelemetry-api/1.41.0/)
- **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](https://pypi.org/project/opentelemetry-api/1.41.0/)
- **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](https://pypi.org/project/opentelemetry-api/1.41.0/)
- **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](https://pypi.org/project/opentelemetry-api/1.41.0/)
- **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](https://pypi.org/project/opentelemetry-api/1.41.0/)
- **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](https://pypi.org/project/opentelemetry-api/1.41.0/)

## Check your code

These are the changes. To see which of them reach your code, [scan a public repository](https://since.dev/scan.md), or have your coding agent call `check_code` with your manifest or lockfile over [MCP](https://since.dev/docs.md#mcp). [The API](https://since.dev/docs.md#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.

[Scan a repository](https://since.dev/scan.md). Any public GitHub repository. No sign-in.

### Tell your agent what changed since it was trained.

`claude mcp add --transport http since https://api.since.dev/mcp`

---

Every page on this site as Markdown: https://since.dev/sitemap.md. For agents: https://since.dev/llms.txt.
