diff --git a/HISTORY.rst b/HISTORY.rst
index b567bfa..9af5bb4 100644
--- a/HISTORY.rst
+++ b/HISTORY.rst
@@ -6,7 +6,17 @@ Release History
 Upcoming
 ++++++++
 
-1.3.2
+1.3.3 (2015-12-22)
+++++++++++++++++++
+
+- Added a new class, ``DeveloperTokenClient`` that makes it easy to get started using the SDK with a Box developer
+  token. It uses another new class, ``DeveloperTokenAuth`` for auth.
+
+**Bugfixes**
+
+- Added limit, offset, and filter_term parameters to ``client.users()`` to match up with the Box API.
+
+1.3.2 (2015-11-16)
 ++++++++++++++++++
 
 - Fix ``boxsdk.util.log.setup_logging()`` on Python 3.
diff --git a/boxsdk/client.py b/boxsdk/client.py
index 8a04d76..f84d9a3 100644
--- a/boxsdk/client.py
+++ b/boxsdk/client.py
@@ -100,21 +100,48 @@ def group(self, group_id):
         """
         return Group(session=self._session, object_id=group_id)
 
-    def users(self):
+    def users(self, limit=None, offset=0, filter_term=None):
         """
         Get a list of all users for the Enterprise along with their user_id, public_name, and login.
 
+        :param limit:
+            The maximum number of users to return. If not specified, the Box API will determine an appropriate limit.
+        :type limit:
+            `int` or None
+        :param offset:
+            The user index at which to start the response.
+        :type offset:
+            `int`
+        :param filter_term:
+            Filters the results to only users starting with the filter_term in either the name or the login.
+        :type filter_term:
+            `unicode` or None
         :return:
             The list of all users in the enterprise.
         :rtype:
             `list` of :class:`User`
         """
         url = '{0}/users'.format(API.BASE_API_URL)
-        box_response = self._session.get(url)
+        params = dict(offset=offset)
+        if limit is not None:
+            params['limit'] = limit
+        if filter_term is not None:
+            params['filter_term'] = filter_term
+        box_response = self._session.get(url, params=params)
         response = box_response.json()
         return [User(self._session, item['id'], item) for item in response['entries']]
 
-    def search(self, query, limit, offset, ancestor_folders=None, file_extensions=None, metadata_filters=None, result_type=None, content_types=None):
+    def search(
+            self,
+            query,
+            limit,
+            offset,
+            ancestor_folders=None,
+            file_extensions=None,
+            metadata_filters=None,
+            result_type=None,
+            content_types=None
+    ):
         """
         Search Box for items matching the given query.
 
@@ -155,14 +182,16 @@ def search(self, query, limit, offset, ancestor_folders=None, file_extensions=No
         :rtype:
             `list` of :class:`Item`
         """
-        return Search(self._session).search(query=query,
-                                            limit=limit,
-                                            offset=offset,
-                                            ancestor_folders=ancestor_folders,
-                                            file_extensions=file_extensions,
-                                            metadata_filters=metadata_filters,
-                                            result_type=result_type,
-                                            content_types=content_types)
+        return Search(self._session).search(
+            query=query,
+            limit=limit,
+            offset=offset,
+            ancestor_folders=ancestor_folders,
+            file_extensions=file_extensions,
+            metadata_filters=metadata_filters,
+            result_type=result_type,
+            content_types=content_types,
+        )
 
     def events(self):
         """
@@ -333,5 +362,8 @@ def with_shared_link(self, shared_link, shared_link_password):
 
 
 class DeveloperTokenClient(Client):
+    """
+    Box client subclass which authorizes with a developer token.
+    """
     def __init__(self, oauth=None, network_layer=None, session=None):
         super(DeveloperTokenClient, self).__init__(oauth or DeveloperTokenAuth(), network_layer, session)
diff --git a/setup.py b/setup.py
index 2d16b34..59885f9 100644
--- a/setup.py
+++ b/setup.py
@@ -61,7 +61,7 @@ def main():
         install_requires.append('ordereddict>=1.1')
     setup(
         name='boxsdk',
-        version='1.3.2',
+        version='1.3.3',
         description='Official Box Python SDK',
         long_description=open(join(base_dir, 'README.rst')).read(),
         author='Box',
@@ -69,7 +69,7 @@ def main():
         url='http://opensource.box.com',
         packages=find_packages(exclude=['demo', 'docs', 'test']),
         install_requires=install_requires,
-        extras_require={'jwt': jwt_requires, 'redis': redis_requires},
+        extras_require={'jwt': jwt_requires, 'redis': redis_requires, 'all': jwt_requires + redis_requires},
         tests_require=['pytest', 'pytest-xdist', 'mock', 'sqlalchemy', 'bottle', 'jsonpatch'],
         cmdclass={'test': PyTest},
         classifiers=CLASSIFIERS,

The get all users in enterprise API needs to be pageable
Right now it just return a list of :class:`User`
diff --git a/test/unit/test_client.py b/test/unit/test_client.py
index ef6ba70..81f2341 100644
--- a/test/unit/test_client.py
+++ b/test/unit/test_client.py
@@ -159,10 +159,40 @@ def test_factory_returns_the_correct_object(mock_client, test_class, factory_met
     assert obj.object_id == fake_id
 
 
-def test_users_return_the_correct_user_objects(mock_client, mock_box_session, users_response, user_id_1, user_id_2):
+@pytest.fixture(scope='module', params=(None, 'user1'))
+def users_filter_term(request):
+    return request.param
+
+
+@pytest.fixture(scope='module', params=(0, 10))
+def users_offset(request):
+    return request.param
+
+
+@pytest.fixture(scope='module', params=(0, 10))
+def users_limit(request):
+    return request.param
+
+
+def test_users_return_the_correct_user_objects(
+        mock_client,
+        mock_box_session,
+        users_response,
+        user_id_1,
+        user_id_2,
+        users_filter_term,
+        users_offset,
+        users_limit,
+):
     # pylint:disable=redefined-outer-name
     mock_box_session.get.return_value = users_response
-    users = mock_client.users()
+    users = mock_client.users(users_limit, users_offset, users_filter_term)
+    expected_params = {'offset': users_offset}
+    if users_limit is not None:
+        expected_params['limit'] = users_limit
+    if users_filter_term is not None:
+        expected_params['filter_term'] = users_filter_term
+    mock_box_session.get.assert_called_once_with('{0}/users'.format(API.BASE_API_URL), params=expected_params)
     assert users[0].object_id == user_id_1
     assert users[1].object_id == user_id_2
 

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest pytest-xdist pytest-mock pytest-asyncio
apt-get update apt-get install -y gcc
3.5
requirements.txt requirements-dev.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
alabaster==0.7.13
astroid==2.11.7
async-timeout==4.0.2
attrs==22.2.0
Babel==2.11.0
bottle==0.13.2
-e git+https://github.com/box/box-python-sdk.git@f365c177f70ce6cfc2d53528ed649cdac20bb43d#egg=boxsdk
certifi==2021.5.30
cffi==1.15.1
charset-normalizer==2.0.12
coverage==6.2
cryptography==40.0.2
dill==0.3.4
distlib==0.3.9
docutils==0.18.1
execnet==1.9.0
filelock==3.4.1
greenlet==2.0.2
idna==3.10
imagesize==1.4.1
importlib-metadata==4.8.3
importlib-resources==5.4.0
iniconfig==1.1.1
isort==5.10.1
Jinja2==3.0.3
jsonpatch==1.32
jsonpointer==2.3
lazy-object-proxy==1.7.1
MarkupSafe==2.0.1
mccabe==0.7.0
mock==1.0.1
packaging==21.3
pep8==1.7.1
platformdirs==2.4.0
pluggy==1.0.0
py==1.11.0
pycparser==2.21
Pygments==2.14.0
PyJWT==2.4.0
pylint==2.13.9
pyparsing==3.1.4
pytest==7.0.1
pytest-asyncio==0.16.0
pytest-cov==2.5.1
pytest-mock==3.6.1
pytest-xdist==1.17.1
pytz==2025.2
redis==4.3.6
requests==2.27.1
requests-toolbelt==1.0.0
six==1.17.0
snowballstemmer==2.2.0
Sphinx==5.3.0
sphinxcontrib-applehelp==1.0.2
sphinxcontrib-devhelp==1.0.2
sphinxcontrib-htmlhelp==2.0.0
sphinxcontrib-jsmath==1.0.1
sphinxcontrib-qthelp==1.0.3
sphinxcontrib-serializinghtml==1.1.5
SQLAlchemy==1.4.54
swebench-matterhorn @ file:///swebench_matterhorn
toml==0.10.2
tomli==1.2.3
tox==3.28.0
typed-ast==1.5.5
typing_extensions==4.1.1
urllib3==1.26.20
virtualenv==20.17.1
wrapt==1.16.0
zipp==3.6.0

name: box-python-sdk
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=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - 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=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - alabaster==0.7.13
      - astroid==2.11.7
      - async-timeout==4.0.2
      - attrs==22.2.0
      - babel==2.11.0
      - bottle==0.13.2
      - cffi==1.15.1
      - charset-normalizer==2.0.12
      - coverage==6.2
      - cryptography==40.0.2
      - dill==0.3.4
      - distlib==0.3.9
      - docutils==0.18.1
      - execnet==1.9.0
      - filelock==3.4.1
      - greenlet==2.0.2
      - idna==3.10
      - imagesize==1.4.1
      - importlib-metadata==4.8.3
      - importlib-resources==5.4.0
      - iniconfig==1.1.1
      - isort==5.10.1
      - jinja2==3.0.3
      - jsonpatch==1.32
      - jsonpointer==2.3
      - lazy-object-proxy==1.7.1
      - markupsafe==2.0.1
      - mccabe==0.7.0
      - mock==1.0.1
      - packaging==21.3
      - pep8==1.7.1
      - platformdirs==2.4.0
      - pluggy==1.0.0
      - py==1.11.0
      - pycparser==2.21
      - pygments==2.14.0
      - pyjwt==2.4.0
      - pylint==2.13.9
      - pyparsing==3.1.4
      - pytest==7.0.1
      - pytest-asyncio==0.16.0
      - pytest-cov==2.5.1
      - pytest-mock==3.6.1
      - pytest-xdist==1.17.1
      - pytz==2025.2
      - redis==4.3.6
      - requests==2.27.1
      - requests-toolbelt==1.0.0
      - six==1.17.0
      - snowballstemmer==2.2.0
      - sphinx==5.3.0
      - sphinxcontrib-applehelp==1.0.2
      - sphinxcontrib-devhelp==1.0.2
      - sphinxcontrib-htmlhelp==2.0.0
      - sphinxcontrib-jsmath==1.0.1
      - sphinxcontrib-qthelp==1.0.3
      - sphinxcontrib-serializinghtml==1.1.5
      - sqlalchemy==1.4.54
      - swebench-matterhorn==0.0.0
      - toml==0.10.2
      - tomli==1.2.3
      - tox==3.28.0
      - typed-ast==1.5.5
      - typing-extensions==4.1.1
      - urllib3==1.26.20
      - virtualenv==20.17.1
      - wrapt==1.16.0
      - zipp==3.6.0
prefix: /opt/conda/envs/box-python-sdk

test/unit/test_client.py::test_users_return_the_correct_user_objects[None-0-0] test/unit/test_client.py::test_users_return_the_correct_user_objects[None-10-0] test/unit/test_client.py::test_users_return_the_correct_user_objects[None-10-10] test/unit/test_client.py::test_users_return_the_correct_user_objects[user1-10-10] test/unit/test_client.py::test_users_return_the_correct_user_objects[user1-0-10] test/unit/test_client.py::test_users_return_the_correct_user_objects[user1-10-0] test/unit/test_client.py::test_users_return_the_correct_user_objects[user1-0-0] test/unit/test_client.py::test_users_return_the_correct_user_objects[None-0-10]
test/unit/test_client.py::test_factory_returns_the_correct_object[Folder-folder] test/unit/test_client.py::test_factory_returns_the_correct_object[File-file] test/unit/test_client.py::test_factory_returns_the_correct_object[User-user] test/unit/test_client.py::test_factory_returns_the_correct_object[Group-group] test/unit/test_client.py::test_factory_returns_the_correct_object[GroupMembership-group_membership] test/unit/test_client.py::test_search_instantiates_search_and_calls_search test/unit/test_client.py::test_events_returns_event_object test/unit/test_client.py::test_groups_return_the_correct_group_objects test/unit/test_client.py::test_create_group_returns_the_correct_group_object test/unit/test_client.py::test_get_shared_item_returns_the_correct_item[file-None] test/unit/test_client.py::test_get_shared_item_returns_the_correct_item[file-p4ssw0rd] test/unit/test_client.py::test_get_shared_item_returns_the_correct_item[folder-None] test/unit/test_client.py::test_get_shared_item_returns_the_correct_item[folder-p4ssw0rd] test/unit/test_client.py::test_make_request_passes_request_on_to_session[get] test/unit/test_client.py::test_make_request_passes_request_on_to_session[post] test/unit/test_client.py::test_make_request_passes_request_on_to_session[put] test/unit/test_client.py::test_make_request_passes_request_on_to_session[delete] test/unit/test_client.py::test_make_request_passes_request_on_to_session[options] test/unit/test_client.py::test_create_app_user_returns_the_correct_user_object test/unit/test_client.py::test_create_enterprise_user_returns_the_correct_user_object
HISTORY.rst boxsdk/client.py setup.py
HISTORY.rst boxsdk/client.py setup.py