diff --git a/setup.py b/setup.py
index c322c9e..7827c73 100755
--- a/setup.py
+++ b/setup.py
@@ -7,20 +7,18 @@ from setuptools import setup, find_packages
 # project specific parameters
 PROJECT_NAME = 'friendlypins'
 PROJECT_DEPENDENCIES = [
-    #'requests[security]>=2.0.1',
-    'requests',
-    'six',
-    'tqdm']
+    'requests<3.0.0,>=2.0.0',
+    'six<2.0.0,>=1.0.0',]
 PROJECT_DEV_DEPENDENCIES = [
-    'wheel',
-    'twine',
-    'pytest',
-    'pytest-cov',
-    'mock',
-    'radon',
-    'pylint',
-    'sphinx>=1.2.3',
-    'tox']
+    'wheel<1.0.0',
+    'twine<2.0.0',
+    'pytest>=3.5.0<4.0.0',
+    'pytest-cov>=2.5.0<3.0.0',
+    'mock>=2.0.0<3.0.0',
+    'radon>=2.2.0<3.0.0',
+    'pylint>=1.8.0<2.0.0',
+    'sphinx>=1.2.3<2.0.0',
+    'tox>=3.0.0<4.0.0']
 PROJECT_DESCRIPTION = 'Python wrapper around the Pinterest developer APIs'
 PROJECT_KEYWORDS = 'pinterest api wrapper library'
 # -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
diff --git a/src/friendlypins/api.py b/src/friendlypins/api.py
index 8b28950..c9540e1 100644
--- a/src/friendlypins/api.py
+++ b/src/friendlypins/api.py
@@ -1,10 +1,25 @@
 """Primary entry point for the Friendly Pinterest library"""
 from __future__ import print_function
+import logging
+import requests
+from friendlypins.user import User
 
 class API(object):  # pylint: disable=too-few-public-methods
     """High level abstraction for the core Pinterest API"""
-    def __init__(self):
-        self.name = "hello"
+
+    # URL of the root namespace for the Pinterest API
+    _root_url = 'https://api.pinterest.com/v1'
+
+    def __init__(self, personal_access_token):
+        """Constructor
+
+        :param str personal_access_token:
+            API authentication token used for secure access to a users'
+            Pinterest data
+        """
+
+        self._log = logging.getLogger(__name__)
+        self._token = personal_access_token
 
     def get_user(self, username=None):
         """Gets all primitives associated with a particular Pinterst user
@@ -15,11 +30,18 @@ class API(object):  # pylint: disable=too-few-public-methods
         returns: Pinterest user with the given name
         rtype: :class:`friendly_pinterest.user.User`
         """
-        print(self.name)
         if username:
-            return None
-        return None
+            raise NotImplementedError(
+                "Querying arbitrary Pinerest users is not yet supported.")
+        else:
+            temp_url = "{0}/me".format(self._root_url)
+        temp_url += "?access_token={0}".format(self._token)
+        response = requests.get(temp_url)
+        response.raise_for_status()
+        assert 'data' in response.json()
+        return User(response.json()['data'])
 
 
+# pylint: disable-all
 if __name__ == "__main__":
     pass
diff --git a/src/friendlypins/user.py b/src/friendlypins/user.py
new file mode 100644
index 0000000..02dd4e7
--- /dev/null
+++ b/src/friendlypins/user.py
@@ -0,0 +1,44 @@
+"""Interfaces for interacting with Pinterest users"""
+import logging
+
+class User(object):
+    """Abstraction around a Pinterest user and their associated data"""
+
+    def __init__(self, data):
+        """Constructor
+
+        :param dict data: JSON data parsed from the API
+        """
+        self._log = logging.getLogger(__name__)
+        self._data = data
+
+    @property
+    def unique_id(self):
+        """Gets the internal unique ID associated with the user
+        :rtype: :class:`str`
+        """
+        return self._data['id']
+
+    @property
+    def first_name(self):
+        """Gets the first name of the user
+        :rtype: :class:`str`
+        """
+        return self._data['first_name']
+
+    @property
+    def last_name(self):
+        """Gets the last name of the user
+        :rtype: :class:`str`
+        """
+        return self._data['last_name']
+
+    @property
+    def url(self):
+        """Gets the URL of the users profile
+        :rtype: :class:`str`
+        """
+        return self._data['url']
+
+if __name__ == "__main__":
+    pass

Add support for basic connectivity
Implement basic init method for API class, allowing connections to be made to a Pinterest account by specifying a user's API token, and perform a simple query to get information about the user who's token we're authenticating with.
diff --git a/unit_tests/test_api.py b/unit_tests/test_api.py
index 2526048..67ada2e 100644
--- a/unit_tests/test_api.py
+++ b/unit_tests/test_api.py
@@ -1,12 +1,32 @@
 import pytest
+import mock
 from friendlypins.api import API
 
-def test_constructor():
-    obj = API()
-
 def test_get_user():
-    obj = API()
-    obj.get_user()
+    obj = API('abcd1234')
+    expected_url = 'https://www.pinterest.com/MyUserName/'
+    expected_firstname = "John"
+    expected_lastname = "Doe"
+    expected_id = "12345678"
+    expected_data = {
+        'data': {
+            'url': expected_url,
+            'first_name': expected_firstname,
+            'last_name': expected_lastname,
+            'id': expected_id
+        }
+    }
+    with mock.patch("friendlypins.api.requests") as mock_requests:
+        mock_response = mock.MagicMock()
+        mock_response.json.return_value = expected_data
+        mock_requests.get.return_value = mock_response
+        result = obj.get_user()
+
+        assert expected_url == result.url
+        assert expected_firstname == result.first_name
+        assert expected_lastname == result.last_name
+        assert expected_id == result.unique_id
+
 
 if __name__ == "__main__":
     pytest.main([__file__, "-v", "-s"])

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.11.7
attrs @ file:///opt/conda/conda-bld/attrs_1642510447205/work
Babel==2.11.0
bleach==4.1.0
certifi==2021.5.30
cffi==1.15.1
charset-normalizer==2.0.12
colorama==0.4.5
coverage==6.2
cryptography==40.0.2
dill==0.3.4
distlib==0.3.9
docutils==0.18.1
filelock==3.4.1
-e git+https://github.com/TheFriendlyCoder/friendlypins.git@3ebf4892111351fc82c38a2b1a9f81ab099294a9#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
jeepney==0.7.1
Jinja2==3.0.3
keyring==23.4.1
lazy-object-proxy==1.7.1
mando==0.7.1
MarkupSafe==2.0.1
mccabe==0.7.0
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
pycparser==2.21
Pygments==2.14.0
pylint==2.13.9
pyparsing @ file:///tmp/build/80754af9/pyparsing_1635766073266/work
pytest==6.2.4
pytest-cov==4.0.0
pytz==2025.2
radon==6.0.1
readme-renderer==34.0
requests==2.27.1
requests-toolbelt==1.0.0
rfc3986==1.5.0
SecretStorage==3.3.3
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==3.28.0
tqdm==4.64.1
twine==3.8.0
typed-ast==1.5.5
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.16.0
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.11.7
      - babel==2.11.0
      - bleach==4.1.0
      - cffi==1.15.1
      - charset-normalizer==2.0.12
      - colorama==0.4.5
      - coverage==6.2
      - cryptography==40.0.2
      - dill==0.3.4
      - 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
      - jeepney==0.7.1
      - jinja2==3.0.3
      - keyring==23.4.1
      - lazy-object-proxy==1.7.1
      - mando==0.7.1
      - markupsafe==2.0.1
      - mccabe==0.7.0
      - mock==5.2.0
      - pkginfo==1.10.0
      - platformdirs==2.4.0
      - pycparser==2.21
      - pygments==2.14.0
      - pylint==2.13.9
      - pytest-cov==4.0.0
      - pytz==2025.2
      - radon==6.0.1
      - readme-renderer==34.0
      - requests==2.27.1
      - requests-toolbelt==1.0.0
      - rfc3986==1.5.0
      - secretstorage==3.3.3
      - 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==3.28.0
      - tqdm==4.64.1
      - twine==3.8.0
      - typed-ast==1.5.5
      - urllib3==1.26.20
      - virtualenv==20.17.1
      - webencodings==0.5.1
      - wrapt==1.16.0
prefix: /opt/conda/envs/friendlypins

unit_tests/test_api.py::test_get_user
setup.py src/friendlypins/user.py src/friendlypins/api.py
setup.py src/friendlypins/user.py src/friendlypins/api.py