Current section
Files
Jump to
Current section
Files
lib/plaid/institutions.ex
defmodule Plaid.Institutions do
@moduledoc """
Functions for working with Plaid Institutions.
* Return all institutions
* Fetch an institution by id
* Return all long-tail institutions
* Search long-tail institutions
Plaid API Reference: https://plaid.com/docs/api/#institutions
"""
alias Plaid.Utilities
defstruct [:credentials, :has_mfa, :id, :mfa, :name, :product, :type]
@endpoint "institutions"
@doc """
Returns all Plaid Institutions.
Returns the universe of institutions supported directly by Plaid. This
endpoint requires no authentication.
Returns a list of `Plaid.Institutions` or `Plaid.Error` struct.
## Example
```
{:ok, [%Plaid.Institutions{...}]} = Plaid.Institutions.all()
{:error, %Plaid.Error{...}} = Plaid.Institutions.all()
```
Plaid API Reference: https://plaid.com/docs/api/#all-institutions
"""
@spec all() :: {atom, list | map}
def all() do
Plaid.make_request(:get, @endpoint)
|> Utilities.handle_plaid_response(:institutions)
end
@doc """
Fetchs an institution based on the id.
Returns a specific institution based on the id provided. This endpoint requires
no authentication.
Returns a `Plaid.Institutions` or `Plaid.Error` struct.
## Example
```
{:ok, %Plaid.Institution{...}} = Plaid.Institution.id("55ccd367d32f2fdf19c1c448")
{:error, %Plaid.Error{...}} = Plaid.Institution.id("55ccd367d32f2fdf19c1c448")
```
Plaid API Reference: https://plaid.com/docs/api/#institutions-by-id
"""
@spec id(binary) :: {atom, map}
def id(id) do
endpoint = @endpoint <> "/" <> id
Plaid.make_request(:get, endpoint)
|> Utilities.handle_plaid_response(:institutions)
end
@doc """
Returns long-tail institutions.
Returns the universe of institutions supported through Plaid's partnerships.
Results are paginated. This endpoint requires authentication. If credentials
are not supplied, credentials in the default configuration are used.
Returns list of `Plaid.LongTailInstitutions` or `Plaid.Error` struct.
The `Plaid.LongTailInstitutions` struct does not map all the data elements
returned in the Plaid JSON response. The values ommitted are:
* video
* colors
* logo
* nameBreak
## Example
```
cred = %{client_id: "test_id", secret: "test_secret"}
{:ok, [%Plaid.LongTailInstitutions{...}]} = Plaid.Institutions.long_tail(50, 0)
{:ok, [%Plaid.LongTailInstitutions{...}]} = Plaid.Institutions.long_tail(50, 0, cred)
{:error, %Plaid.Error{...}} = Plaid.Institutions.long_tail(50, 0, cred)
```
Plaid API Reference: https://plaid.com/docs/api/#all-long-tail-institutions
"""
@spec long_tail(integer, integer, map) :: {atom, list}
def long_tail(count, offset, cred \\ nil) do
endpoint = @endpoint <> "/longtail"
params = %{count: count, offset: offset}
Plaid.make_request_with_cred(:post, endpoint, cred || Plaid.config_or_env_cred(), params)
|> Utilities.handle_plaid_response(:long_tail)
end
@doc """
Returns a long-tail institution based on the id.
Returns the long-tail institution supported through Plaid's partnerships based
on the id provided. This endpoint requires no authentication.
The `Plaid.LongTailInstitutions` struct does not map all the data elements
returned in the Plaid JSON response. The values ommitted are:
* video
* colors
* logo
* nameBreak
Returns a `Plaid.LongTailInstitutions` or `Plaid.Error` struct.
## Example
```
{:ok, %Plaid.LongTailInstitutions{...}} = Plaid.Institutions.long_tail_id("wells")
{:error, %Plaid.Error{...}} = Plaid.Institutions.long_tail_id("wells")
```
Plaid API Reference: https://plaid.com/docs/api/#institution-search
"""
@spec long_tail_id(binary) :: {atom, list}
def long_tail_id(id) do
params = %{id: id}
endpoint = @endpoint <> "/search/?" <> Utilities.encode_params(params)
Plaid.make_request(:get, endpoint)
|> Utilities.handle_plaid_response(:long_tail)
end
@doc """
Returns long-tail institutions based on query parameters.
Returns the list of long-tail institutions supported through Plaid's
partnerships. Long-tail institutions are queried by name using a partial
match search and product parameter as options. This endpoint does not
require authentication.
The `Plaid.LongTailInstitutions` does not map all the data elements returned
in the Plaid JSON response. The values ommitted are:
* video
* colors
* logo
* nameBreak
Returns a list of `Plaid.LongTailInstitutions` or `Plaid.Error` struct.
## Example
```
{:ok, [%Plaid.LongTailInstitutions{...}]} = Plaid.Institutions.long_tail_search("wells","auth")
{:error, %Plaid.Error{...}} = Plaid.Institutions.long_tail_search("wells","auth")
```
Plaid API Reference: https://plaid.com/docs/api/#institution-search
"""
@spec long_tail_search(binary, binary | nil) :: {atom, map}
def long_tail_search(query, product \\ nil) do
params =
case {query, product} do
{query, nil} ->
%{q: query}
_ ->
%{q: query, p: product}
end
endpoint = @endpoint <> "/search/?" <> Utilities.encode_params(params)
Plaid.make_request(:get, endpoint)
|> Utilities.handle_plaid_response(:long_tail)
end
end
defmodule Plaid.Institutions.Credentials do
@moduledoc false
defstruct [:username, :password, :pin]
end