Skip to main content

Official Dwolla V2 API client

Project description


.. figure::
:alt: Build Status

Build Status
Dwolla V2 Python client.

`API Documentation <>`__


``dwollav2`` is available on
`PyPi <>`__, and therefore can be
installed automagically via
`pip <>`__.


pip install dwollav2


Basic usage

Create a client using your application's consumer key and secret found
on the applications page
(`Sandbox <>`__,
`Production <>`__).

.. code:: python

client = dwollav2.Client(id = os.environ['DWOLLA_APP_KEY'], secret = os.environ['DWOLLA_APP_SECRET'])

Using the sandbox environment (optional)

.. code:: python

client = dwollav2.Client(
key = os.environ['DWOLLA_APP_KEY'],
secret = os.environ['DWOLLA_APP_SECRET'],
environment = 'sandbox'

``environment`` defaults to ``'production'``.

Configure an ``on_grant`` callback (optional)

An ``on_grant`` callback is useful for storing new tokens when they are
granted. The ``on_grant`` callback is called with the ``Token`` that was
just granted by the server.

.. code:: python

client = dwollav2.Client(
key = os.environ['DWOLLA_APP_KEY'],
secret = os.environ['DWOLLA_APP_SECRET'],
on_grant = lambda t: save(t)

It is highly recommended that you encrypt any token data you store.


Tokens can be used to make requests to the Dwolla V2 API.

Application tokens

Application access tokens are used to authenticate against the API on
behalf of a consumer application. Application tokens can be used to
access resources in the API that either belong to the application itself
(``webhooks``, ``events``, ``webhook-subscriptions``) or the partner
Account that owns the consumer application (``accounts``, ``customers``,
``funding-sources``, etc.). Application tokens are obtained by using the
```client_credentials`` <>`__
OAuth grant type:

.. code:: python

application_token = client.Auth.client()

*Application tokens do not include a ``refresh_token``. When an
application token expires, generate a new one using

Initializing pre-existing tokens:

``Token``\ s can be initialized with the following attributes:

.. code:: python

client.Token(access_token = '...',
expires_in = 123)


``Token``\ s can make requests using the ``#get``, ``#post``, and
``#delete`` methods.

.. code:: python

token.get('resource', foo = 'bar')

# POST {"foo":"bar"}'resource', foo = 'bar')

# POST multipart/form-data foo=...'resource', foo = ('mclovin.jpg', open('mclovin.jpg', 'rb'), 'image/jpeg'))

# PUT {"foo":"bar"}
token.put('resource', foo = 'bar')


Setting headers

To set additional headers on a request you can pass a ``dict`` of
headers as the 3rd argument.

For example:

.. code:: python'customers', { 'firstName': 'John', 'lastName': 'Doe', 'email': '' },
{ 'Idempotency-Key': 'a52fcf63-0730-41c3-96e8-7147b5d1fb01' })


Requests return a ``Response``.

.. code:: python

res = token.get('/')

# => 200

# => {'server'=>'cloudflare-nginx', 'date'=>'Mon, 28 Mar 2016 15:30:23 GMT', 'content-type'=>'application/vnd.dwolla.v1.hal+json; charset=UTF-8', 'content-length'=>'150', 'connection'=>'close', 'set-cookie'=>'__cfduid=d9dcd0f586c166d36cbd45b992bdaa11b1459179023; expires=Tue, 28-Mar-17 15:30:23 GMT; path=/;; HttpOnly', 'x-request-id'=>'69a4e612-5dae-4c52-a6a0-2f921e34a88a', 'cf-ray'=>'28ac1f81875941e3-MSP'}

# => ''


If the server returns an error, a ``dwollav2.Error`` (or one of its
subclasses) will be raised. ``dwollav2.Error``\ s are similar to
``Response``\ s.

.. code:: python

except dwollav2.NotFoundError:
# => 404

# => {"server"=>"cloudflare-nginx", "date"=>"Mon, 28 Mar 2016 15:35:32 GMT", "content-type"=>"application/vnd.dwolla.v1.hal+json; profile=\"\"; charset=UTF-8", "content-length"=>"69", "connection"=>"close", "set-cookie"=>"__cfduid=da1478bfdf3e56275cd8a6a741866ccce1459179332; expires=Tue, 28-Mar-17 15:35:32 GMT; path=/;; HttpOnly", "access-control-allow-origin"=>"*", "x-request-id"=>"667fca74-b53d-43db-bddd-50426a011881", "cf-ray"=>"28ac270abca64207-MSP"}

# => "NotFound"
except dwollav2.Error:
# ...

``dwollav2.Error`` subclasses:

*See for more info.*

- ``dwollav2.AccessDeniedError``
- ``dwollav2.InvalidCredentialsError``
- ``dwollav2.NotFoundError``
- ``dwollav2.BadRequestError``
- ``dwollav2.InvalidGrantError``
- ``dwollav2.RequestTimeoutError``
- ``dwollav2.ExpiredAccessTokenError``
- ``dwollav2.InvalidRequestError``
- ``dwollav2.ServerError``
- ``dwollav2.ForbiddenError``
- ``dwollav2.InvalidResourceStateError``
- ``dwollav2.TemporarilyUnavailableError``
- ``dwollav2.InvalidAccessTokenError``
- ``dwollav2.InvalidScopeError``
- ``dwollav2.UnauthorizedClientError``
- ``dwollav2.InvalidAccountStatusError``
- ``dwollav2.InvalidScopesError``
- ``dwollav2.UnsupportedGrantTypeError``
- ``dwollav2.InvalidApplicationStatusError``
- ``dwollav2.InvalidVersionError``
- ``dwollav2.UnsupportedResponseTypeError``
- ``dwollav2.InvalidClientError``
- ``dwollav2.MethodNotAllowedError``
- ``dwollav2.ValidationError``
- ``dwollav2.TooManyRequestsError``
- ``dwollav2.ConflictError``


After checking out the repo, run ``pip install -r requirements.txt`` to
install dependencies. Then, run ``python test`` to run the

To install this gem onto your local machine, run ``pip install -e .``.


Bug reports and pull requests are welcome on GitHub at


The package is available as open source under the terms of the `MIT
License <>`__.


- **1.2.4** Create a new session for each Token.
- **1.2.3** Check if IOBase when checking to see if something is a
- **1.2.2** Strip domain from URLs provided to token.\* methods.
- **1.2.1** Update sandbox URLs from uat => sandbox.
- **1.2.0** Refer to Client id as key.
- **1.1.8** Support ``verified_account`` and ``dwolla_landing`` auth
- **1.1.7** Use session over connections for `performance
improvement <>`__
(`#8 <>`__ - Thanks
- **1.1.5** Fix file upload bug when using with Python 2
(`#6 <>`__)
- **1.1.2** Add ``TooManyRequestsError`` and ``ConflictError``
- **1.1.1** Add
- **1.1.0** Support per-request headers

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for dwollav2, version 1.3.0
Filename, size File type Python version Upload date Hashes
Filename, size dwollav2-1.3.0.tar.gz (10.2 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring DigiCert DigiCert EV certificate Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page