Part 3: Client Onboarding
For individual clients only
Fiat24’s client onboarding module is designed for seamless integration. We offer two flexible approaches:
No-code integration – Ideal for Web3 dApp developers who want a quick and practical setup without writing code.
Code-based integration – Recommended for native app developers who prefer embedding the onboarding module directly into their application code for maximum control and customisation.
1. No-code integration
This guide illustrates how Fiat24 separately manages the client information in a dedicated site id.fiat24.com.
https://id.fiat24.com/login?wallet=<walletTokenId>
The parameter
walletTokenId
needs to be added in case you want to customise the Login Page with your colors and name
Our onboarding process involves several steps to verify the identity of the customer and ensure that they meet the Swiss KYC/AML requirements to open an account with Fiat24. Here is a general overview of the onboarding process with us:
Check Profile This step check the eligibility of the client to open the account with Fiat24. It involves domicile and nationality check, pre-conditional risk questionnaires and collect client's email and phone number. Fiat24 conducts background checks on the customer to verify their profile and ensure that they meet our requirements to open an account.
Check Address We comply with Swiss regulation to verify user's residential address by GPS location. This step should be done within the browsers such as Chrome or Safari, but not the browser inside the crypto wallet, which usually disabled the Location Services for better safety. According the related regulation, the user must be within 2 km from the given address.
Scan Passport or National ID Fiat24 will verify the user's identity by asking for the passport/national ID scan. The user need to hold a NFC chip enabled passport/national ID to confirm their identity. User need to download the ePassport app ReadID Ready and scan the generated QR code to continue.
Once the customer's identity has been verified and their background checks have been completed, Fiat24 will set up their account. It will take 3-10 minutes.
Once the client has completed the onboarding process and their account has been funded, they can start using the Fiat24's services, such as making deposits, withdrawing funds, and conducting transactions.
2. Code-based Integration
Using API to deliver onboarding client data are restricted functions exclusively available to internal, trusted systems, ensuring that only authorised applications and users can access sensitive operations or data.
POST https://api.fiat24.com/register
Request Body
{
"chainId" : 5000,
"nftId" : 10365,
"email" : "[email protected]",
"profile" : {
"annualSalary": "B2", // Single item (SALARIES)
"totalAssets": "B1", // Single item (TOTAL_ASSETS)
"mainOccupation": "EMP", // Single item (OCCUPATIONS)
"jobCategory": "EEE", // Single item (JOB_CATEGORIES)
"sector": "ACC", // Single item (SECTORS_MAPPING)
"sourceOfFunds": "SAV", // Single item (SOURCE_OF_FUNDS)
"purposes": "SLR,PNS,IVT,FRX,TUP", // List separated by comma of Purposes (PURPOSES_LIST)
"signature": "0x.........", // TAN signature using wallet (message to sign: https://api.fiat24.com/tan-signature)
"tanMessage": "Zürich, 13.06.2025 I confirm...", // Message signed by user (to be removed by /tan-signature)
"tanAddress": "0x....", // User's address used during signature
"tanDateMs": 123212312321 // Timestamp when user signed in ms
},
"address" : {
"countryISO3": "CHE", // Country ISO3 input by user
"street": "Sample Street", // Street input by user
"streetNumber": "123", // Street number input by user
"postalCode": "12345", // Zip input by user
"city": "Zürich", // City input by user
"gps": { "lat": 47.35055383741818, "lng": 8.560838999296362 }, // GPS of the input location
"addressProof": { "lat": 47.35055383741818, "lng": 8.560838999296362 }, // Current user coordinates
"reverseAddressProof": "Bellerivestrasse 245, Zurich 8008, Switzerland", // Reverse location using current user coordinates.
"distance": 0.1 // Distance between the two GPS points (in KM)
},
"id" : {
"gender": "M", // "M" or "F"
"firstName": "James", // in Latin
"lastName": "Bond", // in Latin
"nameOfHolder" : "詹姆斯·邦德", // First Name + Last Name in original language
"birthday": "27.06.1991",
"documentNumber": "ABCDE1234",
"documentType": "I", // "P", "I" (Passport or National ID)
"documentValidUntil": "27.06.2099",
"issuerCountry": "CHE",
"nationality": "CHE"
},
"files" : {
"clientProfilePdfUrl": "<url_to_sumsub_or_similar_pdf>",
"idVerificationPdfUrl": "<url_to_sumsub_or_similar_pdf>"
}
}
Response
The registration information has been submitted successfully, and all requirements have been met. Therefore, the client has been successfully accepted.
{
"status": 200,
"data": {
"status": "OK"
}
}
Reference values from the Request Body
Many fields in the request JSON body are enumerated values. The following JavaScript code provides a reference for all possible values.
const OCCUPATIONS = [
"EMP": "Employed",
"SLF": "Self-employed / Freelancer",
"RET": "Retired / Pension recipient",
"STU": "Trainee / Student",
"LOS": "Unemployed"
];
const JOB_CATEGORIES = [
"EEE": "Employee",
"MNG": "Manager",
"CLV": "C-Level / Executive Board",
"DIR": "Director / Member of the Management Board"
];
const PURPOSES_LIST = [
"SLR": "Salary account",
"EXP": "Living expenses",
"PNS": "Savings / Pension",
"PTP": "Peer-to-peer payments",
"IVT": "Investments",
"FRX": "Money exchange",
"TUP": "Crypto off-ramp"
]
const SOURCE_OF_FUNDS = [
"SAV": "Savings and Pension",
"BIZ": "Own business operations or salary",
"ERB": "Inheritance",
"INV": "Capital gain from traditional investments",
"DIG": "Digital Asset Investment",
"REA": "Capital gain from real estate",
"RUL": "Compensation from legal rulings"
];
const SECTORS_MAPPING = {
"ACC": "Accountancy",
"ADM": "Administrative / HR / Recruitment",
"SEX": "Adult Entertainment / Dating Business",
"AGR": "Agriculture / Forestry / Fishing",
"NUC": "Atomic/Nuclear-related",
"ANT": "Arts and Antiques Dealer",
"BRK": "Broker / Dealer",
"CAS": "Casinos / Gambling and connected (all forms)",
"TSM": "Catering and Restaurants / Hotel industry / Cleaning",
"NGO": "Charities and Social services / NGO / Religious or political organisations",
"BAU": "Construction / Real Estate",
"BTC": "Crypto Exchange / Broker",
"ART": "Culture / Entertainment / Theme parks ",
"EDU": "Education",
"WTR": "Electricity / Water Supply / Sewage / Waste Management",
"EMG": "Emergency Serving",
"BNK": "Financial Services - Retail Banking",
"PBK": "Financial Services - Private Banking",
"FIN": "Financial Services - Foreign Exchange Dealer",
"ISU": "Financial Services - Insurance",
"MTA": "Financial Services - Payment Services",
"TRA": "Financial Services – Regulated money transfer agent",
"GOV": "Government / Public Administration / Defence",
"MED": "Healthcare / Medical",
"INT": "Information Technology",
"JEW": "Jewellery incl. All Precious Stones and Metals",
"LAW": "Legal",
"MAN": "Manufacturing excl. tobacco",
"MKT": "Marketing / Media / Communications / Social media",
"MIN": "Mining and Quarrying",
"FAR": "Pharmaceuticals",
"OIL": "Oils and Gas",
"TBK": "Tobacco",
"SAL": "Retail sales excl. tobacco",
"RUB": "Rubber and Plastic",
"DEV": "Science / Engineering / Technology",
"WEL": "Sports and Wellness",
"SCW": "Social Work",
"TSP": "Transportation and Storage",
"WPN": "Weapon or Armament manufacturing and trade",
};
const NON_ALLOWED_SECTORS = [
"SEX", "ANT", "NUC", "BRK", "CAS", "NGO", "BTC", "EMG", "PBK", "FIN", "ISU", "TRA", "MTA", "GOV", "JEW", "MIN", "OIL", "FAR", "SCW", "TBK", "TSP", "WPN"
];
const SALARIES = {
"B1": "under 50'000",
"B2": "50'000 - 100'000",
"B3": "100'000 - 500'000",
"B4": "500'000 - 1'000'000",
"B5": "over 1'000'000",
}
const TOTAL_ASSETS = {
"B1": "under 100'000",
"B2": "100'000 - 500'000",
"B3": "500'000 - 1'000'000",
"B4": "1'000'000 - 10'000'000",
"B5": "over 10'000'000"
}
Form A - Message to Sign
POST https://api.fiat24.com/tan-signature
Request Body
{
"chainId" : 5000,
"nftId" : 10365,
"email" : "[email protected]",
"profile" : {
"annualSalary": "B2", // Single item (SALARIES)
"totalAssets": "B1", // Single item (TOTAL_ASSETS)
"mainOccupation": "EMP", // Single item (OCCUPATIONS)
"jobCategory": "EEE", // Single item (JOB_CATEGORIES)
"sector": "ACC", // Single item (SECTORS_MAPPING)
"sourceOfFunds": "SAV", // Single item (SOURCE_OF_FUNDS)
"purposes": "SLR,PNS,IVT,FRX,TUP", // List separated by comma of Purposes (PURPOSES_LIST)
},
"address" : {
"countryISO3": "CHE", // Country ISO3 input by user
"street": "Sample Street", // Street input by user
"streetNumber": "123", // Street number input by user
"postalCode": "12345", // Zip input by user
"city": "Zürich", // City input by user
"gps": { "lat": 47.35055383741818, "lng": 8.560838999296362 }, // GPS of the input location
"addressProof": { "lat": 47.35055383741818, "lng": 8.560838999296362 }, // Current user coordinates
"reverseAddressProof": "Bellerivestrasse 245, Zurich 8008, Switzerland", // Reverse location using current user coordinates.
"distance": 0.1 // Distance between the two GPS points (in KM)
},
"id" : {
"gender": "M", // "M" or "F"
"firstName": "James", // in Latin
"lastName": "Bond", // in Latin
"nameOfHolder" : "詹姆斯·邦德", // First Name + Last Name in original language
"birthday": "27.06.1991",
"documentNumber": "ABCDE1234",
"documentType": "I", // "P", "I" (Passport or National ID)
"documentValidUntil": "27.06.2099",
"issuerCountry": "CHE",
"nationality": "CHE"
}
}
Response
This information will be required for the registration API.
{
"status": 200,
"data": {
"tanDateMs": <int>,
"messageToSign": <string>
}
}
Last updated