Skip to main content
Onboard individual customers to enable cross-border payments and payouts through Fin.com’s platform. This guide walks you through creating individual customer profiles, uploading verification documents, and managing the compliance workflow.

Prerequisites

Before you begin, ensure you have:

Onboarding Steps

StepEndpointDescription
1. Fetch Catalogue DataGET /v1/occupations, GET /v1/purposes?type=INDIVIDUAL, GET /v1/source-of-funds?type=INDIVIDUALRetrieve valid IDs for occupations, purposes, and fund sources
2. Create CustomerPOST /v1/customers/individualSubmit personal details, address, and financial profile
3. Upload DocumentsPOST /v1/customers/uploadUpload identity and address proof files
4. Attach DocumentsPOST /v1/customers/individual/attachLink uploaded documents to customer with TOS acceptance
5. Monitor StatusWebhooks: customer.statusTrack 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 KYC data when enabled for your client.
{
  "verification_type": "STANDARD"
}
The verification_type field is optional and defaults to STANDARD if omitted.
RELIANCE verification must be explicitly enabled for your client. If not available, you’ll receive a 423 error with message: "RELIANCE is not available for your client"

Basic Information (Required)

Personal details exactly as shown on identity documents. All fields must use only English (Latin) characters.
Fields:
FieldTypeDescriptionExample
first_namestringLegal first name as shown on ID"John"
last_namestringLegal last name as shown on ID"Doe"
dobstring (date)Date of birth in YYYY-MM-DD format"1990-01-15"
emailstring (email)Personal email address — must be all lowercase"[email protected]"
phonestringPhone number in E.164 format — country/area code must match country_of_residence"+14155552671"
country_of_residencestringISO Alpha-3 country code where person resides"USA"
nationalitystringISO Alpha-3 country code of citizenship"USA"
tinstringTax Identification Number"123-45-6789"
Email must be all lowercase or validation will fail. Convert to lowercase before sending: [email protected] ✓ not [email protected]
TIN Format by Country:
  • USA: Social Security Number in format xxx-xx-xxxx (e.g., 123-45-6789)
  • Other countries: Must use the country’s official Tax Identification Number format
Example:
{
  "basic_info": {
    "first_name": "John",
    "last_name": "Doe",
    "dob": "1990-01-15",
    "email": "[email protected]",
    "phone": "+14155552671",
    "country_of_residence": "USA",
    "nationality": "USA",
    "tin": "123-45-6789"
  }
}

Address (Required)

Current residential address of the customer. This must match the address on proof of address documents.
Fields:
FieldTypeDescriptionExample
streetstringFull street address including apartment/unit number"123 Main Street Apt 4B"
citystringCity name"San Francisco"
statestringState/province code from /v1/countries//subdivisions"US-CA"
postal_codestringPostal or ZIP code"94103"
countrystringISO Alpha-3 country code"USA"
State Code Format: Use subdivision codes from the catalogue API, not abbreviations. For example, use US-CA instead of CA for California, or GB-ENG instead of England.
Example:
{
  "address": {
    "street": "123 Main Street Apt 4B",
    "city": "San Francisco",
    "state": "US-CA",
    "postal_code": "94103",
    "country": "USA"
  }
}

Financial Profile (Required)

Describes occupation, transaction purpose, volume, and fund sources. Use catalogue endpoints to fetch valid IDs.
Fields:
FieldTypeDescriptionHow to Get Value
occupation_idintegerCustomer’s occupationGET /v1/occupations
source_of_fund_idintegerSource of fundsGET /v1/source-of-funds?type=INDIVIDUAL
purpose_idintegerPurpose of using the serviceGET /v1/purposes?type=INDIVIDUAL
monthly_volume_usdintegerExpected monthly transaction volume in USD (not cents)User estimate: 5000
When fetching catalogue data for individual customers, use the ?type=INDIVIDUAL query parameter to get the correct options for source_of_fund_id and purpose_id.
Example:
{
  "financial_profile": {
    "occupation_id": 1,
    "source_of_fund_id": 1,
    "purpose_id": 1,
    "monthly_volume_usd": 5000
  }
}
In this example: occupation_id: 1 = Software Engineer, source_of_fund_id: 1 = Employment income, purpose_id: 1 = Personal remittance, monthly_volume_usd: 5000 = $5,000 USD per month.

Metadata (Optional)

Custom key-value pairs for internal tracking:
{
  "meta_data": {
    "customer_reference": "REF-20250123-JOHN",
    "internal_notes": "Premium tier customer",
    "referral_code": "FRIEND2025"
  }
}

Document Upload & Attachment

After creating the individual customer, you must upload and attach verification documents.

Step 1: Upload Documents

Upload files using multipart/form-data:
curl --request POST \
  --url https://sandbox.api.fin.com/v1/customers/upload \
  --header 'Authorization: Bearer <YOUR_ACCESS_TOKEN>' \
  --header 'Content-Type: multipart/form-data' \
  --form 'customer_id=55bd6b4e-c20a-4cc8-9535-91d5557a67d9' \
  --form 'file1=@/path/to/passport_front.pdf' \
  --form 'file2=@/path/to/utility_bill.pdf'
Allowed file types: PDF, JPG, JPEG, PNG Response:
{
  "data": {
    "files": [
      {"file1": "/AbAcQ4hn_0652746727637.pdf"},
      {"file2": "/XyZ123mn_0652746727638.pdf"}
    ]
  }
}
Save these URIs—you’ll use them in the attachment request.

Step 2: Attach Documents

Link identity and address proof documents to the customer:
curl --request POST \
  --url https://sandbox.api.fin.com/v1/customers/individual/attach \
  --header 'Authorization: Bearer <YOUR_ACCESS_TOKEN>' \
  --header 'Content-Type: application/json' \
  --data '{
  "customer_id": "55bd6b4e-c20a-4cc8-9535-91d5557a67d9",
  "proof_of_identity": {
    "type": "PASSPORT",
    "number": "A12345678",
    "country": "USA",
    "issue_date": "2020-01-15",
    "expiry_date": "2030-01-15",
    "files": [
      {"uri": "/AbAcQ4hn_0652746727637.pdf"}
    ]
  },
  "proof_of_address": {
    "type": "UTILITY_BILL",
    "country": "USA",
    "files": [
      {"uri": "/XyZ123mn_0652746727638.pdf"}
    ]
  },
  "tos_policies_value": "e9414388-fbdf-4407-b5c2-bc39eae3645b"
}'
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.
For NATIONAL_ID and DRIVERS_LICENSE, you must provide both FRONT and BACK images using the side field. For PASSPORT, the side field is optional.
Example with National ID (requires front and back):
{
  "proof_of_identity": {
    "type": "NATIONAL_ID",
    "number": "A12345678",
    "country": "USA",
    "issue_date": "2020-01-15",
    "expiry_date": "2030-01-15",
    "files": [
      {"side": "FRONT", "uri": "/id_front_0652746727640.pdf"},
      {"side": "BACK", "uri": "/id_back_0652746727641.pdf"}
    ]
  }
}
Identity Document Types:
TypeDescriptionSide Required
PASSPORTPassportNo (optional)
NATIONAL_IDNational ID cardYes (FRONT + BACK)
DRIVERS_LICENSEDriver’s licenseYes (FRONT + BACK)
Address Proof Types:
TypeDescription
UTILITY_BILLRecent utility bill (gas, electric, water)
BANK_STATEMENTBank statement (within last 3 months)
GOVERNMENT_LETTEROfficial government correspondence
RESIDENCE_PERMITResidence permit document
PASSPORTPassport showing address
NATIONAL_IDNational ID showing address
DRIVERS_LICENSEDriver’s license showing address
COMPANY_DOCCompany document showing address
Proof of Address Requirements:
  • Document must show the customer’s full name and complete address
  • Address must match the address provided in the customer creation request
  • Document should be issued within the last 90 days (for utility bills, bank statements, and government letters)

Customer Status & Webhooks

After document submission, customers go through a verification workflow: Status Lifecycle:
INCOMPLETE → REVIEWING → APPROVED

           ON_HOLD / REJECTED
StatusDescription
INCOMPLETECustomer created but documents not yet attached
REVIEWINGDocuments submitted and under compliance review
APPROVEDVerification complete, customer can transact
ON_HOLDAdditional information or documents required
REJECTEDVerification failed, see rejection reason
Webhook Events:
  • customer.created — Fired when customer is created
  • customer.status — Fired when status changes
Subscribe to webhooks to automate your onboarding flow. See Verifying Webhooks for setup.

Error Response Examples

Email validation error (not lowercase):
{
  "message": "Validation failed",
  "errors": {
    "basic_info.email": ["Email must be all lowercase"]
  }
}
RELIANCE not enabled:
{
  "message": "RELIANCE is not available for your client"
}
TIN format validation (USA):
{
  "message": "Validation failed",
  "errors": {
    "basic_info.tin": ["TIN must be in SSN format (xxx-xx-xxxx) for USA customers"]
  }
}
Missing required field:
{
  "message": "Validation failed",
  "errors": {
    "financial_profile.occupation_id": ["occupation_id is required"]
  }
}

What’s Next?

You’ve successfully created an individual customer. Here’s what to do next:

1. Monitor Verification Status

Listen for webhook events to track verification progress:
  • Subscribe to customer.created and customer.status webhooks
  • Handle status transitions: INCOMPLETEREVIEWINGAPPROVED
  • For ON_HOLD statuses, respond to RFIs (Requests for Information) via email or Slack with additional documents
  • See Webhook Verification for implementation details

2. Test Edge Cases

Validate your integration handles common errors:
  • ✓ Email with uppercase characters
  • ✓ TIN in wrong format for country
  • ✓ Non-Latin characters in text fields
  • ✓ Missing required fields
  • ✓ RELIANCE verification when not enabled
  • ✓ Invalid state codes

3. Production Checklist

Before going live, ensure you have:
  • Implemented webhook handling for status updates
  • Added proper error handling for all failure scenarios
  • Client-side validation for email lowercase and TIN format
  • Fetched and cached catalogue data (occupations, purposes, source-of-funds)
  • Implemented document upload UI/flow
  • Set up monitoring for failed verifications
  • Tested the complete workflow end-to-end

4. Create Beneficiaries

Once your individual customer is approved, you can create beneficiaries for payouts:

Common Pitfalls & Solutions

PitfallSolution
Email validation failsEnsure email is all lowercase before sending: [email protected] ✓ not [email protected]
RELIANCE 423 errorRELIANCE verification must be enabled for your client. Contact support or use STANDARD verification type.
TIN format rejectedTIN must follow the country’s official format. For USA, use SSN format xxx-xx-xxxx.
Non-Latin character rejectionAll text fields accept only English (Latin) characters. Transliterate or romanize names (e.g., Jose not Jose).
State code validation failsUse state codes from /v1/countries//subdivisions. Format: US-CA, not CA.
Phone format rejectedUse E.164 format with country code: +14155552671, not (415) 555-2671.
Phone country mismatchPhone number country/area code must match country_of_residence. A USA resident cannot have a UK phone number.
Monthly volume rejectedProvide amount in USD as integer (not cents): 5000 for $5,000, not 500000.
Document side missingFor NATIONAL_ID and DRIVERS_LICENSE, include side: "FRONT" and side: "BACK" in the files array.
Address mismatchEnsure proof of address document shows the same address provided in the address object.