# Plaid

[![Build Status](](
[![ Version](](


Elixir library for Plaid's V2 API.

Supported Plaid products:
- [x] Transactions
- [x] Auth
- [ ] Identity
- [x] Balance
- [x] Income
- [ ] Assets

[Plaid Documentation](

## Usage

Add to your dependencies in `mix.exs`. The hex specification is required.

def deps do
  [{:plaid, "~> 1.5", hex: :plaid_elixir}]

## Configuration

All calls to Plaid require either your client id and secret, or public key. Add the
following configuration to your project to set the values.

config :plaid,
  root_uri: "",
  client_id: "your_client_id",
  secret: "your_secret",
  public_key: "your_public_key",
  httpoison_options: [timeout: 10_000, recv_timeout: 30_000]

By default, `root_uri` is set by `mix` environment. You can override it in your config.
- `dev` -
- `prod`-

Finally, you can pass in custom configuration for [HTTPoison]( It's recommended you
extend the receive timeout for Plaid, especially for retrieving historical transactions.

## Runtime configuration

You can overwrite the configuration at runtime.

For example, if you want to hit a different URL when calling the `/accounts` endpoint, you could
pass in a configuration argument to `Plaid.Accounts.get/2`.

Plaid.Accounts.get(%{access_token: "my-token"}, %{root_uri: "", secret: "no-secrets"})

## Obtaining Access Tokens

Access tokens are required for almost all calls to Plaid. However, they can only be obtained
using [Plaid Link](

Once a user successfully connects to his institution using Plaid Link, a
public token is returned to the client. This single-use public token can be exchanged
for an access token and item id (both of which should be stored) using

Consult Plaid's documentation for additional detail on this process.

## Compatibility

As of version `1.2`, this library natively supports serialization of its structs using `Jason` for compatibility with Phoenix.

## Tests and Style

This library uses [bypass]( to simulate HTTP responses from Plaid.

It uses Elixir's native formatter as of `1.3.2`