# Httpx2HttpClientAsync<!-- -->

Asynchronous HTTP client for the Apify API built on top of [HTTPX2](https://github.com/pydantic/httpx2).

This client wraps `httpx2.AsyncClient` and adds automatic retries with exponential backoff for rate-limited (HTTP 429) and server error (HTTP 5xx) responses.

HTTPX2 applies a request timeout to each socket operation rather than to the request as a whole, so a response whose body arrives slowly keeps resetting it and can outlast both the requested timeout and `timeout_max`. The default Impit client enforces the same value as a deadline for the whole request, body included.

Requires the `httpx2` extra: `pip install "apify-client[httpx2]"`. The `httpx2` package is Pydantic's maintained continuation of HTTPX.

### Hierarchy

* [HttpClientAsync](https://docs.apify.com/api/client/python/reference/class/HttpClientAsync.md)
  * *Httpx2HttpClientAsync*

## Index[**](#Index)

### Methods

* [**\_\_aenter\_\_](https://docs.apify.com/api/client/python/reference/class/Httpx2HttpClientAsync.md#__aenter__)
* [**\_\_aexit\_\_](https://docs.apify.com/api/client/python/reference/class/Httpx2HttpClientAsync.md#__aexit__)
* [**\_\_init\_\_](https://docs.apify.com/api/client/python/reference/class/Httpx2HttpClientAsync.md#__init__)
* [**aclose](https://docs.apify.com/api/client/python/reference/class/Httpx2HttpClientAsync.md#aclose)
* [**call](https://docs.apify.com/api/client/python/reference/class/Httpx2HttpClientAsync.md#call)
* [**is_retryable_transport_error](https://docs.apify.com/api/client/python/reference/class/Httpx2HttpClientAsync.md#is_retryable_transport_error)
* [**is_timeout_error](https://docs.apify.com/api/client/python/reference/class/Httpx2HttpClientAsync.md#is_timeout_error)
* [**send_request](https://docs.apify.com/api/client/python/reference/class/Httpx2HttpClientAsync.md#send_request)
* [**set_default_authorization](https://docs.apify.com/api/client/python/reference/class/Httpx2HttpClientAsync.md#set_default_authorization)

## Methods<!-- -->[**](#Methods)

### [**](#__aenter__)\_\_aenter\_\_

* **async **\_\_aenter\_\_**(): Self

- Inherited from [HttpClientAsync.\_\_aenter\_\_](https://docs.apify.com/api/client/python/reference/class/HttpClientAsync.md#__aenter__)

  Return this client and close it when the async context exits.

  ***

  #### Returns Self

### [**](#__aexit__)\_\_aexit\_\_

* **async **\_\_aexit\_\_**(exc_type, exc_value, traceback): None

- Inherited from [HttpClientAsync.\_\_aexit\_\_](https://docs.apify.com/api/client/python/reference/class/HttpClientAsync.md#__aexit__)

  Close resources owned by the asynchronous HTTP client.

  ***

  #### Parameters

  * ##### exc_type: type\[BaseException] | None
  * ##### exc_value: BaseException | None
  * ##### traceback: TracebackType | None

  #### Returns None

### [**](#__init__)\_\_init\_\_

* ****\_\_init\_\_**(\*, token, timeout_short, timeout_medium, timeout_long, timeout_max, max_retries, min_delay_between_retries, statistics, headers, http_compressor): None

- Overrides [HttpClientAsync.\_\_init\_\_](https://docs.apify.com/api/client/python/reference/class/HttpClientAsync.md#__init__)

  Initialize the HTTPX2-based asynchronous HTTP client.

  ***

  #### Parameters

  * ##### optionalkeyword-onlytoken: str | None = <!-- -->None

    Apify API token for authentication.

  * ##### optionalkeyword-onlytimeout_short: timedelta = <!-- -->DEFAULT_TIMEOUT_SHORT

    Default timeout for short-duration API operations (simple CRUD operations, ...).

  * ##### optionalkeyword-onlytimeout_medium: timedelta = <!-- -->DEFAULT_TIMEOUT_MEDIUM

    Default timeout for medium-duration API operations (batch operations, listing, ...).

  * ##### optionalkeyword-onlytimeout_long: timedelta = <!-- -->DEFAULT_TIMEOUT_LONG

    Default timeout for long-duration API operations (long-polling, streaming, ...).

  * ##### optionalkeyword-onlytimeout_max: timedelta = <!-- -->DEFAULT_TIMEOUT_MAX

    Maximum timeout cap for any single request attempt, including tier and per-call timeouts.

  * ##### optionalkeyword-onlymax_retries: int = <!-- -->DEFAULT_MAX_RETRIES

    Maximum number of retry attempts for failed requests.

  * ##### optionalkeyword-onlymin_delay_between_retries: timedelta = <!-- -->DEFAULT_MIN_DELAY_BETWEEN_RETRIES

    Minimum delay between retries (increases exponentially with each attempt).

  * ##### optionalkeyword-onlystatistics: [ClientStatistics](https://docs.apify.com/api/client/python/reference/class/ClientStatistics.md) | None = <!-- -->None

    Statistics tracker for API calls. Created automatically if not provided.

  * ##### optionalkeyword-onlyheaders: dict\[str, str] | None = <!-- -->None

    Additional HTTP headers to include in all requests.

  * ##### optionalkeyword-onlyhttp_compressor: [HttpCompressor](https://docs.apify.com/api/client/python/reference/class/HttpCompressor.md) | None = <!-- -->None

    Compressor used to compress request bodies. Defaults to `GzipHttpCompressor`.

  #### Returns None

### [**](#aclose)aclose

* **async **aclose**(): None

- Overrides [HttpClientAsync.aclose](https://docs.apify.com/api/client/python/reference/class/HttpClientAsync.md#aclose)

  Close the underlying asynchronous HTTPX2 connection pool.

  ***

  #### Returns None

### [**](#call)call

* **async **call**(\*, method, url, headers, params, data, json, stream, timeout): [HttpResponse](https://docs.apify.com/api/client/python/reference/class/HttpResponse.md)

- Inherited from [HttpClientAsync.call](https://docs.apify.com/api/client/python/reference/class/HttpClientAsync.md#call)

  Make an HTTP request with automatic retry and exponential backoff.

  ***

  #### Parameters

  * ##### keyword-onlymethod: str

    HTTP method (GET, POST, PUT, DELETE, etc.).

  * ##### keyword-onlyurl: str

    Full URL to make the request to.

  * ##### optionalkeyword-onlyheaders: dict\[str, str] | None = <!-- -->None

    Additional headers to include.

  * ##### optionalkeyword-onlyparams: dict\[str, Any] | None = <!-- -->None

    Query parameters to append to the URL.

  * ##### optionalkeyword-onlydata: str | bytes | bytearray | StreamedBodySource | None = <!-- -->None

    Raw request body. An `io.IOBase` stream such as an open file, an iterable of byte chunks, or a streamed `HttpResponse` is sent in chunks as it is read, and any other object with a callable `read` is read whole, see `StreamedRequestBody`. Streaming is experimental, and its behavior may change in future versions. Cannot be used together with json.

  * ##### optionalkeyword-onlyjson: JsonSerializable | None = <!-- -->None

    JSON-serializable data for the request body. Cannot be used together with data.

  * ##### optionalkeyword-onlystream: bool | None = <!-- -->None

    Whether to stream the response body.

  * ##### optionalkeyword-onlytimeout: [Timeout](https://docs.apify.com/api/client/python/reference.md#Timeout) = <!-- -->'medium'

    Timeout for the API HTTP request. Use `short`, `medium`, or `long` tier literals for preconfigured timeouts. A `timedelta` overrides it for this call (capped at `timeout_max`), and `no_timeout` disables the timeout entirely.

  #### Returns [HttpResponse](https://docs.apify.com/api/client/python/reference/class/HttpResponse.md)

  The HTTP response object.

### [**](#is_retryable_transport_error)is_retryable_transport_error

* ****is_retryable_transport_error**(exc): bool

- Overrides [HttpClientAsync.is_retryable_transport_error](https://docs.apify.com/api/client/python/reference/class/HttpClientAsync.md#is_retryable_transport_error)

  Return whether an underlying HTTP-library exception is retryable.

  The default classifies nothing as retryable, so a transport that doesn't override it gives up on the first connection failure. Every transport adapter should map its own transient error types here.

  ***

  #### Parameters

  * ##### exc: Exception

  #### Returns bool

### [**](#is_timeout_error)is_timeout_error

* ****is_timeout_error**(exc): bool

- Overrides [HttpClientAsync.is_timeout_error](https://docs.apify.com/api/client/python/reference/class/HttpClientAsync.md#is_timeout_error)

  Return whether an exception represents a transport timeout.

  Recognizes Python's own `TimeoutError`. Transport adapters extend it with the timeout types their HTTP library defines.

  ***

  #### Parameters

  * ##### exc: Exception

  #### Returns bool

### [**](#send_request)send_request

* **async **send_request**(\*, method, url, headers, content, timeout, stream): [HttpResponse](https://docs.apify.com/api/client/python/reference/class/HttpResponse.md)

- Overrides [HttpClientAsync.send_request](https://docs.apify.com/api/client/python/reference/class/HttpClientAsync.md#send_request)

  Send one request through the underlying HTTP library.

  Required by the inherited `call`, so a transport adapter must implement it. Overriding `call` itself bypasses it entirely. Let the HTTP library's exceptions propagate unwrapped: `call` classifies them through `is_retryable_transport_error` and `is_timeout_error`.

  ***

  #### Parameters

  * ##### keyword-onlymethod: str

    HTTP method (GET, POST, PUT, DELETE, etc.).

  * ##### keyword-onlyurl: str

    Full request URL, with the query parameters already encoded into it.

  * ##### keyword-onlyheaders: dict\[str, str]

    Final request headers, with the client's default headers already merged in.

  * ##### keyword-onlycontent: (bytes | AsyncIterator\[bytes]) | None

    Request body, already serialized and compressed, an iterator of chunks for a streamed body (an async iterator in the asynchronous client), or None for a request without a body.

  * ##### keyword-onlytimeout: float | None

    Timeout for this attempt in seconds, or None for no timeout at all.

  * ##### keyword-onlystream: bool

    Whether to return the response with the body unread, so the caller can stream it.

  #### Returns [HttpResponse](https://docs.apify.com/api/client/python/reference/class/HttpResponse.md)

  The HTTP response object.

### [**](#set_default_authorization)set_default_authorization

* ****set_default_authorization**(token): None

- Inherited from [HttpClientBase.set_default_authorization](https://docs.apify.com/api/client/python/reference/class/HttpClientBase.md#set_default_authorization)

  Set the `Authorization` header from the token, unless an authorization header is already configured.

  ***

  #### Parameters

  * ##### token: str

    The Apify API token to set as the `Bearer` authorization.

  #### Returns None
