diff --git a/nylas/client/client.py b/nylas/client/client.py
index 8278ae5..b41f782 100644
--- a/nylas/client/client.py
+++ b/nylas/client/client.py
@@ -143,13 +143,13 @@ class APIClient(json.JSONEncoder):
             if 'Authorization' in self.session.headers:
                 del self.session.headers['Authorization']
 
-    def authentication_url(self, redirect_uri, login_hint=''):
+    def authentication_url(self, redirect_uri, login_hint='', state=''):
         args = {'redirect_uri': redirect_uri,
                 'client_id': self.app_id or 'None',  # 'None' for back-compat
                 'response_type': 'code',
                 'scope': 'email',
                 'login_hint': login_hint,
-                'state': ''}
+                'state': state}
 
         url = URLObject(self.authorize_url).add_query_params(args.items())
         return str(url)

Allow users to pass `state` during authentication
diff --git a/tests/test_client.py b/tests/test_client.py
index 8a8590d..ea4831d 100644
--- a/tests/test_client.py
+++ b/tests/test_client.py
@@ -83,6 +83,12 @@ def test_client_authentication_url(api_client, api_url):
     expected2 = expected.set_query_param("login_hint", "hint")
     assert urls_equal(expected2, actual2)
 
+    actual3 = URLObject(
+        api_client.authentication_url("/redirect", state="confusion")
+    )
+    expected3 = expected.set_query_param("state", "confusion")
+    assert urls_equal(expected3, actual3)
+
 
 @responses.activate
 def test_client_token_for_code(api_client, api_url):

pip install -e .[test]
parse_log_pytest
requirements.txt
pytest
3.9
requirements-dev.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
astroid==3.3.9
bump2version==1.0.1
bumpversion==0.6.0
certifi==2025.1.31
cffi==1.17.1
charset-normalizer==3.4.1
coverage==7.8.0
cryptography==44.0.2
dill==0.3.9
exceptiongroup==1.2.2
httpretty==1.1.4
idna==3.10
iniconfig==2.1.0
isort==6.0.1
mccabe==0.7.0
ndg-httpsclient==0.5.1
-e git+https://github.com/nylas/nylas-python.git@6a9b1e5c0774b2a198496daedb980b5bbc091d30#egg=nylas
packaging==24.2
platformdirs==4.3.7
pluggy==1.5.0
pyasn1==0.6.1
pycparser==2.22
pylint==3.3.6
pyOpenSSL==25.0.0
pytest==8.3.5
pytest-cov==6.0.0
pytest-pylint==0.21.0
PyYAML==6.0.2
requests==2.32.3
responses==0.25.7
six==1.17.0
tomli==2.2.1
tomlkit==0.13.2
typing_extensions==4.13.0
urllib3==2.3.0
URLObject==2.4.3

name: nylas-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
  - 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=3.0.16=h5eee18b_0
  - pip=25.0=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - astroid==3.3.9
      - bump2version==1.0.1
      - bumpversion==0.6.0
      - certifi==2025.1.31
      - cffi==1.17.1
      - charset-normalizer==3.4.1
      - coverage==7.8.0
      - cryptography==44.0.2
      - dill==0.3.9
      - exceptiongroup==1.2.2
      - httpretty==1.1.4
      - idna==3.10
      - iniconfig==2.1.0
      - isort==6.0.1
      - mccabe==0.7.0
      - ndg-httpsclient==0.5.1
      - packaging==24.2
      - platformdirs==4.3.7
      - pluggy==1.5.0
      - pyasn1==0.6.1
      - pycparser==2.22
      - pylint==3.3.6
      - pyopenssl==25.0.0
      - pytest==8.3.5
      - pytest-cov==6.0.0
      - pytest-pylint==0.21.0
      - pyyaml==6.0.2
      - requests==2.32.3
      - responses==0.25.7
      - six==1.17.0
      - tomli==2.2.1
      - tomlkit==0.13.2
      - typing-extensions==4.13.0
      - urllib3==2.3.0
      - urlobject==2.4.3
prefix: /opt/conda/envs/nylas-python

tests/test_client.py::test_client_authentication_url
tests/test_client.py::test_custom_client tests/test_client.py::test_client_error tests/test_client.py::test_client_access_token tests/test_client.py::test_client_app_secret tests/test_client.py::test_client_token_for_code tests/test_client.py::test_client_opensource_api tests/test_client.py::test_client_revoke_token tests/test_client.py::test_create_resources tests/test_client.py::test_call_resource_method
nylas/client/client.py
nylas/client/client.py