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
- Create an
individualApplicationorbusinessApplication - If status is
AwaitingDocuments, upload required documents - Listen to
application.approvedwebhook → 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
@spec cancel( String.t(), keyword() ) :: {:ok, Unit.Resource.Application.t()} | {:error, term()}
Cancel an application (Pending or AwaitingDocuments only).
@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
@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_birth—Date.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
@spec get( String.t(), keyword() ) :: {:ok, Unit.Resource.Application.t()} | {:error, term()}
Get an application by ID.
@spec list(keyword()) :: {:ok, [Unit.Resource.Application.t()], map()} | {:error, term()}
List applications.
Filter options
:status—"Approved","Denied","PendingReview", etc.:email,:tags
@spec list_documents( String.t(), keyword() ) :: {:ok, [Unit.Resource.ApplicationDocument.t()], map()} | {:error, term()}
List all documents required for an application.
@spec update_business(String.t(), map(), keyword()) :: {:ok, Unit.Resource.Application.t()} | {:error, term()}
Update a business application (before final status).
@spec update_individual(String.t(), map(), keyword()) :: {:ok, Unit.Resource.Application.t()} | {:error, term()}
Update an individual application (before final status).
@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".
@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).