API

Initializing the client

Authorization & updating credentials

Getting credential fields

At some point in time you will need to allow a user to login to an institution so you can get their account information. get_credential_fields() is not part of Intuit’s API, but aids you in getting the fields you need to present in your UI layer.

To get credential fields use get_credential_fields(). It will give you the fields in a list format pre-ordered. It’s a precursor to discover_and_add_accounts()

Authenticating and adding accounts

Once you have gathered the username and password for a specific institution you well need to discover_and_add_accounts(). This particular endpoint will either return a list of accounts if authentication works or return a list of challanges that need to be answered.

Responding to a challenge

If you attempted to authenticate and received back a Challenge response the you will need to answer that challenge by sending your responses to confirm_challenge()

Updating outdated login credentials

If you have changed your institution credentials you will need to let Intuit know that it needs to use new credentials. For example, let’s assume you have a Bank of America or JP Morgan Chase account and changed your password from the banking web site. At this point Intuit will need to be notified of this update.

Updating outdated challenge responses

Working with Institutions

Getting all Institutions

Searching for your institution

Currently finding an institution is somewhat of a manual process. Soon, there will be a helper method on the client that will have a better search. Patches welcome ;). This example searches for an institution that contains “chase” in any of the XML elements:

from aggcat import AggcatClient
from lxml import etree
from aggcat.utils import remove_namespaces

client = AggcatClient(
    'oauth_consumer_key',
    'oauth_consumer_secret',
    'saml_identity_provider_id',
    'customer_id',
    '/path/to/x509/appname.key'
)

search_string = 'Chase'
institutions = client.get_institutions()

xml = etree.fromstring(institutions.content.to_xml())
xml = etree.fromstring(remove_namespaces(xml))

for element in xml.xpath('./institution[contains(., "chase")]'):
    id = element.xpath('./institutionId')[0].text
    name = element.xpath('./institutionName')[0].text
    print id, name
13278 JP Morgan Chase Bank
13640 Quicken Visa
14554 Chase Bank Credit Card (Amazon.com)
14910 Chase e-Funds Card
14777 Fox Chase Bank - Business Banking
13718 Fox Chase Bank
14484 Chevy Chase Bank - Web Cash Manager
...

Note

This query will take a very long time depending on your internet connection. It returns 18000+ institutions in XML format. Sux :(

Getting Institution details

Accounts & Account transactions

Here is the meat of the API. This is what you came for, the ability to aggregate your financials. Here be dragons or not. :)

Customer accounts

Login Accounts

Single Account Details

Transactions

This might hurt or be candy to your eyes depending on how good of a budgeter you are. heh!

Investement Positions

Updating Account Type

Certain banks do not present account types in any of the API data or data that comes back from screen scraping banks accounts without APIs. In those cases the account types are noted as “Other”. Most likely, you will know what the account actually is so you can update the type here.

Deleting An Account

Deleting a customer