Skip to content
scotch222 edited this page Aug 9, 2017 · 9 revisions

Plaid

https://www.plaid.com/

Public Sandbox Description

Plaid makes building financial technology simple by fixing the infrastructure of banks and credit cards.  Using our REST API, developers can integrate in minutes and get high-quality transactional and account data from most major financial institutions.  What's more - instead of the low-quality merchant strings you find in bank statements, Plaid gives high-context data for every transaction - including a cleaned merchant name, category, street address, geocode, date, and dollar value.

Information

Contact Details
Social Media

Sandbox Member:

  • Data Provider Since: { provider_start_date }

Contact Information

Profile Name Role Email Address LinkedIn Twitter Slack Skills
{ person1_name } { person1_role } { person1_email } { person1_linkedin } { person1_twitter } { person1_slack } { person1_skills }

Available products

Plaid banking API

Every transaction tells a story. Plaid Connect allows you to dig into the narrative by collecting transactional data from credit, debit, checking, savings, and more accounts in a clean, usable format. We intelligently match the merchant name, category, location, and address of each purchase.

Business Model Specs:

  • Cost or Licensing Structures: { product1_costs }

Technical Specs:

  • Delivery Method: { product1_delivery_method }
  • Update Frequency: { product1_update_frequency }

Marketing Materials (list of pdfs or files that have been uploaded to the wiki)

  • { product1_marketing_doc_1 }
  • { product1_marketing_doc_2 }

Technical Documents (list of pdfs or files that have been uploaded to the wiki)

  • { product1_technical_doc_1 }
  • { product1_technical_doc_2 }

Reviews

{ review1_sandbox_member }: { review1_date }

{ review1_text }

{ review2_sandbox_member }: { review2_date }

{ review2_text }

Overview

Plaid offers 3 consumer banking data services:

  • Auth: validate a user's bank username & password
  • Balance: guaranteed up to date account balances for a user
  • Connect: transaction history for a user's bank accounts, as well as balances for those accounts (but Plaid does not guarantee these balances are up to date)

The team at Cache uses Connect, which is what we'll detail here.

Setup

Create an account

All API calls to Plaid require a client_id & secret, which are generated for your business when you sign up with Plaid.

Routes, access_tokens

Plaid has excellent documentation. Here is a brief overview of the 5 things one can do with Connect:

  • Add a user (connectAdd)
  • Step a user through multi-factor authentication (connectStep, follows after conectAdd)
  • Get a user's account & transaction data (connectGet)
  • Patch a user (connectPatch, required if a user's credentials or MFA have changed with the institution, and the user must be reintegrated)
  • Delete a user (connectDelete)

Add/Step are for signup: integration a user's bank account. ConnectGet is for ongoing use, whenever new transaction data is available for the user. Patch/Delete are maintenance.

Access_tokens

Plaid's definition of a user is an access_token: what you get back when a user successfully connects their bank. In other words, a user will connect their bank, and Plaid will generate a single access_token for this user's bank account. This means: 1 access_token represents the banking data associated with a user's bank username and password. In a typical Bank of America case, this means 1 access_token is associated with: a checking, savings, & credit card accounts for the user. Whatever they would see by logging into their instution's website using those credentials.

IMPORTANT TIP: Nothing prevents a user from signing up with their same bank credentials twice. Plaid will generate a new access_token for each instance, and as far as a startup's interface with Plaid is concerned, it is as if the 2 access_tokens are completely unrelated.

However, this comes with a caveat: it appears as if Plaid stores transaction history data on their own servers, so that if one access_token instance of a user's bank has been integrated many years before (for instance, if that user signed up with Mint.com, and 5 years of data have been stored), and a new access_token is generated for a new instance with a different service (e.g. the user now signs up with cache.ai), it appears as if the new access_token is fed the same 5 years of data from Plaid, rather than the 1 month - 2 years typical transaction history for a newly integrated bank.

In other words: Plaid keeps track of a bank account's data, and moving forward, Plaid serves that same, Plaid-stored data to all new access_token instances of a user's bank account. But as far as the Plaid API appears, these access_tokens are completely unrelated, and there is no trivial way to identify them as representing the same user bank account & data set.

Server integration

Cache uses Nodejs for the back end. Plaid has an easy to integrate Node library plaid-node, which can be installed using npm: npm install plaid. Connecting to the routes above is simple, with the 5 commands, as listed in the github README:

  • plaidClient.addConnectUser(...)
  • ...stepConnectUser(...)
  • ...getConnectUser(...)
  • ...patchConnectUser(...)
  • ...deleteConnectUser(...)

Be mindful of the arguments listed in the README. If callbacks appear to be failing, it may be because Plaid's stated arguments in the README don't match what is currently implemented in their API.

Webhooks

When integrating a new user & receiving an access_token for that user, it's essential to provide Plaid with a webhook address: some route on your servers that Plaid can call to let you know about new data for a user, or any other issues (a user may need patching, etc.)

Suggested integration setup: login_only : true, and then listen for transaction webhooks

By default, during user authentication (connectAdd, connectStep), Plaid sends some transaction history back along with the authentication successful message. WE suggest against this, as we frequently experience server timeouts while Plaid is pulling & cleaning data from the user's institution. One can turn this off by using the connectAdd option { login_only: true }.

In the login_only : true case, Plaid will not send back any transaction history in the success callback, but instead will send pings to the webhook url you provided. Their initial pings will be for:

  • Initial transaction history pulled (called within a minute, uses code 0)
  • Historical transaction history pulled (called within 5 minutes, uses code 1)

Sample data

Plaid's API is clean & consistent, & so is their data, all provided as JSON. Their docs give excellent examples of the data structures returned from their routes.

Data Providers

Sandbox Participants

Guides

  • Data Agreement
  • Product Development Pipeline
Clone this wiki locally