Skip to main content
The latest major version of the algoliasearch package is version 4. This page helps you upgrade from version 3 and explains the breaking changes you need to address. Algolia generates the version 4 clients from OpenAPI specifications, which provides consistent behavior across all languages and up-to-date API coverage. The main architectural change is the removal of the init_index pattern: all methods are now on the client instance directly, with index_name as a parameter. For the full list of changes, see the Python changelog.

Update your dependencies

Update the algoliasearch package to version 4:
Command line

Update imports

The import path changed from algoliasearch.search_client to algoliasearch.search.client.
Python
Version 4 also includes dedicated packages for each API. If you only need methods from a specific API, you can import them separately:
Python

Update client initialization

Client creation changed in version 4. The SearchClient.create() factory method is gone. Create a SearchClientSync instance for synchronous code or a SearchClient instance for asynchronous code.
Python
Note the naming: SearchClientSync is the synchronous client, while SearchClient (without suffix) is the asynchronous client. The asynchronous client supports the async with syntax to automatically close open connections.

Understand the new API surface

Version 4 introduces three major changes to the API surface:
  • No more init_index. Version 3 relied on an index object with methods called on it. In version 4, all methods belong to the client instance, with index_name as a parameter.
  • Synchronous and asynchronous clients. Version 4 includes SearchClientSync for synchronous code and SearchClient for asynchronous code (with async/await). Version 3 only had a synchronous client.
  • Typed model classes. Version 4 includes model classes like SearchParams and IndexSettings for all API parameters (see Use model classes or dictionaries).
Python
If you have many files to update, search your codebase for init_index or .init_index( to find every place that needs changing.

Use model classes or dictionaries

Version 4 methods accept both model classes and dictionaries as parameters.
Python
Model classes give you IDE autocompletion, type safety, and predictable structure that works well with AI coding assistants. The code examples in this guide use model classes, but you can use dictionaries anywhere a model is expected.

Update search calls

Search a single index

The index.search() method is now client.search_single_index(). Pass the index name and search parameters as separate arguments:
Python

Search multiple indices

The client.multiple_queries() method is now client.search(). Each request in the list requires an indexName:
Python

Search for facet values

The index.search_for_facet_values() method becomes client.search_for_facet_values() with an index_name parameter:
Python

Update indexing operations

In version 4, indexing methods are on the client instead of the index object, with index_name as a parameter.

Add or replace records

Python

Partially update records

Python

Delete records

Python

Update settings, synonyms, and rules

Get and set settings

Python

Save synonyms and rules

Python
In version 3, index.replace_all_rules() and index.replace_all_synonyms() replaced all rules or synonyms. In version 4, use client.save_rules() or client.save_synonyms() with the clear_existing_rules or replace_existing_synonyms parameter set to True.

Update index management

The copy_index, move_index, copy_rules, copy_synonyms, and copy_settings methods are all replaced by a single operation_index method.

Copy an index

Python

Move (rename) an index

Python

Copy only rules or settings

In version 4, use the scope parameter to limit the operation to specific data:
Python

Check if an index exists

In version 3, you could check if an index existed using the exists method on the index object. In version 4, use the index_exists helper method on the client:
Python

Update task handling

Version 3 supported chaining .wait() on operations. Version 4 replaces this pattern with dedicated wait helpers.
Python
Version 4 includes three wait helpers:

Helper method changes

The following sections document breaking changes in helper method signatures and behavior between version 3 and version 4.

replace_all_objects

The safe option has been removed. In version 3, passing safe=True in request_options caused the helper to wait after each step. In version 4, the helper always waits—equivalent to the previous safe=True behavior. The scopes parameter is optional. When omitted, it defaults to ["settings", "rules", "synonyms"].
Python

save_objects

The autoGenerateObjectIDIfNotExist option has been removed. In version 4, every object must include an object_id, or you must use chunked_batch with action="addObject" if you want the API to generate object IDs. Two new optional parameters are available:
  • wait_for_tasks (waits for all indexing tasks before returning, default False)
  • batch_size (controls objects per API call, default 1,000)
Python

delete_objects

Two new optional parameters are available:
  • wait_for_tasks (default False)
  • batch_size (default 1,000)
Python

partial_update_objects

The create_if_not_exists parameter moved from request_options to an explicit keyword argument.
Python

browse_objects, browse_rules, browse_synonyms

These helpers now use an aggregator callback instead of returning an iterator. The helper calls aggregator with each page of results as it paginates.
Python

generate_secured_api_key and get_secured_api_key_remaining_validity

Both methods were static methods on the index class in version 3. In version 4 they are instance methods on the client.
Python

wait_for_task

The helper was renamed from wait_task to wait_for_task, moved to the client, and now accepts explicit max_retries (default 100) and timeout parameters. In version 3 it retried indefinitely with no cap.
Python

wait_for_app_task

This is a new helper in version 4.
Python

wait_for_api_key

This is a new standalone helper in version 4.
Python

index_exists

The helper was renamed from exists() on the index object to index_exists() on the client.
Python

chunked_batch

chunked_batch is now a public helper. In version 3, chunking was an internal detail of save_objects. The action parameter defaults to Action.ADDOBJECT and wait_for_tasks defaults to False.
Python

account_copy_index

In version 3, AccountClient.copy_index allowed copying an index between two different Algolia applications. It accepted two SearchIndex objects and raised if the destination already existed or if both indices were on the same app. In version 4, AccountClient is removed. You can compose existing helpers across two clients to achieve the same result.
Python

save_objects_with_transformation

In version 4 and later: routes records with the Push to Algolia connector. Requires transformation_options with a region at client initialization. The transformation_region parameter is deprecated. Use transformation_options instead.
Python

replace_all_objects_with_transformation

In version 4 and later: atomically replaces all records with the Push to Algolia connector. It copies settings, rules, and synonyms to a temporary index, pushes records to the temporary index, and moves the temporary index back. Requires transformation_options with a region at client initialization.
Python

partial_update_objects_with_transformation

In version 4 and later: routes partial updates with the Push to Algolia connector. The create_if_not_exists parameter defaults to False.
Python

Method changes reference

The following tables list all method names that changed between version 3 and version 4.

Search API client

Recommend API client

Last modified on June 10, 2026