# Timeouts

Copy for LLM

The Apify client uses a tiered timeout system to set appropriate time limits for different types of API requests. Each tier has a default value suited to its use case:

| Tier         | Default     | Purpose                                       |
| ------------ | ----------- | --------------------------------------------- |
| `short`      | 5 seconds   | Fast CRUD operations (get, update, delete)    |
| `medium`     | 30 seconds  | Batch, list, and data transfer operations     |
| `long`       | 360 seconds | Long-polling, streaming, and heavy operations |
| `no_timeout` | —           | Disables the timeout entirely                 |

Every client method has a pre-assigned tier that matches the expected duration of the underlying API call. You generally don't need to change these unless you're working with unusually large payloads or slow network conditions.

## Configuring default timeouts[](#configuring-default-timeouts)

You can override the default values for each tier in the [`ApifyClient`](https://docs.apify.com/api/client/python/api/client/python/reference/class/ApifyClient.md) or [`ApifyClientAsync`](https://docs.apify.com/api/client/python/api/client/python/reference/class/ApifyClientAsync.md) constructor. The `timeout_max` parameter sets an upper cap on the timeout for any individual API request, limiting exponential growth during retries.

* Async client
* Sync client

```
from datetime import timedelta



from apify_client import ApifyClientAsync



TOKEN = 'MY-APIFY-TOKEN'





async def main() -> None:

    # Configure default timeout tiers globally.

    apify_client = ApifyClientAsync(

        token=TOKEN,

        timeout_short=timedelta(seconds=10),

        timeout_medium=timedelta(seconds=60),

        timeout_long=timedelta(seconds=600),

        timeout_max=timedelta(seconds=600),

    )



    dataset_client = apify_client.dataset('dataset-id')



    # Override the timeout for a single call using a timedelta.

    items = await dataset_client.list_items(timeout=timedelta(seconds=120))



    # Or use a tier literal to select a predefined timeout.

    items = await dataset_client.list_items(timeout='long')
```

```
from datetime import timedelta



from apify_client import ApifyClient



TOKEN = 'MY-APIFY-TOKEN'





def main() -> None:

    # Configure default timeout tiers globally.

    apify_client = ApifyClient(

        token=TOKEN,

        timeout_short=timedelta(seconds=10),

        timeout_medium=timedelta(seconds=60),

        timeout_long=timedelta(seconds=600),

        timeout_max=timedelta(seconds=600),

    )



    dataset_client = apify_client.dataset('dataset-id')



    # Override the timeout for a single call using a timedelta.

    items = dataset_client.list_items(timeout=timedelta(seconds=120))



    # Or use a tier literal to select a predefined timeout.

    items = dataset_client.list_items(timeout='long')
```

## Per-call overrides[](#per-call-overrides)

Most client methods accept a `timeout` parameter that overrides the default tier for that specific call. You can pass either a `timedelta` for an exact duration or a tier literal (`'short'`, `'medium'`, `'long'`, `'no_timeout'`) to switch tiers.

```
from datetime import timedelta



# Use an exact timeout for this call.

client.dataset('id').list_items(timeout=timedelta(seconds=120))



# Switch to a different tier.

client.dataset('id').list_items(timeout='long')



# Disable the timeout entirely.

client.dataset('id').list_items(timeout='no_timeout')
```

## Interaction with retries[](#interaction-with-retries)

Timeouts work together with the [retry system](https://docs.apify.com/api/client/python/api/client/python/docs/concepts/retries.md). When a request times out, it counts as a failed attempt and triggers a retry (up to `max_retries`). The timeout applies to each individual attempt, not the total time across all retries.
