Unit.API.Applications (Unit v1.0.0)

Copy Markdown View Source

API module for Unit Applications (KYC/KYB onboarding).

Applications are the entry point for onboarding end-customers. Once approved, a Customer resource is automatically created.

Flow

  1. Create an individualApplication or businessApplication
  2. If status is AwaitingDocuments, upload required documents
  3. Listen to application.approved webhook → proceed with account/card creation

Example

{:ok, app} = Unit.API.Applications.create_individual(%{
  full_name: %{first: "John", last: "Doe"},
  ssn: "000000002",
  date_of_birth: ~D[1990-01-15],
  address: %{
    street: "123 Main St", city: "San Francisco",
    state: "CA", postal_code: "94105", country: "US"
  },
  email: "john@example.com",
  phone: %{country_code: "1", number: "5555550100"},
  ip: "127.0.0.1"
})

# app.status => "Approved" or "AwaitingDocuments"

Summary

Functions

Cancel an application (Pending or AwaitingDocuments only).

Creates a business application.

Creates an individual (natural person) application.

Get an application by ID.

List applications.

List all documents required for an application.

Update a business application (before final status).

Update an individual application (before final status).

Upload the front side of a document (PDF, JPEG, or PNG, up to 20 MB).

Upload the back side of a document (for driver's licenses).

Functions

cancel(id, opts \\ [])

@spec cancel(
  String.t(),
  keyword()
) :: {:ok, Unit.Resource.Application.t()} | {:error, term()}

Cancel an application (Pending or AwaitingDocuments only).

create_business(params, opts \\ [])

@spec create_business(
  map(),
  keyword()
) :: {:ok, Unit.Resource.Application.t()} | {:error, term()}

Creates a business application.

Required params

  • :name, :address, :phone, :state_of_incorporation
  • :entity_type, :contact, :officer, :beneficial_owners

Optional params

  • :ein, :dba, :website, :business_vertical, :tags, :idempotency_key

create_individual(params, opts \\ [])

@spec create_individual(
  map(),
  keyword()
) :: {:ok, Unit.Resource.Application.t()} | {:error, term()}

Creates an individual (natural person) application.

Required params

  • :full_name%{first: String.t(), last: String.t()}
  • :date_of_birthDate.t() or ISO 8601 string
  • :address, :email, :phone

Optional params

  • :ssn, :passport, :nationality, :ip, :tags
  • :occupation, :annual_income, :source_of_income
  • :sole_proprietorship, :ein, :dba, :business_vertical
  • :idempotency_key

get(id, opts \\ [])

@spec get(
  String.t(),
  keyword()
) :: {:ok, Unit.Resource.Application.t()} | {:error, term()}

Get an application by ID.

list(opts \\ [])

@spec list(keyword()) ::
  {:ok, [Unit.Resource.Application.t()], map()} | {:error, term()}

List applications.

Filter options

  • :status"Approved", "Denied", "PendingReview", etc.
  • :email, :tags

list_documents(application_id, opts \\ [])

@spec list_documents(
  String.t(),
  keyword()
) :: {:ok, [Unit.Resource.ApplicationDocument.t()], map()} | {:error, term()}

List all documents required for an application.

update_business(id, params, opts \\ [])

@spec update_business(String.t(), map(), keyword()) ::
  {:ok, Unit.Resource.Application.t()} | {:error, term()}

Update a business application (before final status).

update_individual(id, params, opts \\ [])

@spec update_individual(String.t(), map(), keyword()) ::
  {:ok, Unit.Resource.Application.t()} | {:error, term()}

Update an individual application (before final status).

upload_document(application_id, document_id, file_binary, mime_type, opts \\ [])

@spec upload_document(String.t(), String.t(), binary(), String.t(), keyword()) ::
  {:ok, Unit.Resource.ApplicationDocument.t()} | {:error, term()}

Upload the front side of a document (PDF, JPEG, or PNG, up to 20 MB).

mime_type"image/jpeg", "image/png", or "application/pdf".

upload_document_back(application_id, document_id, file_binary, mime_type, opts \\ [])

@spec upload_document_back(String.t(), String.t(), binary(), String.t(), keyword()) ::
  {:ok, Unit.Resource.ApplicationDocument.t()} | {:error, term()}

Upload the back side of a document (for driver's licenses).