diff --git a/src/friendlypins/api.py b/src/friendlypins/api.py
index 01b3d4a..ee3b00a 100644
--- a/src/friendlypins/api.py
+++ b/src/friendlypins/api.py
@@ -37,6 +37,7 @@ class API(object):  # pylint: disable=too-few-public-methods
         else:
             temp_url = "{0}/me".format(self._root_url)
         temp_url += "?access_token={0}".format(self._token)
+        temp_url += "&fields=id,username,first_name,last_name,bio,created_at,counts,image"
         response = requests.get(temp_url)
         response.raise_for_status()
 
diff --git a/src/friendlypins/board.py b/src/friendlypins/board.py
index 3a19248..1fea44c 100644
--- a/src/friendlypins/board.py
+++ b/src/friendlypins/board.py
@@ -58,6 +58,14 @@ class Board(object):
         """
         return self._data['url']
 
+    @property
+    def num_pins(self):
+        """Gets the total number of pins linked to this board
+
+        :rtype: :class:`int`
+        """
+        return int(self._data['counts']['pins'])
+
     @property
     def all_pins(self):
         """Gets a list of all pins from this board
diff --git a/src/friendlypins/user.py b/src/friendlypins/user.py
index 78268e5..3121d1d 100644
--- a/src/friendlypins/user.py
+++ b/src/friendlypins/user.py
@@ -79,6 +79,22 @@ class User(object):
         """
         return self._data['url']
 
+    @property
+    def num_pins(self):
+        """Gets the total number of pins owned by this user
+
+        :rtype: :class:`int`
+        """
+        return int(self._data['counts']['pins'])
+
+    @property
+    def num_boards(self):
+        """Gets the total number of boards owned by this user
+
+        :rtype: :class:`int`
+        """
+        return int(self._data['counts']['boards'])
+
     @property
     def boards(self):
         """Gets a list of boards owned by this user
@@ -89,6 +105,7 @@ class User(object):
 
         temp_url = '{0}/me/boards/'.format(self._root_url)
         temp_url += "?access_token={0}".format(self._token)
+        temp_url += "&fields=id,name,url,description,creator,created_at,counts,image"
         response = requests.get(temp_url)
 
         header = Headers(response.headers)

Add accessor to get number of pins on a board
It appears as though there is some optional metadata that can be read from a board API endpoint, one of which contains the total number of pins on that board. We should enhance the Board class to pull down that extra metadata upon instantiation, and provide an accessor that reads the number of pins on the board.

This has the added benefit of not having to read in all the pins contained in the board en-mass to calculate this simple statistic.
diff --git a/unit_tests/test_board.py b/unit_tests/test_board.py
index fe44dc9..e2eafe1 100644
--- a/unit_tests/test_board.py
+++ b/unit_tests/test_board.py
@@ -6,16 +6,21 @@ def test_board_properties():
     expected_id = 1234
     expected_name = "MyBoard"
     expected_url = "https://www.pinterest.ca/MyName/MyBoard/"
+    expected_pin_count = 42
     sample_data = {
         "id": str(expected_id),
         "name": expected_name,
-        "url": expected_url
+        "url": expected_url,
+        "counts": {
+            "pins": str(expected_pin_count)
+        }
     }
 
     obj = Board(sample_data, 'http://pinterest_url', '1234abcd')
     assert obj.unique_id == expected_id
     assert obj.name == expected_name
     assert obj.url == expected_url
+    assert obj.num_pins == expected_pin_count
 
 def test_get_all_pins():
     data = {
diff --git a/unit_tests/test_user.py b/unit_tests/test_user.py
index 19e7a8a..5850b5b 100644
--- a/unit_tests/test_user.py
+++ b/unit_tests/test_user.py
@@ -2,6 +2,33 @@ import pytest
 import mock
 from friendlypins.user import User
 
+def test_user_properties():
+    expected_url = 'https://www.pinterest.com/MyUserName/'
+    expected_firstname = "John"
+    expected_lastname = "Doe"
+    expected_id = 12345678
+    expected_board_count = 32
+    expected_pin_count = 512
+    data = {
+        'url': expected_url,
+        'first_name': expected_firstname,
+        'last_name': expected_lastname,
+        'id': str(expected_id),
+        'counts': {
+            'boards': str(expected_board_count),
+            'pins': str(expected_pin_count)
+        }
+    }
+
+    obj = User(data, "https://pinterest_url/v1", "1234abcd")
+    assert expected_url == obj.url
+    assert expected_firstname == obj.first_name
+    assert expected_lastname == obj.last_name
+    assert expected_id == obj.unique_id
+    assert expected_board_count == obj.num_boards
+    assert expected_pin_count == obj.num_pins
+
+
 def test_get_boards():
     data = {
         "first_name": "John",

pip install -e .[dev]
parse_log_pytest
pytest
pytest
3.6
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
alabaster==0.7.13
astroid==2.6.6
attrs @ file:///opt/conda/conda-bld/attrs_1642510447205/work
Babel==2.11.0
bleach==4.1.0
cachetools==4.2.4
certifi==2021.5.30
chardet==5.0.0
charset-normalizer==2.0.12
colorama==0.4.5
coverage==6.2
dateutils==0.6.12
distlib==0.3.9
docutils==0.18.1
filelock==3.4.1
-e git+https://github.com/TheFriendlyCoder/friendlypins.git@0517a65d8d98dd15c1de3eca4d804d9b21744aeb#egg=friendlypins
idna==3.10
imagesize==1.4.1
importlib-metadata==4.8.3
importlib-resources==5.4.0
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
isort==5.10.1
Jinja2==3.0.3
lazy-object-proxy==1.7.1
mando==0.7.1
MarkupSafe==2.0.1
mccabe==0.6.1
mock==5.2.0
more-itertools @ file:///tmp/build/80754af9/more-itertools_1637733554872/work
packaging @ file:///tmp/build/80754af9/packaging_1637314298585/work
pkginfo==1.10.0
platformdirs==2.4.0
pluggy @ file:///tmp/build/80754af9/pluggy_1615976315926/work
py @ file:///opt/conda/conda-bld/py_1644396412707/work
Pygments==2.14.0
pylint==3.0.0a4
pyparsing @ file:///tmp/build/80754af9/pyparsing_1635766073266/work
pytest==6.2.4
pytest-cov==4.0.0
python-dateutil==2.9.0.post0
pytz==2025.2
radon==6.0.1
readme-renderer==34.0
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
toml @ file:///tmp/build/80754af9/toml_1616166611790/work
tomli==1.2.3
tox==4.0.0a9
tqdm==4.64.1
twine==1.15.0
typed-ast==1.4.3
typing_extensions @ file:///opt/conda/conda-bld/typing_extensions_1647553014482/work
urllib3==1.26.20
virtualenv==20.17.1
webencodings==0.5.1
wrapt==1.12.1
zipp @ file:///tmp/build/80754af9/zipp_1633618647012/work

name: friendlypins
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
  - attrs=21.4.0=pyhd3eb1b0_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - importlib_metadata=4.8.1=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_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
  - more-itertools=8.12.0=pyhd3eb1b0_0
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=21.3=pyhd3eb1b0_0
  - pip=21.2.2=py36h06a4308_0
  - pluggy=0.13.1=py36h06a4308_0
  - py=1.11.0=pyhd3eb1b0_0
  - pyparsing=3.0.4=pyhd3eb1b0_0
  - pytest=6.2.4=py36h06a4308_2
  - 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
  - toml=0.10.2=pyhd3eb1b0_0
  - typing_extensions=4.1.1=pyh06a4308_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.6.0=pyhd3eb1b0_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - alabaster==0.7.13
      - astroid==2.6.6
      - babel==2.11.0
      - bleach==4.1.0
      - cachetools==4.2.4
      - chardet==5.0.0
      - charset-normalizer==2.0.12
      - colorama==0.4.5
      - coverage==6.2
      - dateutils==0.6.12
      - distlib==0.3.9
      - docutils==0.18.1
      - filelock==3.4.1
      - idna==3.10
      - imagesize==1.4.1
      - importlib-metadata==4.8.3
      - importlib-resources==5.4.0
      - isort==5.10.1
      - jinja2==3.0.3
      - lazy-object-proxy==1.7.1
      - mando==0.7.1
      - markupsafe==2.0.1
      - mccabe==0.6.1
      - mock==5.2.0
      - pkginfo==1.10.0
      - platformdirs==2.4.0
      - pygments==2.14.0
      - pylint==3.0.0a4
      - pytest-cov==4.0.0
      - python-dateutil==2.9.0.post0
      - pytz==2025.2
      - radon==6.0.1
      - readme-renderer==34.0
      - 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
      - tomli==1.2.3
      - tox==4.0.0a9
      - tqdm==4.64.1
      - twine==1.15.0
      - typed-ast==1.4.3
      - urllib3==1.26.20
      - virtualenv==20.17.1
      - webencodings==0.5.1
      - wrapt==1.12.1
prefix: /opt/conda/envs/friendlypins

unit_tests/test_board.py::test_board_properties unit_tests/test_user.py::test_user_properties
unit_tests/test_board.py::test_get_all_pins unit_tests/test_user.py::test_get_boards
src/friendlypins/board.py src/friendlypins/user.py src/friendlypins/api.py
src/friendlypins/board.py src/friendlypins/user.py src/friendlypins/api.py