diff --git a/mollie/api/client.py b/mollie/api/client.py
index fd757f0..79fcc59 100644
--- a/mollie/api/client.py
+++ b/mollie/api/client.py
@@ -2,6 +2,7 @@ import json
 import platform
 import re
 import ssl
+import warnings
 
 import requests
 
@@ -50,10 +51,19 @@ class Client(object):
                 "Invalid API key: '{api_key}'. An API key must start with 'test_' or 'live_'.".format(api_key=api_key))
         return api_key
 
+    @staticmethod
+    def validate_access_token(access_token):
+        access_token = access_token.strip()
+        if not access_token.startswith('access_'):
+            raise RequestSetupError(
+                "Invalid access token: '{access_token}'. An access token must start with 'access_'.".format(
+                    access_token=access_token))
+        return access_token
+
     def __init__(self, api_key=None, api_endpoint=None, timeout=10):
         self.api_endpoint = self.validate_api_endpoint(api_endpoint or self.API_ENDPOINT)
         self.api_version = self.API_VERSION
-        self.api_key = self.validate_api_key(api_key) if api_key else None
+        self.api_key = None
         self.timeout = timeout
         self.payments = Payments(self)
         self.payment_refunds = PaymentRefunds(self)
@@ -68,12 +78,26 @@ class Client(object):
         self.orders = Orders(self)
         self.subscription_payments = SubscriptionPayments(self)
 
+        if api_key:
+            # There is no clean way for supporting both API key and access token acceptance and validation
+            #  in __init__(). Furthermore the naming of the parameter would be inconsistent.
+            # Using class methods is way cleaner.
+            #
+            # Warning added in 2.1.1, remove support in 2.3.x or so.
+            msg = "Setting the API key during init will be removed in the future. " \
+                  "Use Client.set_api_key() or Client.set_access_token() instead."
+            warnings.warn(msg, PendingDeprecationWarning)
+            self.api_key = self.validate_api_key(api_key)
+
     def set_api_endpoint(self, api_endpoint):
         self.api_endpoint = self.validate_api_endpoint(api_endpoint)
 
     def set_api_key(self, api_key):
         self.api_key = self.validate_api_key(api_key)
 
+    def set_access_token(self, access_token):
+        self.api_key = self.validate_access_token(access_token)
+
     def set_timeout(self, timeout):
         self.timeout = timeout
 

Add support for OAuth access tokens
By default, OAuth access tokens are not accepted in this package, while other packages do have support (e.g. mollie-api-php). 

I took a look there and found that there's little difference between access_token and API Key calls. The only difference is an additional User Agent header and a hardcoded validation on the API key starting with 'test_' or 'live_' in `validate_api_key()`.

I found a simple workaround to make this package work by avoiding the methods `validate_api_key()` and `set_api_key()`:
 ```python
client = Client()
client.api_key = access_token
client.USER_AGENT += " OAuth/2.0"
```

Maybe it's better to implement this in the package itself (with the necessary validation checks of course).
diff --git a/tests/test_client.py b/tests/test_client.py
index c17387c..028094e 100644
--- a/tests/test_client.py
+++ b/tests/test_client.py
@@ -48,6 +48,20 @@ def test_client_querystring(client, response):
     assert methods.count == 11
 
 
+def test_client_api_key():
+    """Setting up a valid api key or access token should be possible."""
+    client = Client()
+
+    client.set_access_token('access_123')
+    assert client.api_key == 'access_123'
+
+    client.set_api_key('live_123')
+    assert client.api_key == 'live_123'
+
+    client.set_api_key('test_123')
+    assert client.api_key == 'test_123'
+
+
 def test_client_no_api_key():
     """A Request without an API key should raise an error."""
     client = Client()
@@ -58,9 +72,30 @@ def test_client_no_api_key():
 def test_client_invalid_api_key():
     """Setting up an invalid api key raises an error."""
     client = Client()
+
     with pytest.raises(RequestSetupError, match="Invalid API key: 'invalid'"):
         client.set_api_key('invalid')
 
+    with pytest.raises(RequestSetupError, match="Invalid API key: 'access_123'"):
+        client.set_api_key('access_123')
+
+    with pytest.raises(RequestSetupError, match="Invalid access token: 'invalid'"):
+        client.set_access_token('invalid')
+
+    with pytest.raises(RequestSetupError, match="Invalid access token: 'live_123'"):
+        client.set_access_token('live_123')
+
+    with pytest.raises(RequestSetupError, match="Invalid access token: 'test_123'"):
+        client.set_access_token('test_123')
+
+
+def test_client_api_key_during_init_deprecated(recwarn):
+    """Setting the api key during init should work but raise a warning."""
+    with pytest.warns(PendingDeprecationWarning,
+                      match='Setting the API key during init will be removed in the future'):
+        client = Client(api_key='test_123')
+    assert client.api_key == 'test_123'
+
 
 def test_client_broken_cert_bundle(monkeypatch):
     """

pipenv sync --dev
parse_log_pytest
Pipfile
pytest pytest-cov responses mock pycodestyle isort
apt-get update apt-get install -y gcc pip install pipenv
3.9
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
certifi==2025.1.31
charset-normalizer==3.4.1
coverage==7.8.0
distlib==0.3.9
exceptiongroup==1.2.2
filelock==3.18.0
idna==3.10
iniconfig==2.1.0
isort==6.0.1
mock==5.2.0
packaging==24.2
pipenv==2024.4.1
pipfile==0.0.2
platformdirs==4.3.7
pluggy==1.5.0
pycodestyle==2.13.0
pytest==8.3.5
pytest-cov==6.0.0
PyYAML==6.0.2
requests==2.32.3
responses==0.25.7
toml @ file:///tmp/build/80754af9/toml_1616166611790/work
tomli==2.2.1
urllib3==2.3.0
virtualenv==20.29.3

name: mollie-api-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
  - pipfile=0.0.2=py_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
  - toml=0.10.2=pyhd3eb1b0_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - certifi==2025.1.31
      - charset-normalizer==3.4.1
      - coverage==7.8.0
      - distlib==0.3.9
      - exceptiongroup==1.2.2
      - filelock==3.18.0
      - idna==3.10
      - iniconfig==2.1.0
      - isort==6.0.1
      - mock==5.2.0
      - packaging==24.2
      - pipenv==2024.4.1
      - platformdirs==4.3.7
      - pluggy==1.5.0
      - pycodestyle==2.13.0
      - pytest==8.3.5
      - pytest-cov==6.0.0
      - pyyaml==6.0.2
      - requests==2.32.3
      - responses==0.25.7
      - tomli==2.2.1
      - urllib3==2.3.0
      - virtualenv==20.29.3
prefix: /opt/conda/envs/mollie-api-python

tests/test_client.py::test_client_api_key tests/test_client.py::test_client_invalid_api_key tests/test_client.py::test_client_api_key_during_init_deprecated
tests/test_client.py::test_client_broken_cert_bundle
tests/test_client.py::test_generate_querystring[params0-None] tests/test_client.py::test_generate_querystring[params1-locale=nl_NL] tests/test_client.py::test_generate_querystring[params2-hoeba=kek&locale=nl_NL] tests/test_client.py::test_generate_querystring[params3-amount%5Bcurrency%5D=USD&amount%5Bvalue%5D=100.00] tests/test_client.py::test_client_querystring tests/test_client.py::test_client_no_api_key tests/test_client.py::test_client_generic_request_error tests/test_client.py::test_client_invalid_create_data tests/test_client.py::test_client_invalid_update_data tests/test_client.py::test_client_get_invalid_id[customers-Invalid tests/test_client.py::test_client_get_invalid_id[payments-Invalid tests/test_client.py::test_client_get_invalid_id[refunds-Invalid tests/test_client.py::test_client_get_invalid_id[orders-Invalid tests/test_client.py::test_client_get_customer_related_invalid_id[customer_mandates-Invalid tests/test_client.py::test_client_get_customer_related_invalid_id[customer_payments-Invalid tests/test_client.py::test_client_get_customer_related_invalid_id[customer_subscriptions-Invalid tests/test_client.py::test_client_get_payment_related_invalid_id[payment_chargebacks-Invalid tests/test_client.py::test_client_get_payment_related_invalid_id[payment_refunds-Invalid tests/test_client.py::test_client_invalid_json_response tests/test_client.py::test_client_get_received_error_response[error_unauthorized-401-UnauthorizedError-Missing tests/test_client.py::test_client_get_received_error_response[customer_doesnotexist-404-NotFoundError-No tests/test_client.py::test_client_get_received_error_response[payment_rejected-422-UnprocessableEntityError-The tests/test_client.py::test_client_get_received_error_response[error_teapot-418-ResponseError-Just tests/test_client.py::test_client_delete_received_error_response[error_unauthorized-401-UnauthorizedError-Missing tests/test_client.py::test_client_delete_received_error_response[customer_doesnotexist-404-NotFoundError-No tests/test_client.py::test_client_delete_received_error_response[error_teapot-418-ResponseError-Just tests/test_client.py::test_client_response_404_but_no_payload tests/test_client.py::test_client_error_including_field_response tests/test_client.py::test_client_unicode_error_py3 tests/test_client.py::test_client_request_timeout tests/test_client.py::test_client_request_timed_out tests/test_client.py::test_client_data_consistency_error
mollie/api/client.py
mollie/api/client.py