TreasuryPrime.AccountApplication (TreasuryPrime v1.0.0)

Copy Markdown View Source

The entry point for opening a new bank account. An account application ties together one or more TreasuryPrime.PersonApplications (for a personal account) or a TreasuryPrime.BusinessApplication plus its associated person applications (for a business account), an TreasuryPrime.AccountProduct, and optionally an initial TreasuryPrime.Deposit. Once approved, account_id is populated with the newly created TreasuryPrime.Account.

See the "Opening an Account" guide in the Treasury Prime docs for the full walkthrough — at a high level:

Personal account

{:ok, person_app} =
  TreasuryPrime.PersonApplication.create(client, %{
    first_name: "George",
    last_name: "Washington",
    email_address: "[email protected]",
    phone_number: "2025551111",
    date_of_birth: "1732-02-22",
    citizenship: "US",
    tin: "111222444",
    physical_address: %{
      street_line_1: "1600 Pennsylvania Ave",
      city: "Washington",
      state: "DC",
      postal_code: "20500"
    }
  })

{:ok, account_app} =
  TreasuryPrime.AccountApplication.create(client, %{
    person_applications: [%{id: person_app.id, roles: ["owner", "signer"]}],
    primary_person_application_id: person_app.id,
    account_product_id: "apt_..."
  })

Business account

{:ok, account_app} =
  TreasuryPrime.AccountApplication.create(client, %{
    business_application_id: business_app.id,
    primary_person_application_id: person_app.id,
    account_product_id: "apt_..."
  })

Poll (or wait for an account_application.update webhook on) status until it reaches "approved" (-> account_id populated), "rejected", or "manual_review".

Summary

Functions

Submits an account application. Required: account_product_id, primary_person_application_id, plus either person_applications (personal accounts) or business_application_id (business accounts). Optionally deposit_id to fund the account on opening.

Fetches a single account application by id.

Lists account applications.

Types

person_application_ref()

@type person_application_ref() :: %{id: String.t(), roles: [String.t()]}

t()

@type t() :: %TreasuryPrime.AccountApplication{
  account_id: String.t() | nil,
  account_number: String.t() | nil,
  account_product_id: String.t() | nil,
  bankdata: map() | nil,
  business_application_id: String.t() | nil,
  created_at: String.t() | nil,
  deposit_id: String.t() | nil,
  id: String.t() | nil,
  ownership_type: String.t() | nil,
  person_applications: [person_application_ref()] | nil,
  primary_person_application_id: String.t() | nil,
  status: String.t() | nil,
  updated_at: String.t() | nil,
  userdata: map() | nil
}

Functions

create(client, params, opts \\ [])

@spec create(TreasuryPrime.Client.t(), map(), keyword()) ::
  {:ok, t()} | {:error, TreasuryPrime.Error.t()}

Submits an account application. Required: account_product_id, primary_person_application_id, plus either person_applications (personal accounts) or business_application_id (business accounts). Optionally deposit_id to fund the account on opening.

create!(client, params, opts \\ [])

@spec create!(TreasuryPrime.Client.t(), map(), keyword()) :: t()

get(client, id)

@spec get(TreasuryPrime.Client.t(), String.t()) ::
  {:ok, t()} | {:error, TreasuryPrime.Error.t()}

Fetches a single account application by id.

get!(client, id)

@spec get!(TreasuryPrime.Client.t(), String.t()) :: t()

list(client, params \\ %{})

@spec list(TreasuryPrime.Client.t(), map()) ::
  {:ok, TreasuryPrime.Page.t()} | {:error, TreasuryPrime.Error.t()}

Lists account applications.

Filterable params

account_id, status.

list!(client, params \\ %{})