Onboard business customers to enable cross-border payments and payouts through Fin.com’s platform. This guide walks you through creating business customer profiles, uploading verification documents, and managing the compliance workflow.Documentation Index
Fetch the complete documentation index at: https://developer.fin.com/llms.txt
Use this file to discover all available pages before exploring further.
- v2
- v1
Prerequisites
* Required fieldBefore you begin, ensure you have:- API credentials: Client ID and secret from the API Keys section
- Access token: Generated via POST /v1/oauth/token
- Reference data: Familiarity with GET /v1/purposes, GET /v1/source-of-funds, and GET /v1/source-of-wealth endpoints
Onboarding Steps
| Step | Endpoint | Description |
|---|---|---|
| 1. Fetch Reference Data | GET /v1/purposes?type=BUSINESS, GET /v1/source-of-funds?type=BUSINESS, GET /v1/source-of-wealth?type=BUSINESS | Retrieve valid integer IDs for purpose, source of funds, and source of wealth |
| 2. Create Customer | POST /v2/customers/business | Submit company details, addresses, financial profile, and associated parties |
| 3. Upload Documents | POST /v1/customers/upload | Upload business and associated party documents |
| 4. Attach Business Docs | POST /v2/customers/:customer-id/business/attach | Link formation, ownership, and supporting documents with TOS acceptance |
| 5. Attach Party Docs | POST /v2/customers/:customer-id/associated-parties/individual/attach | Link identity and address proofs for each associated party |
| 6. Monitor Status | Webhooks: customer.status, customer.rfi | Track verification progress (INCOMPLETE → REVIEWING → APPROVED) |
Request Body Structure
Verification Type (Optional)
Verification type determines how customer identity is validated.STANDARD uses traditional document verification (default). RELIANCE leverages third-party KYB data when enabled for your client.verification_type field is optional and defaults to STANDARD if omitted.Industry Codes (Required)
NAICS 2022 6-digit industry codes describing the business. Minimum 1 item required.| Field | Type | Description |
|---|---|---|
industry_codes* | string[] | NAICS 2022 6-digit codes. Min 1 item. |
Basic Information (Required)
Company details exactly as shown on incorporation documents. All fields must use only English (Latin) characters.| Field | Type | Description |
|---|---|---|
legal_name* | string | Official registered business name. Max 255 chars. |
legal_name_en | string | English translation of the legal name. Required if non-ASCII. |
trade_name | string | Common/operating name (DBA). |
trade_name_en | string | English translation of trade name. |
description* | string | Business purpose and activities. Max 500 chars. |
entity_type* | string | Legal entity type. See entity types table below. |
email* | string | Business email address — must be all lowercase. |
phone* | string | Business phone in E.164 format. |
incorporation_date* | string | Date of incorporation in YYYY-MM-DD format. Cannot be a future date. |
country_of_incorporation* | string | ISO Alpha-3 country code. |
registration_number* | string | Business registration / company number. |
legal_entity_identifier | string | LEI code (20-character alphanumeric). |
is_dao | boolean | Whether the entity is a Decentralized Autonomous Organization. |
tax_info* | object[] | Tax/identifying documents. Min 1 item. See Tax Info below. |
websites* | string[] | Business website URLs. Min 1 item. |
tax_info[]):| Field | Type | Description |
|---|---|---|
country_code* | string | ISO Alpha-3 issuing country. |
document_type* | string | Document type code, validated per country. |
document_id* | string | The tax ID or registration number. |
| Entity Type | Description |
|---|---|
LLC | Limited Liability Company |
PUBLICLY_LISTED | Publicly traded company |
CORPORATION | Corporation (Inc, Corp) |
SOLE_PROPRIETORSHIP | Sole Proprietorship |
PARTNERSHIP | Partnership |
TRUST | Trust |
PRIVATE_FOUNDATION | Private Foundation |
CHARITY | Charitable Organization |
NON_PROFIT | Non-profit Organization |
GOVERNMENT_AGENCY | Government Agency or Authority |
Financial Profile (Required)
Describes account purpose, transaction volumes, and fund sources. Use reference endpoints to fetch valid integer IDs.| Field | Type | Description | How to Get Value |
|---|---|---|---|
purpose_id* | integer | Account purpose. | GET /v1/purposes?type=BUSINESS |
purpose_remarks | string | Additional context for the account purpose. | User input |
source_of_fund_ids* | integer[] | Source(s) of business funds. Min 1. Order from largest to smallest contributor. | GET /v1/source-of-funds?type=BUSINESS |
source_of_funds_description | string | Additional context for source of funds. | User input |
source_of_wealth_ids* | integer[] | Source(s) of owner’s wealth. Min 1. | GET /v1/source-of-wealth?type=BUSINESS |
estimated_annual_revenue_usd* | integer | Estimated annual revenue in USD. Must be >= 0. | User estimate: 5000000 |
expected_monthly_deposits_usd* | integer | Expected monthly inflow in USD. Must be >= 0. | User estimate: 400000 |
expected_monthly_withdrawals_usd* | integer | Expected monthly outflow in USD. Must be >= 0. | User estimate: 350000 |
expected_transaction_value_usd | integer | Typical single transaction value in USD. | User estimate: 50000 |
expected_monthly_transaction_count | integer | Expected number of transactions per month. | User estimate: 20 |
third_party_fund_usage | boolean | Whether third-party funds will be processed. | User confirmation |
purpose_id, source_of_fund_ids, and source_of_wealth_ids are integer foreign keys — not string enums. Always fetch valid IDs from the reference endpoints before submitting. Use source_of_funds_description (not sof_remarks) for additional context on source of funds. Enter all amounts in whole USD dollars — 50000 = $50,000, not cents.purpose_id: 3 = Cross-border payments, source_of_fund_ids: [13, 16] = IDs from the source-of-funds catalogue, estimated_annual_revenue_usd: 5000000 = $5,000,000 USD (integer, not cents).Addresses (Required)
Registered and operational addresses for the business.| Field | Description |
|---|---|
is_incorporated_address_same* | true if physical and incorporated addresses are identical |
incorporated_address* | Registered address from incorporation documents |
physical_address | Operating address — required only if different from incorporated address |
| Field | Type | Description |
|---|---|---|
street_line_1* | string | Primary street address. P.O. Boxes not accepted. |
street_line_2 | string | Secondary address (suite, floor, etc.). |
street_line_1_en | string | English translation. Required if non-ASCII. |
street_line_2_en | string | English translation of street line 2. |
city* | string | City name. Max 100 chars. |
state* | string | State/province code from /v1/countries/subdivisions. |
subdivision_code* | string | State/province code from /v1/countries/subdivisions. |
postal_code* | string | ZIP or postal code. |
country* | string | ISO Alpha-3 country code. |
Associated Parties (Minimum 1 Required)
Each business customer must have at least one associated party. At least one party must hold bothshareholder and ubo roles simultaneously. A single person can hold both roles.Each associated party must include:basic_info:| Field | Type | Description |
|---|---|---|
first_name* | string | First name. Max 50 chars. |
middle_name | string | Middle name(s). |
last_name* | string | Last/family name. Max 50 chars. |
first_name_en | string | English transliteration. Required if non-ASCII. |
middle_name_en | string | English transliteration of middle name. |
last_name_en | string | English transliteration. Required if non-ASCII. |
dob* | string | Date of birth YYYY-MM-DD. Party must be at least 18 years old. |
email* | string | Personal email. Must be unique across all parties in the request. |
phone* | string | Phone in E.164 format. |
country_of_residence* | string | ISO Alpha-3 country code. |
primary_nationality* | string | ISO Alpha-3 country code. |
secondary_nationality | string | ISO Alpha-3 for dual citizens. |
tax_info | object[] | Tax/ID documents. Same structure as business tax_info. |
address: Residential address using the same Address object structure as business addresses.roles (required):| Value | Description |
|---|---|
shareholder | Has a shareholding stake in the business |
ubo | Ultimate Beneficial Owner — exercises control or has significant ownership |
ownership_info (required when roles includes ubo):| Field | Type | Description |
|---|---|---|
designation* | string | Title or position. Max 100 chars. |
percentage_of_ownership* | float | Ownership stake as a percentage (0–100). |
relationship_establishment_date* | string | When relationship with the business began. YYYY-MM-DD. |
has_control* | boolean | Whether this party has significant control. |
is_signer* | boolean | Whether this party is an authorized signatory. |
is_director* | boolean | Whether this party serves as a director. |
Holding Structure (Optional)
For businesses with corporate shareholders or foreign branches.| Field | Type | Description |
|---|---|---|
has_material_intermediary_ownership | boolean | Whether any intermediary holds a material ownership stake. |
corporate_shareholders | object[] | List of corporate shareholders. See below. |
foreign_branches | object[] | List of foreign branch registrations. See below. |
| Field | Type | Description |
|---|---|---|
entity_name* | string | Corporate shareholder’s legal name. |
entity_name_en | string | English translation. Required if non-ASCII. |
registration_country_code* | string | ISO Alpha-3 country of registration. |
ownership_percentage* | float | Ownership stake (0–100). |
registration_number | string | Entity registration number. |
entity_type | string | Type of entity. |
incorporation_date | string | Incorporation date YYYY-MM-DD. |
| Field | Type | Description |
|---|---|---|
registration_country_code* | string | ISO Alpha-3 country where the branch is registered. |
name | string | Branch name. |
registration_number | string | Branch registration number. |
Public Listings (Optional)
For publicly traded companies.| Field | Type | Description |
|---|---|---|
mic | string | ISO 10383 Market Identifier Code. |
isin | string | International Securities Identification Number (12 chars). |
ticker_symbol | string | Stock exchange ticker. |
Compliance (Optional)
For regulated businesses, MSBs, and high-risk industries.| Field | Type | Description |
|---|---|---|
operates_in_prohibited_countries | boolean | Whether the business operates in OFAC/sanctioned countries. |
additional_description_for_compliance_screening | string | Free-text compliance notes for manual review. |
risk_profile | object | Risk classification details. See Risk Profile below. |
regulated_activity | object | Regulatory licensing details. See Regulated Activity below. |
aml | object | AML/CFT program details. See AML below. |
risk_profile):| Field | Type | Description |
|---|---|---|
high_risk_activities | string[] | High-risk activities the business engages in. |
high_risk_activities_explanation | string | Explanation of declared activities. Required if array is non-empty. |
conducts_money_services | boolean | Whether the business provides money services. |
conducts_money_services_via_fin | boolean | Whether money services are provided via financial intermediaries. |
conducts_money_services_description | string | Details about the money services offered. |
high_risk_activities values: adult_entertainment, crypto_exchange, gambling, cannabis, weapons, money_services, cross_border_paymentsRegulated Activity (regulated_activity):| Field | Type | Description |
|---|---|---|
description* | string | Description of the regulated activity. |
primary_authority_country_code* | string | ISO Alpha-3 country of the regulatory authority. |
primary_authority_name* | string | Name of the primary regulatory authority. |
license_number* | string | Regulatory license or registration number. |
aml):| Field | Type | Description |
|---|---|---|
supervisory_authority_name | string | Name of the AML supervisory authority. |
license_number | string | AML license number. |
has_appointed_mlro | boolean | Whether a Money Laundering Reporting Officer has been appointed. |
customer_risk_split | object | Breakdown of customer risk percentages. Must sum to 100. See below. |
prohibits_anonymous_or_fictitious_accounts | boolean | Policy on anonymous or fictitious accounts. |
prohibits_accounts_for_unlicensed_or_shell_customers | boolean | Policy on unlicensed or shell customers. |
customer_identity_verification | object | CDD verification method and system. See Verification Method below. |
pep_and_sanctions_screening | object | PEP/sanctions screening method and system. |
sanction_lists | string[] | Sanction lists screened against. |
customer_risk_classification_from_due_diligence | boolean | Whether risk classification is based on due diligence. |
enhanced_due_diligence_process | boolean | Whether enhanced due diligence is in place. |
transaction_monitoring | object | Transaction monitoring method and system. |
procedures_for_transaction_monitoring | boolean | Whether formal TM procedures are documented. |
subject_to_ml_or_tf_investigation | string | Current ML/TF investigation status. |
subject_to_regulatory_enforcement_past_2_years | string | Regulatory enforcement history (last 2 years). |
confirms_no_service_to_sanctioned_countries | boolean | Confirmation of no services to sanctioned jurisdictions. |
client_funds_accessibility | string | Client fund accessibility policy. |
aml_ctf_audit_completed | boolean | Whether an AML/CTF audit has been completed. |
planned_audit_date | string | Planned next audit date. YYYY-MM-DD. |
customer_risk_split):Represents how your customer base is distributed across risk tiers. These percentages reflect what proportion of your customers you classify as low, medium, or high risk based on your own due diligence process.| Field | Type | Description |
|---|---|---|
low_risk* | integer | Percentage of customers classified as low risk. |
medium_risk* | integer | Percentage of customers classified as medium risk. |
high_risk* | integer | Percentage of customers classified as high risk. |
customer_identity_verification, pep_and_sanctions_screening, transaction_monitoring):| Field | Type | Description |
|---|---|---|
method* | enum | How the verification is performed. One of: automated, manual, hybrid. |
system* | string | The vendor or system used. Required when method is automated. |
method value | Description |
|---|---|
automated | Fully system-driven verification with no manual review |
manual | Human-reviewed verification process |
hybrid | Combination of automated screening and manual review |
Metadata (Optional)
Client-defined reference for internal tracking:Document Upload & Attachment
After creating the business customer, upload and attach verification documents.Step 1: Upload Documents
Upload files usingmultipart/form-data:Step 2: Attach Business Documents
Link formation, ownership, and supporting documents to the business customer:The
tos_policies_value should be parsed from the tos_policies_url query parameter returned when creating the customer. Providing this value signifies that the customer was shown the terms and accepted them.| Category | Type | Description |
|---|---|---|
formation_documents | REGISTRATION_DOCUMENT | Certificate of Incorporation / Registration Certificate |
formation_documents | CONSTITUTIONAL_DOCUMENT | Articles of Incorporation, Partnership Agreement |
formation_documents | FORMATION_DOCUMENT | Trust Agreement (for Trust entities) |
formation_documents | EVIDENCE_OF_DIRECTORS_AND_CONTROLLERS | Evidence of all directors and controllers (non-US entities) |
formation_documents | PROOF_OF_TAX_IDENTIFICATION | Tax registration certificate |
ownership_documents | SHAREHOLDER_REGISTER | Shareholder registry or cap table |
ownership_documents | PROOF_OF_SIGNATORY_AUTHORITY | Power of attorney or equivalent |
ownership_documents | DIRECTORS_REGISTRY | Registry of directors and officers |
ownership_documents | OWNERSHIP_CHART | Org chart showing ownership |
ownership_documents | CERT_OF_INCUMBENCY | Certificate of incumbency |
supporting_documents | PROOF_OF_ADDRESS | Utility bill, lease agreement, or bank statement |
supporting_documents | PROOF_OF_SOURCE_OF_FUNDS | Documentation of business fund origins |
supporting_documents | PROOF_OF_SOURCE_OF_WEALTH | Supporting docs proving wealth origin |
supporting_documents | AML_COMFORT_LETTER | AML compliance letter from legal counsel |
supporting_documents | FLOW_OF_FUNDS | One-page fund flow statement or diagram |
supporting_documents | MARKETING_MATERIALS | Website, invoices, or business plan |
supporting_documents | TAX_EXEMPT_ENTITY_CONFIRMATION | Tax exemption certificate |
supporting_documents | OTHER | Any other supporting document |
Step 3: Attach Associated Party Documents
Attach identity and address documents for each associated party:The
associated_party_id is returned in the GET /v2/customers/:customer-id response after creating the business customer.| Type | Description | Side Required |
|---|---|---|
PASSPORT | Passport | No (optional) |
NATIONAL_ID | National ID card | Yes (FRONT + BACK) |
DRIVERS_LICENSE | Driver’s license | Yes (FRONT + BACK) |
RESIDENCE_PERMIT | Residence permit | No (optional) |
PERMANENT_RESIDENCY_ID | Permanent Residency / Green Card (USA residents only) | No (optional) |
| Type | Description |
|---|---|
UTILITY_BILL | Recent utility bill (gas, electric, water) |
BANK_STATEMENT | Bank statement (within last 90 days) |
GOVERNMENT_LETTER | Official government correspondence |
RESIDENCE_PERMIT | Residence permit document |
PASSPORT | Passport showing address |
NATIONAL_ID | National ID showing address |
DRIVERS_LICENSE | Driver’s license showing address |
COMPANY_DOC | Company document showing address |
Customer Status & Webhooks
After document submission, customers go through a verification workflow:Status Lifecycle:| Event | Triggered When | Resulting Status |
|---|---|---|
customer.created | Customer record is created | INCOMPLETE |
customer.status | Verification status changes | Varies |
customer.rfi | Compliance team requests additional information | ACTION_REQUIRED |
Error Response Examples
Email validation error (not lowercase):What’s Next?
1. Monitor Verification Status
- Subscribe to
customer.created,customer.status, andcustomer.rfiwebhooks - Handle status transitions:
INCOMPLETE→PROCESSING→REVIEWING→APPROVED - For
ACTION_REQUIREDstatus (triggered bycustomer.rfi), respond with the requested documents - See Webhook Verification for implementation details
2. Test Edge Cases
- ✓ Email with uppercase characters
- ✓ Ownership percentages totaling > 100%
- ✓ Non-Latin characters in text fields
- ✓ Missing required fields
- ✓ RELIANCE verification when not enabled
- ✓ P.O. Box addresses
3. Production Checklist
- Implemented webhook handling for status updates
- Added proper error handling for all failure scenarios
- Client-side validation for email lowercase
- Fetched and cached reference data (purposes, source-of-funds, source-of-wealth)
- Implemented document upload UI/flow
- Reviewed High-Risk Business Activities
- Set up monitoring for failed verifications
- Tested the complete workflow end-to-end
4. Create Beneficiaries
Once your business customer is approved, you can create beneficiaries for payouts:Common Pitfalls & Solutions
| Pitfall | Solution |
|---|---|
| Email validation fails | Must be all lowercase before sending: contact@acme.com ✓ not Contact@Acme.com ✗ |
| RELIANCE 423 error | RELIANCE must be enabled for your client. Contact support or use STANDARD. |
| Ownership percentage error | Total across all parties must be < 100%. Individual parties may have 0% ownership. |
| Non-Latin character rejection | Use legal_name_en, first_name_en, street_line_1_en etc. for non-ASCII names and addresses. |
| P.O. Box address rejected | Use verifiable street addresses. Avoid P.O. Boxes. |
| Phone format rejected | Use E.164 format with country code: +14155552671, not (415) 555-2671. |
| Amount rejected | Provide amount in USD as integer (not cents): 50000 for $50,000. |
purpose_idinvalid | Fetch valid IDs from GET /v1/purposes?type=BUSINESS. Do not use string enums. |
source_of_fund_idsinvalid | Fetch valid IDs from GET /v1/source-of-funds?type=BUSINESS. |
source_of_wealth_idsinvalid | Fetch valid IDs from GET /v1/source-of-wealth?type=BUSINESS. |
Last updated: April 2026 — Reflects V2 API (
POST /v2/customers/business)