diff --git a/algoliasearch/search_index.py b/algoliasearch/search_index.py
index b280c3a52..4aaf25d49 100644
--- a/algoliasearch/search_index.py
+++ b/algoliasearch/search_index.py
@@ -49,11 +49,11 @@ class SearchIndex(object):
         self._config = config
         self._name = name
 
-    def exists(self):
-        # type: () -> bool
+    def exists(self, request_options=None):
+        # type: (Optional[Union[dict, RequestOptions]]) -> bool
 
         try:
-            self.get_settings()
+            self.get_settings(request_options)
         except RequestException as e:
             if e.status_code == 404:
                 return False
diff --git a/algoliasearch/search_index_async.py b/algoliasearch/search_index_async.py
index 562d508a6..beabc70ab 100644
--- a/algoliasearch/search_index_async.py
+++ b/algoliasearch/search_index_async.py
@@ -79,11 +79,11 @@ class SearchIndexAsync(SearchIndex):
         return RuleIteratorAsync(self._transporter_async, self._name,
                                  request_options)
 
-    def exists_async(self):
-        # type: () -> bool
+    def exists_async(self, request_options=None):  # type: ignore # noqa: E501
+        # type: (Optional[Union[dict, RequestOptions]]) -> bool
 
         try:
-            yield from self.get_settings_async()
+            yield from self.get_settings_async(request_options)
         except RequestException as e:
             if e.status_code == 404:
                 return False

feat: add request options in exists method
We need to allow passing the `request_options` into the exists method.
diff --git a/tests/unit/test_search_index.py b/tests/unit/test_search_index.py
index 246d5c45d..935e6a883 100644
--- a/tests/unit/test_search_index.py
+++ b/tests/unit/test_search_index.py
@@ -29,7 +29,8 @@ class TestSearchIndex(unittest.TestCase):
     def test_name_getter(self):
         self.assertEqual(self.index.name, 'index-name')
 
-    def test_index_does_not_exist(self):
+    def test_exists(self):
+
         with mock.patch.object(self.index, 'get_settings') as submethod_mock:
             submethod_mock.side_effect = RequestException(
                 "Index does not exist", 404
@@ -38,9 +39,13 @@ class TestSearchIndex(unittest.TestCase):
             indexExists = self.index.exists()
 
             self.index.get_settings.assert_called_once()
-            self.assertEqual(indexExists, False);
 
-    def test_index_exist_raises_non_4O4_exceptions(self):
+            # No request options
+            args = self.index.get_settings.call_args[0]
+            self.assertEqual(args[0], None)
+
+            self.assertEqual(indexExists, False)
+
         with mock.patch.object(self.index, 'get_settings') as submethod_mock:
             submethod_mock.side_effect = RequestException(
                 "Permissions error", 400
@@ -49,7 +54,25 @@ class TestSearchIndex(unittest.TestCase):
             with self.assertRaises(RequestException) as _:
                 self.index.exists()
 
-    def test_index_exists(self):
+        with mock.patch.object(self.index, 'get_settings') as submethod_mock:
+            submethod_mock.return_value = {
+                'hitsPerPage': 20,
+                'maxValuesPerFacet': 100
+            }
+
+            request_options = {
+                'X-Algolia-User-ID': 'Foo'
+            }
+
+            indexExists = self.index.exists(request_options)
+
+            # With request options
+            args = self.index.get_settings.call_args[0]
+            self.assertEqual(args[0], request_options)
+
+            self.index.get_settings.assert_called_once()
+            self.assertEqual(indexExists, True)
+
         with mock.patch.object(self.index, 'get_settings') as submethod_mock:
             submethod_mock.return_value = {
                 'hitsPerPage': 20,
@@ -59,7 +82,7 @@ class TestSearchIndex(unittest.TestCase):
             indexExists = self.index.exists()
 
             self.index.get_settings.assert_called_once()
-            self.assertEqual(indexExists, True);
+            self.assertEqual(indexExists, True)
 
     def test_save_objects(self):
         # Saving an object without object id

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest pytest-cov pytest-xdist pytest-mock pytest-asyncio
apt-get update apt-get install -y gcc
3.7
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
aiohttp==3.8.6
aiosignal==1.3.1
-e git+https://github.com/algolia/algoliasearch-client-python.git@e631a4cb79f1a79c9fded2783d0eb23070ef966d#egg=algoliasearch
async-timeout==4.0.3
asyncio==3.4.3
asynctest==0.13.0
attrs==24.2.0
autopage==0.5.2
bleach==6.0.0
certifi @ file:///croot/certifi_1671487769961/work/certifi
charset-normalizer==3.4.1
cliff==3.10.1
cmd2==2.4.3
coverage==7.2.7
distlib==0.3.9
docutils==0.20.1
exceptiongroup==1.2.2
execnet==2.0.2
Faker==1.0.8
filelock==3.12.2
fixtures==4.1.0
flake8==3.9.2
frozenlist==1.3.3
future==1.0.0
idna==3.10
importlib-metadata==6.7.0
iniconfig==2.0.0
iso8601==2.1.0
mccabe==0.6.1
mock==2.0.0
multidict==6.0.5
mypy==1.4.1
mypy-extensions==1.0.0
packaging==24.0
pbr==6.1.1
pkginfo==1.10.0
platformdirs==4.0.0
pluggy==1.2.0
prettytable==3.7.0
py==1.11.0
pycodestyle==2.7.0
pyflakes==2.3.1
Pygments==2.17.2
pyparsing==3.1.4
pyperclip==1.9.0
pytest==7.4.4
pytest-asyncio==0.21.2
pytest-cov==4.1.0
pytest-mock==3.11.1
pytest-xdist==3.5.0
python-dateutil==2.9.0.post0
python-subunit==1.4.4
PyYAML==6.0.1
readme-renderer==37.3
requests==2.31.0
requests-toolbelt==1.0.0
six==1.17.0
stestr==2.4.0
stevedore==3.5.2
testtools==2.7.1
text-unidecode==1.2
tomli==2.0.1
tox==3.28.0
tqdm==4.67.1
twine==1.15.0
typed-ast==1.5.5
typing_extensions==4.7.1
urllib3==2.0.7
virtualenv==20.26.6
voluptuous==0.14.1
wcwidth==0.2.13
webencodings==0.5.1
yarl==1.9.4
zipp==3.15.0

name: algoliasearch-client-python
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=22.3.1=py37h06a4308_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - aiohttp==3.8.6
      - aiosignal==1.3.1
      - async-timeout==4.0.3
      - asyncio==3.4.3
      - asynctest==0.13.0
      - attrs==24.2.0
      - autopage==0.5.2
      - bleach==6.0.0
      - charset-normalizer==3.4.1
      - cliff==3.10.1
      - cmd2==2.4.3
      - coverage==7.2.7
      - distlib==0.3.9
      - docutils==0.20.1
      - exceptiongroup==1.2.2
      - execnet==2.0.2
      - faker==1.0.8
      - filelock==3.12.2
      - fixtures==4.1.0
      - flake8==3.9.2
      - frozenlist==1.3.3
      - future==1.0.0
      - idna==3.10
      - importlib-metadata==6.7.0
      - iniconfig==2.0.0
      - iso8601==2.1.0
      - mccabe==0.6.1
      - mock==2.0.0
      - multidict==6.0.5
      - mypy==1.4.1
      - mypy-extensions==1.0.0
      - packaging==24.0
      - pbr==6.1.1
      - pkginfo==1.10.0
      - platformdirs==4.0.0
      - pluggy==1.2.0
      - prettytable==3.7.0
      - py==1.11.0
      - pycodestyle==2.7.0
      - pyflakes==2.3.1
      - pygments==2.17.2
      - pyparsing==3.1.4
      - pyperclip==1.9.0
      - pytest==7.4.4
      - pytest-asyncio==0.21.2
      - pytest-cov==4.1.0
      - pytest-mock==3.11.1
      - pytest-xdist==3.5.0
      - python-dateutil==2.9.0.post0
      - python-subunit==1.4.4
      - pyyaml==6.0.1
      - readme-renderer==37.3
      - requests==2.31.0
      - requests-toolbelt==1.0.0
      - six==1.17.0
      - stestr==2.4.0
      - stevedore==3.5.2
      - testtools==2.7.1
      - text-unidecode==1.2
      - tomli==2.0.1
      - tox==3.28.0
      - tqdm==4.67.1
      - twine==1.15.0
      - typed-ast==1.5.5
      - typing-extensions==4.7.1
      - urllib3==2.0.7
      - virtualenv==20.26.6
      - voluptuous==0.14.1
      - wcwidth==0.2.13
      - webencodings==0.5.1
      - yarl==1.9.4
      - zipp==3.15.0
prefix: /opt/conda/envs/algoliasearch-client-python

tests/unit/test_search_index.py::TestSearchIndex::test_exists
tests/unit/test_search_index.py::TestSearchIndex::test_app_id_getter tests/unit/test_search_index.py::TestSearchIndex::test_find_object tests/unit/test_search_index.py::TestSearchIndex::test_get_objects tests/unit/test_search_index.py::TestSearchIndex::test_get_objects_with_attributes_to_retreive tests/unit/test_search_index.py::TestSearchIndex::test_get_objects_with_attributes_to_retreive_bulk tests/unit/test_search_index.py::TestSearchIndex::test_get_settings tests/unit/test_search_index.py::TestSearchIndex::test_get_settings_dict_as_request_options tests/unit/test_search_index.py::TestSearchIndex::test_get_settings_none_as_request_options tests/unit/test_search_index.py::TestSearchIndex::test_get_settings_with_request_options tests/unit/test_search_index.py::TestSearchIndex::test_get_task tests/unit/test_search_index.py::TestSearchIndex::test_name_getter tests/unit/test_search_index.py::TestSearchIndex::test_partial_update_objects tests/unit/test_search_index.py::TestSearchIndex::test_replace_all_objects tests/unit/test_search_index.py::TestSearchIndex::test_save_objects tests/unit/test_search_index.py::TestSearchIndex::test_save_rules tests/unit/test_search_index.py::TestSearchIndex::test_save_synonyms
algoliasearch/search_index_async.py algoliasearch/search_index.py
algoliasearch/search_index_async.py algoliasearch/search_index.py