Environment
Sandbox Production
API Key *
Test Credentials:
Sandbox Key: WL-SANDBOX-TEST-1234-5678-9012
Demo Customer ID: cmh8x9k5w01nla23ccabmclkq (KYC Approved)
API Base URLs
API Base URL: https://sandbox-api.trustodi.com
Use this base URL with your partner API key for all API requests.
POST

Create Customer with KYC

/api/partner/create-customer-kyc

Create a new customer and automatically generate a KYC verification link. All customers must complete KYC before creating virtual accounts.

Request Body
Response includes: Customer ID + KYC verification link. Share the KYC link with your customer to complete verification.
V1 contract endpoints (full field set)
POST /api/trustodi/v1/{clientId}/customers
POST /api/trustodi/v1/{clientId}/customers Both paths resolve to the same handler. Use the X-API-Key header.
Strictly required (always): type (INDIVIDUAL | BUSINESS), email
High-risk required (to clear KYC): phone, address.streetLine1, address.city, address.subdivision, address.postalCode, address.countryCode, accountPurpose, sourceOfFunds, expectedMonthlyPaymentsUSD, governmentIssuedIdentification.{type, countryCode, number, frontImage} — plus, for INDIVIDUAL: firstName, lastName, dateOfBirth, employmentStatus, mostRecentOccupation — plus, for BUSINESS: businessName, registrationNumber, registrationDate, businessType, industry, website, description, taxIdentificationNumber.
Optional: referenceId, middleName, transliteratedFirstName/MiddleName/LastName, transliteratedAddress, phoneCountryCode, ipAddress, capabilities, redirectUrl, accountPurposeExplanation (required when accountPurpose=OTHER), actingAsIntermediary, isDao (BUSINESS), governmentIssuedIdentification.{backImage, issuanceDate, expirationDate}, supportingDocuments[].
Enums: type: INDIVIDUAL, BUSINESS · governmentIssuedIdentification.type: PASSPORT, NATIONAL_ID, DRIVERS_LICENSE, RESIDENCE_PERMIT · employmentStatus: EMPLOYED, HOMEMAKER, RETIRED, SELF_EMPLOYED, STUDENT, UNEMPLOYED · expectedMonthlyPaymentsUSD: UNDER_FIVE_THOUSAND, FIVE_THOUSAND_TO_TEN_THOUSAND, TEN_THOUSAND_TO_FIFTY_THOUSAND, FIFTY_THOUSAND_PLUS · sourceOfFunds: COMPANY_FUNDS, ECOMMERCE_RESELLER, GAMBLING_PROCEEDS, GIFTS, GOVERNMENT_BENEFITS, INHERITANCE, INVESTMENTS_LOANS, PENSION_RETIREMENT, SALARY, SALE_OF_ASSETS_REAL_ESTATE, SAVINGS, SOMEONE_ELSES_FUNDS · accountPurpose: 11 values (CHARITABLE_DONATIONS, ECOMMERCE_RETAIL_PAYMENTS, INVESTMENT_PURPOSES, OPERATING_A_COMPANY, OTHER, PAYMENTS_TO_FRIENDS_OR_FAMILY_ABROAD, PERSONAL_OR_LIVING_EXPENSES, PROTECT_WEALTH, PURCHASE_GOODS_AND_SERVICES, RECEIVE_PAYMENT_FOR_FREELANCING, RECEIVE_SALARY) · businessType: see contract module.
Notes. The validator accepts both camelCase and snake_case input (e.g. first_name / firstName) and normalises legacy enum values (LLC → LIMITED_LIABILITY_COMPANY). Errors are returned as { code: "TRUSTODI_*", message, field, details: [...] }. All dates are YYYY-MM-DD; phone is E.164; country codes are ISO 3166-1 alpha-2; document images are base64 data URIs.
Redirect after KYC/KYB. The optional redirectUrl / redirect_url field controls where your customer lands after finishing (or exiting) verification. Resolution precedence: per-request redirect_url → your partner-level default (set in Partner Dashboard → API Management → KYC/KYB Completion Redirect) → the TRUSTODI completion page. Set the dashboard default once so customers return to your own site without sending redirect_url on every call.