NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #769 most downloaded on PyPI
Transport classes and utilities shared among Python Elastic client libraries
Last release 3 months ago
06 Jul 2026
Ships fairly regularly
a new release about every 2 months
Nearly every release is documented
notes for 29 of 29 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
40 releases · first in 2020
One column per quarter.
Escape percent characters in logging output
Optional backoff delays between retries
Add support for an httpx synchronous node
Use path_prefix to compute the base URL in the httpx node class
path_prefix to compute the base URL in the httpx node class (#243)Support Trio when using the httpx async client
Update OpenTelemetry conventions
Escape percent characters in logging output
Ensure compatibility with httpx v0.28.0+ (#222, contributed by Arch Linux maintainer @carlsmedstad)
Fix use of SSLContext with sniffing
Add explicit Python 3.13 support
Removed call to raise_for_status() when using HttpxAsyncHttpNode to prevent exceptions being raised for 404 responses
Fixed requests 2.32 compatibility
TransportApiResponse (#160, #161, contributed by @JessicaGarson)Support the HTTPX client with asyncio (#137, contributed by @b4sus)
Fix basic auth built from percent-encoded URLs
Always set default HTTPS port to 443
__iter__ return type to Iterator (#129, contributed by @altescy)Support urllib3 2.x in addition to urllib3 1.26.x
Fixed an issue where a large number of consecutive failures to connect to a node would raise an OverflowError.
OverflowError.ApiResponse can be pickled.Added method for clients to use default ports for URL scheme.
Fixed issue when connecting to an IP address with HTTPS enabled would result in a ValueError for a mismatch between check_hostname and server_hostname
ValueError for a mismatch between check_hostname and server_hostname (https://github.com/elastic/elastic-transport-python/pull/81)Fixed JsonSerializer to return None if a response using Content-Type: application/json is empty instead of raising an error.
JsonSerializer to return None if a response using Content-Type: application/json is empty instead of raising an error.Fixed Urllib3HttpNode and RequestsHttpNode to never require a valid certificate chain when using ssl_assert_fingerprint. Instead the internal HTTP cli
Urllib3HttpNode and RequestsHttpNode to never require a valid certificate chain when using ssl_assert_fingerprint. Instead the internal HTTP client libraries will explicitly disable verifying the certificate chain and instead rely only on the certificate fingerprint for verification.Fixed AiohttpHttpNode to close TLS connections that aren't properly shutdown by the server instead of leaking them
AiohttpHttpNode to close TLS connections that aren't properly shutdown by the server instead of leaking themUrllib3HttpNode to respect path_prefix setting in NodeConfigAdded support for asyncio with AsyncTransport and AiohttpHttpNode
AsyncTransport and AiohttpHttpNodeJsonSerializer, NdjsonSerializerconnections_per_node parameter to RequestsHttpNodessl_assert_fingerprint to RequestsHttpNodessl_assert_fingerprint when using CPython 3.10+sniff_callback transport parameterssl_version via ssl.TLSVersion enum
instead of ssl.PROTOCOL_TLSvX for Python 3.7+elastic_transport.client_utils module to help writing API clientselastic_transport.debug_logging method to enable all logging for debugging purposesrequests.Session.auth within RequestsHttpNode via NodeConfig._extras['requests.session.auth']*Connection classes to use *Node terminologyconnection_class to node_classConnectionPool to NodePoolConnectionSelector to NodeSelectorNodeSelector(randomize_hosts) parameter to randomize_nodesNodeSelector.get_connection() method to get()elastic_transport.connection logger name to elastic_transport.nodeUrllib3HttpNode(connections_per_host) parameter to connections_per_nodeBaseNode.perform_request() to NamedTuple(meta=ApiResponseMeta, body=bytes)Transport.perform_request() to NamedTuple(meta=ApiResponseMeta, body=Any)Deserializer into SerializersCollectionssl_version to denote the minimum TLS version instead of the only TLS versionApiError to be Exception instead of TransportError.
TransportError is now only for errors that occur at the transport layer.Urllib3HttpNode to block on new connections when the internal connection pool is exhaustedDummyConnectionPool and EmptyConnectionPool in favor of NodePool.AiohttpHttpNode where method="HEAD" requests wouldn't mark the internal connection as reusable. This work-around is no longer needed when aiohttp>=3.7.0 is installed.aiohttp.__version__ when determining if HEAD bug is fixed.Added support for asyncio with AsyncTransport and AiohttpHttpNode
AsyncTransport and AiohttpHttpNodeJsonSerializer, NdjsonSerializerconnections_per_node parameter to RequestsHttpNodessl_assert_fingerprint to RequestsHttpNodessl_assert_fingerprint when using CPython 3.10+sniff_callback transport parameterssl_version via ssl.TLSVersion enum
instead of ssl.PROTOCOL_TLSvX for Python 3.7+elastic_transport.client_utils module to help writing API clientselastic_transport.debug_logging method to enable all logging for debugging purposesrequests.Session.auth within RequestsHttpNode via NodeConfig._extras['requests.session.auth']*Connection classes to use *Node terminologyconnection_class to node_classConnectionPool to NodePoolConnectionSelector to NodeSelectorNodeSelector(randomize_hosts) parameter to randomize_nodesNodeSelector.get_connection() method to get()elastic_transport.connection logger name to elastic_transport.nodeUrllib3HttpNode(connections_per_host) parameter to connections_per_nodeBaseNode.perform_request() to NamedTuple(meta=ApiResponseMeta, body=bytes)Transport.perform_request() to NamedTuple(meta=ApiResponseMeta, body=Any)Deserializer into SerializersCollectionssl_version to denote the minimum TLS version instead of the only TLS versionApiError to be Exception instead of TransportError.
TransportError is now only for errors that occur at the transport layer.Urllib3HttpNode to block on new connections when the internal connection pool is exhaustedDummyConnectionPool and EmptyConnectionPool in favor of NodePool.AiohttpHttpNode where method="HEAD" requests wouldn't mark the internal connection as reusable. This work-around is no longer needed when aiohttp>=3.7.0 is installed.aiohttp.__version__ when determining if HEAD bug is fixed.Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Deprecated Python 2.7, 3.4, and 3.5. Support will be removed in 8.0.0.
Release created to be compatible with 7.15 clients
Release created to be compatible with 7.15 clients
No changes since 7.14.0
Release created to be compatible with 7.14 clients
Release created to be compatible with 7.14 clients
No changes since 7.13.0
No changes since 7.12.0
No changes since 7.12.0
Release created to be compatible with 7.12 clients
Release created to be compatible with 7.12 clients
Added the X-Elastic-Client-Meta HTTP header
X-Elastic-Client-Meta HTTP header (#4)Response and TransportError (#5)QueryParams data structure for representing an ordered sequence of key-value pairs for the URL query (#6)Connection.perform_request() to take target instead of path and params. Instead path and params are created within Transport.perform_request() (#6)Nothing published for this version
Initial beta release of elastic-transport-python
elastic-transport-pythonNothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →