Individual KYC
Basic Individual Verification
Standard KYC for individual customers with ID, liveness, and personal information.Copy
{
"name": "Individual KYC",
"description": "Standard individual verification with ID, liveness, and personal info",
"entity_types": ["individual"],
"steps": [
{
"step_id": "id_upload",
"order": 1,
"name": "Identity Document",
"type": "document_upload",
"instructions": "Upload a clear photo of your passport or government-issued ID",
"document_requirements": [
{
"document_type": "id",
"display_name": "Passport or ID Card",
"required": true,
"auto_extract": true
}
]
},
{
"step_id": "liveness",
"order": 2,
"name": "Identity Verification",
"type": "liveness",
"instructions": "Complete the liveness check to verify your identity",
"liveness_config": {
"min_confidence": 90.0,
"challenge_type": "FaceMovementChallenge",
"save_reference_image": true,
"use_for_face_match": true,
"max_retries": 3
}
},
{
"step_id": "personal_info",
"order": 3,
"name": "Personal Information",
"type": "form_fill",
"custom_fields": [
{
"field_id": "full_name",
"name": "Full Legal Name",
"type": "name",
"name_type": "individual",
"validate_lists": true,
"required": true
},
{
"field_id": "date_of_birth",
"name": "Date of Birth",
"type": "date",
"required": true,
"max_date": "today"
},
{
"field_id": "nationality",
"name": "Nationality",
"type": "country",
"country_type": "nationality",
"required": true
},
{
"field_id": "residence",
"name": "Country of Residence",
"type": "country",
"country_type": "residence",
"required": true
},
{
"field_id": "email",
"name": "Email Address",
"type": "email",
"validate_email": true,
"block_disposable": true,
"required": true
},
{
"field_id": "phone",
"name": "Phone Number",
"type": "phone",
"format": "international",
"required": true
}
]
}
],
"validation_config": {
"run_lists": true,
"run_adverse_media": false,
"auto_face_match": true,
"face_match_threshold": 0.85,
"automation_rules": {
"enabled": true,
"auto_process": true,
"country_rules": [
{"country_code": "KP", "action": "auto_deny", "applies_to": ["all"]},
{"country_code": "IR", "action": "manual_review", "applies_to": ["all"]},
{"country_code": "CU", "action": "manual_review", "applies_to": ["all"]},
{"country_code": "SY", "action": "auto_deny", "applies_to": ["all"]}
],
"list_match_rules": [
{"list_type": "any", "match_level": "high_confidence", "action": "auto_deny"}
],
"document_rules": [
{
"document_types": ["id"],
"expired_action": "auto_deny",
"max_days_until_expiry": 90,
"expiry_action": "flag"
}
],
"face_match_threshold": 0.85,
"face_match_action_on_fail": "auto_deny",
"default_action": "manual_review"
}
}
}
Enhanced Due Diligence (EDD)
For high-risk individuals with additional verification requirements.Copy
{
"name": "Enhanced Due Diligence",
"description": "Enhanced KYC for high-risk individuals",
"entity_types": ["individual"],
"steps": [
{
"step_id": "id_upload",
"order": 1,
"name": "Identity Documents",
"type": "document_upload",
"instructions": "Upload your passport AND a secondary ID (driver's license, national ID)",
"document_requirements": [
{
"document_type": "passport",
"display_name": "Passport",
"required": true,
"auto_extract": true
},
{
"document_type": "id",
"display_name": "Secondary ID",
"required": true,
"auto_extract": true
},
{
"document_type": "proof_of_address",
"display_name": "Proof of Address (utility bill, bank statement)",
"required": true,
"auto_extract": true
}
]
},
{
"step_id": "liveness",
"order": 2,
"name": "Liveness Verification",
"type": "liveness",
"liveness_config": {
"min_confidence": 95.0,
"challenge_type": "FaceMovementAndLightChallenge",
"save_reference_image": true,
"save_audit_images": true,
"use_for_face_match": true
}
},
{
"step_id": "personal_info",
"order": 3,
"name": "Personal Information",
"type": "form_fill",
"custom_fields": [
{
"field_id": "full_name",
"name": "Full Legal Name (as on passport)",
"type": "name",
"name_type": "individual",
"validate_lists": true,
"validate_adverse_media": true,
"required": true
},
{
"field_id": "date_of_birth",
"name": "Date of Birth",
"type": "date",
"required": true
},
{
"field_id": "nationality",
"name": "Nationality",
"type": "country",
"country_type": "nationality",
"required": true
},
{
"field_id": "tax_residence",
"name": "Country of Tax Residence",
"type": "country",
"country_type": "tax_residence",
"required": true
},
{
"field_id": "tax_id",
"name": "Tax ID Number",
"type": "document_id",
"id_type": "tax_id",
"validate_format": true,
"required": true
},
{
"field_id": "home_address",
"name": "Residential Address",
"type": "address",
"require_postal_code": true,
"require_country": true,
"country_type": "residence",
"required": true
},
{
"field_id": "occupation",
"name": "Occupation",
"type": "text",
"required": true
},
{
"field_id": "employer",
"name": "Employer Name",
"type": "name",
"name_type": "company",
"validate_lists": true,
"required": true
},
{
"field_id": "source_of_funds",
"name": "Primary Source of Funds",
"type": "select",
"options": ["Employment", "Business", "Investments", "Inheritance", "Savings", "Cryptocurrency", "Other"],
"required": true
},
{
"field_id": "source_of_funds_details",
"name": "Source of Funds Details",
"type": "text",
"required": true
},
{
"field_id": "pep_status",
"name": "Are you a Politically Exposed Person (PEP)?",
"type": "select",
"options": ["No", "Yes - Current PEP", "Yes - Former PEP", "Yes - Family member of PEP"],
"required": true
},
{
"field_id": "pep_details",
"name": "PEP Details (if applicable)",
"type": "text",
"required": false,
"conditional_logic": {
"show_when": {
"field_id": "pep_status",
"operator": "not_equals",
"value": "No"
}
}
},
{
"field_id": "expected_monthly_volume",
"name": "Expected Monthly Transaction Volume",
"type": "volume",
"currency": "USD",
"period": "monthly",
"apply_volume_rules": true,
"required": true
}
]
}
],
"validation_config": {
"run_lists": true,
"run_adverse_media": true,
"auto_face_match": true,
"face_match_threshold": 0.9,
"cross_validate_documents": true,
"automation_rules": {
"enabled": true,
"auto_process": true,
"country_rules": [
{"country_code": "KP", "action": "auto_deny", "applies_to": ["all"]},
{"country_code": "IR", "action": "auto_deny", "applies_to": ["all"]},
{"country_code": "SY", "action": "auto_deny", "applies_to": ["all"]}
],
"list_match_rules": [
{"list_type": "any", "match_level": "any", "entity_scope": "all", "action": "manual_review"},
{"list_type": "ofac", "match_level": "high_confidence", "action": "auto_deny"}
],
"face_dedup_config": {
"enabled": true,
"similarity_threshold": 0.92
},
"face_dedup_rules": [
{"min_previous_sessions": 1, "include_rejected": true, "action": "flag"}
],
"document_rules": [
{
"document_types": ["passport", "id"],
"expired_action": "auto_deny",
"max_days_until_expiry": 180,
"expiry_action": "flag",
"min_image_quality": "good",
"poor_quality_action": "manual_review"
},
{
"document_types": ["proof_of_address"],
"max_days_since_issue": 90,
"age_action": "flag"
}
],
"form_field_rules": [
{
"field_id": "pep_status",
"operator": "not_equals",
"value": "No",
"action": "manual_review",
"reason": "PEP declared"
},
{
"field_id": "source_of_funds",
"operator": "equals",
"value": "Cryptocurrency",
"action": "manual_review",
"reason": "Crypto source of funds"
}
],
"volume_rules": [
{"min_monthly_volume": 100000, "action": "manual_review"},
{"min_monthly_volume": 500000, "action": "flag"}
],
"face_match_threshold": 0.9,
"face_match_action_on_fail": "auto_deny",
"default_action": "manual_review"
}
}
}
Company KYC
Standard Company Verification
Complete company KYC with incorporation documents, directors, and beneficial owners.Copy
{
"name": "Company KYC",
"description": "Company verification with incorporation docs, directors, and UBOs",
"entity_types": ["company"],
"steps": [
{
"step_id": "company_docs",
"order": 1,
"name": "Company Documents",
"type": "document_upload",
"instructions": "Upload your company incorporation documents",
"document_requirements": [
{
"document_type": "articles_of_incorporation",
"display_name": "Articles of Incorporation / Certificate of Incorporation",
"required": true,
"auto_extract": true
},
{
"document_type": "tax_certificate",
"display_name": "Tax Registration Certificate",
"required": true,
"auto_extract": true
},
{
"document_type": "shareholder_registry",
"display_name": "Shareholder Registry (if applicable)",
"required": false,
"auto_extract": true
}
]
},
{
"step_id": "company_info",
"order": 2,
"name": "Company Information",
"type": "form_fill",
"custom_fields": [
{
"field_id": "company_name",
"name": "Legal Company Name",
"type": "name",
"name_type": "company",
"validate_lists": true,
"validate_adverse_media": true,
"required": true
},
{
"field_id": "trading_name",
"name": "Trading Name (if different)",
"type": "text",
"required": false
},
{
"field_id": "registration_number",
"name": "Company Registration Number",
"type": "document_id",
"id_type": "company_reg",
"required": true
},
{
"field_id": "incorporation_country",
"name": "Country of Incorporation",
"type": "country",
"country_type": "incorporation",
"required": true
},
{
"field_id": "incorporation_date",
"name": "Date of Incorporation",
"type": "date",
"required": true
},
{
"field_id": "tax_id",
"name": "Tax ID / VAT Number",
"type": "document_id",
"id_type": "tax_id",
"required": true
},
{
"field_id": "registered_address",
"name": "Registered Address",
"type": "address",
"require_postal_code": true,
"country_type": "business_operation",
"required": true
},
{
"field_id": "industry",
"name": "Industry",
"type": "select",
"options": ["Technology", "Financial Services", "E-commerce", "Manufacturing", "Healthcare", "Real Estate", "Professional Services", "Other"],
"required": true
},
{
"field_id": "website",
"name": "Company Website",
"type": "domain",
"auto_validate": true,
"required": true
},
{
"field_id": "email",
"name": "Company Email",
"type": "email",
"validate_email": true,
"required": true
},
{
"field_id": "phone",
"name": "Company Phone",
"type": "phone",
"format": "international",
"required": true
}
]
},
{
"step_id": "directors",
"order": 3,
"name": "Directors",
"type": "form_fill",
"instructions": "Provide information about all company directors",
"custom_fields": [
{
"field_id": "directors",
"name": "Company Directors",
"type": "entity_array",
"entity_role": "director",
"min_items": 1,
"max_items": 10,
"allow_company_entities": false,
"validate_lists": true,
"validate_adverse_media": false,
"required": true,
"item_schema": {
"full_name": {"type": "name", "name_type": "individual", "required": true},
"nationality": {"type": "country", "country_type": "nationality", "required": true},
"date_of_birth": {"type": "date", "required": true},
"email": {"type": "email", "required": true}
}
}
]
},
{
"step_id": "ubos",
"order": 4,
"name": "Beneficial Owners",
"type": "form_fill",
"instructions": "Provide information about all Ultimate Beneficial Owners (25%+ ownership)",
"custom_fields": [
{
"field_id": "beneficial_owners",
"name": "Ultimate Beneficial Owners",
"type": "entity_array",
"entity_role": "beneficial_owner",
"min_items": 1,
"max_items": 10,
"allow_company_entities": true,
"max_recursion_depth": 2,
"validate_lists": true,
"validate_adverse_media": true,
"required": true,
"item_schema": {
"full_name": {"type": "name", "required": true},
"nationality": {"type": "country", "country_type": "nationality", "required": true},
"date_of_birth": {"type": "date", "required": true},
"ownership_percentage": {"type": "percentage", "required": true},
"address": {"type": "address", "required": false}
}
}
]
},
{
"step_id": "rep_verification",
"order": 5,
"name": "Representative Verification",
"type": "document_upload",
"instructions": "The company representative must verify their identity",
"document_requirements": [
{
"document_type": "id",
"display_name": "Representative ID",
"required": true,
"auto_extract": true
}
]
},
{
"step_id": "rep_liveness",
"order": 6,
"name": "Representative Liveness",
"type": "liveness",
"liveness_config": {
"min_confidence": 90.0,
"use_for_face_match": true
}
}
],
"validation_config": {
"run_lists": true,
"run_adverse_media": true,
"auto_face_match": true,
"automation_rules": {
"enabled": true,
"auto_process": true,
"country_rules": [
{"country_code": "KP", "action": "auto_deny", "applies_to": ["all"]},
{"country_code": "IR", "action": "auto_deny", "applies_to": ["incorporation"]}
],
"list_match_rules": [
{"list_type": "any", "match_level": "high_confidence", "entity_scope": "all", "action": "auto_deny"},
{"list_type": "pep", "entity_scope": "primary", "action": "manual_review"},
{"list_type": "pep", "entity_scope": "related_parties", "action": "flag"}
],
"web_validation_rules": {
"enabled": true,
"score_rules": [
{"max_score": 40, "action": "auto_deny"},
{"min_score": 70, "action": "no_action"}
],
"ssl_rules": {
"on_no_ssl": "flag",
"on_invalid_ssl": "flag"
},
"industry_rules": {
"blocked_industries": ["Gambling", "Adult Content", "Weapons"],
"on_blocked": "auto_deny",
"on_mismatch": "flag"
}
},
"default_action": "manual_review"
}
}
}
Merchant Onboarding
Payment Facilitator Merchant Verification
Complete merchant onboarding with business verification and sub-merchant samples.Copy
{
"name": "Merchant Onboarding",
"description": "Payment facilitator merchant verification",
"entity_types": ["company"],
"industry": "Payments",
"steps": [
{
"step_id": "business_docs",
"order": 1,
"name": "Business Documents",
"type": "document_upload",
"document_requirements": [
{"document_type": "business_license", "required": true, "auto_extract": true},
{"document_type": "articles_of_incorporation", "required": true, "auto_extract": true},
{"document_type": "bank_letter", "display_name": "Bank Reference Letter", "required": true}
]
},
{
"step_id": "business_info",
"order": 2,
"name": "Business Information",
"type": "form_fill",
"custom_fields": [
{
"field_id": "company_name",
"name": "Legal Business Name",
"type": "name",
"name_type": "company",
"validate_lists": true,
"required": true
},
{
"field_id": "dba",
"name": "DBA / Trading As",
"type": "text",
"required": false
},
{
"field_id": "website",
"name": "Business Website",
"type": "domain",
"auto_validate": true,
"required": true
},
{
"field_id": "mcc",
"name": "Merchant Category Code (MCC)",
"type": "text",
"required": true,
"placeholder": "e.g., 5411"
},
{
"field_id": "industry",
"name": "Industry",
"type": "select",
"options": ["E-commerce", "Retail", "Travel", "Gaming", "Digital Goods", "SaaS", "Marketplaces", "Other"],
"required": true
},
{
"field_id": "business_model",
"name": "Business Model Description",
"type": "text",
"required": true
},
{
"field_id": "incorporation_country",
"name": "Country of Incorporation",
"type": "country",
"country_type": "incorporation",
"required": true
},
{
"field_id": "operating_countries",
"name": "Countries of Operation",
"type": "multi_select",
"options": ["United States", "Canada", "United Kingdom", "EU", "Asia Pacific", "Latin America", "Global"],
"required": true
}
]
},
{
"step_id": "volume_info",
"order": 3,
"name": "Transaction Volume",
"type": "form_fill",
"custom_fields": [
{
"field_id": "monthly_volume",
"name": "Expected Monthly Volume",
"type": "volume",
"currency": "USD",
"period": "monthly",
"include_transaction_count": true,
"apply_volume_rules": true,
"required": true
},
{
"field_id": "average_ticket",
"name": "Average Transaction Amount",
"type": "currency",
"currency": "USD",
"required": true
},
{
"field_id": "chargeback_rate",
"name": "Current Chargeback Rate (%)",
"type": "percentage",
"max_percentage": 100,
"required": true
},
{
"field_id": "refund_rate",
"name": "Current Refund Rate (%)",
"type": "percentage",
"required": true
}
]
},
{
"step_id": "principals",
"order": 4,
"name": "Principals & Owners",
"type": "form_fill",
"custom_fields": [
{
"field_id": "principals",
"name": "Business Principals (25%+ ownership or control)",
"type": "entity_array",
"entity_role": "beneficial_owner",
"min_items": 1,
"validate_lists": true,
"required": true,
"item_schema": {
"full_name": {"type": "name", "required": true},
"title": {"type": "text", "required": true},
"nationality": {"type": "country", "country_type": "nationality", "required": true},
"date_of_birth": {"type": "date", "required": true},
"ssn_last4": {"type": "text", "required": false},
"ownership_percentage": {"type": "percentage", "required": true},
"email": {"type": "email", "required": true}
}
}
]
},
{
"step_id": "sub_merchants",
"order": 5,
"name": "Sample Sub-Merchants",
"type": "form_fill",
"instructions": "Provide 3-5 sample sub-merchants you will onboard",
"custom_fields": [
{
"field_id": "sub_merchants",
"name": "Sub-Merchant Samples",
"type": "sub_merchant",
"min_items": 3,
"max_items": 5,
"require_industry": true,
"require_sample_url": true,
"required": true
}
]
},
{
"step_id": "rep_verification",
"order": 6,
"name": "Authorized Representative",
"type": "document_upload",
"document_requirements": [
{"document_type": "id", "display_name": "Representative ID", "required": true, "auto_extract": true}
]
},
{
"step_id": "rep_liveness",
"order": 7,
"name": "Representative Verification",
"type": "liveness",
"liveness_config": {
"min_confidence": 90.0,
"use_for_face_match": true
}
}
],
"validation_config": {
"run_lists": true,
"run_adverse_media": true,
"auto_face_match": true,
"automation_rules": {
"enabled": true,
"auto_process": true,
"country_rules": [
{"country_code": "KP", "action": "auto_deny", "applies_to": ["all"]},
{"country_code": "IR", "action": "auto_deny", "applies_to": ["all"]}
],
"list_match_rules": [
{"list_type": "any", "match_level": "high_confidence", "action": "auto_deny"}
],
"volume_rules": [
{"min_monthly_volume": 1000000, "action": "manual_review"},
{"min_monthly_volume": 10000000, "action": "flag"}
],
"form_field_rules": [
{
"field_id": "industry",
"operator": "equals",
"value": "Gaming",
"action": "manual_review",
"reason": "Gaming industry requires enhanced review"
},
{
"field_id": "chargeback_rate",
"operator": "gt",
"value": 1,
"action": "flag",
"reason": "High chargeback rate"
}
],
"web_validation_rules": {
"enabled": true,
"score_rules": [
{"max_score": 50, "action": "auto_deny"}
],
"ssl_rules": {
"on_no_ssl": "auto_deny"
},
"industry_rules": {
"blocked_industries": ["Gambling", "Adult", "Weapons", "Drugs"],
"on_blocked": "auto_deny"
},
"page_evidence_rules": {
"on_unrealistic_promises": "auto_deny",
"require_phone": true,
"require_email": true
}
},
"default_action": "manual_review"
}
}
}
Crypto Wallet Verification
Crypto Exchange Customer Verification
KYC for crypto exchange customers with wallet verification.Copy
{
"name": "Crypto Exchange KYC",
"description": "Customer verification for crypto exchange with wallet checks",
"entity_types": ["individual"],
"steps": [
{
"step_id": "id_upload",
"order": 1,
"name": "Identity Document",
"type": "document_upload",
"document_requirements": [
{"document_type": "id", "required": true, "auto_extract": true}
]
},
{
"step_id": "liveness",
"order": 2,
"name": "Liveness Check",
"type": "liveness",
"liveness_config": {
"min_confidence": 92.0,
"challenge_type": "FaceMovementAndLightChallenge",
"use_for_face_match": true
}
},
{
"step_id": "personal_info",
"order": 3,
"name": "Personal Information",
"type": "form_fill",
"custom_fields": [
{
"field_id": "full_name",
"name": "Full Name",
"type": "name",
"name_type": "individual",
"validate_lists": true,
"required": true
},
{
"field_id": "date_of_birth",
"name": "Date of Birth",
"type": "date",
"required": true
},
{
"field_id": "nationality",
"name": "Nationality",
"type": "country",
"country_type": "nationality",
"required": true
},
{
"field_id": "residence",
"name": "Country of Residence",
"type": "country",
"country_type": "residence",
"required": true
},
{
"field_id": "email",
"name": "Email",
"type": "email",
"validate_email": true,
"block_disposable": true,
"required": true
}
]
},
{
"step_id": "crypto_info",
"order": 4,
"name": "Crypto Information",
"type": "form_fill",
"custom_fields": [
{
"field_id": "experience_level",
"name": "Crypto Experience Level",
"type": "select",
"options": ["Beginner", "Intermediate", "Advanced", "Professional"],
"required": true
},
{
"field_id": "source_of_crypto",
"name": "Source of Cryptocurrency",
"type": "select",
"options": ["Mining", "Trading", "Employment/Salary", "Investment Returns", "Gifts", "Other"],
"required": true
},
{
"field_id": "expected_monthly_volume",
"name": "Expected Monthly Trading Volume",
"type": "volume",
"currency": "USD",
"period": "monthly",
"apply_volume_rules": true,
"required": true
},
{
"field_id": "eth_wallet",
"name": "Ethereum Wallet (optional)",
"type": "wallet",
"blockchain": "ethereum",
"validate_crypto": true,
"required": false
},
{
"field_id": "btc_wallet",
"name": "Bitcoin Wallet (optional)",
"type": "wallet",
"blockchain": "bitcoin",
"validate_crypto": true,
"required": false
}
]
}
],
"validation_config": {
"run_lists": true,
"run_crypto": true,
"run_adverse_media": true,
"auto_face_match": true,
"automation_rules": {
"enabled": true,
"auto_process": true,
"country_rules": [
{"country_code": "KP", "action": "auto_deny", "applies_to": ["all"]},
{"country_code": "IR", "action": "auto_deny", "applies_to": ["all"]},
{"country_code": "US", "action": "flag", "applies_to": ["residence"], "reason": "US residence requires additional compliance"}
],
"list_match_rules": [
{"list_type": "any", "match_level": "high_confidence", "action": "auto_deny"}
],
"volume_rules": [
{"min_monthly_volume": 50000, "action": "manual_review"},
{"min_monthly_volume": 250000, "action": "flag"}
],
"face_dedup_config": {
"enabled": true,
"similarity_threshold": 0.95
},
"face_dedup_rules": [
{"min_previous_sessions": 1, "include_rejected": true, "action": "auto_deny"}
],
"default_action": "manual_review",
"watchlist_auto_add": {
"enabled": true,
"rules": [
{
"trigger_on": "rejected",
"watchlist_id": "wl_crypto_rejected",
"entity_types": ["individual", "wallet"],
"ttl_days": 365
}
]
}
}
}
}
Frontend Integration
JavaScript/TypeScript SDK Example
Copy
interface WorkflowStep {
step_id: string;
order: number;
name: string;
type: 'document_upload' | 'form_fill' | 'selfie' | 'liveness' | 'validation';
instructions?: string;
required?: boolean;
document_requirements?: DocumentRequirement[];
custom_fields?: CustomField[];
liveness_config?: LivenessConfig;
}
interface CustomField {
field_id: string;
name: string;
type: string;
required: boolean;
// Type-specific properties
[key: string]: any;
}
interface LivenessConfig {
min_confidence: number;
challenge_type: 'FaceMovementChallenge' | 'FaceMovementAndLightChallenge';
save_reference_image: boolean;
use_for_face_match: boolean;
max_retries: number;
}
// Create workflow
async function createWorkflow(workflow: any): Promise<string> {
const response = await fetch('https://kyc.legaltalent.ai/kyc/workflows', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(workflow)
});
const data = await response.json();
return data.data.workflow_id;
}
// Create session from workflow
async function createSession(workflowId: string, metadata: any): Promise<{ sessionId: string; accessLink: string }> {
const response = await fetch('https://kyc.legaltalent.ai/kyc/sessions', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
workflow_id: workflowId,
ttl_days: 7,
metadata
})
});
const data = await response.json();
return {
sessionId: data.data.session_id,
accessLink: data.data.access_link
};
}
// Get workflow to render steps
async function getWorkflow(workflowId: string): Promise<WorkflowStep[]> {
const response = await fetch(`https://kyc.legaltalent.ai/kyc/workflows/${workflowId}`, {
headers: { 'Authorization': `Bearer ${token}` }
});
const data = await response.json();
return data.data.steps;
}
// Render form fields based on type
function renderField(field: CustomField): JSX.Element {
switch (field.type) {
case 'country':
return <CountrySelect
label={field.name}
countryType={field.country_type}
blockedCountries={field.blocked_countries}
required={field.required}
/>;
case 'name':
return <NameInput
label={field.name}
nameType={field.name_type}
required={field.required}
/>;
case 'wallet':
return <WalletInput
label={field.name}
blockchain={field.blockchain}
required={field.required}
/>;
case 'entity_array':
return <EntityArrayInput
label={field.name}
entityRole={field.entity_role}
minItems={field.min_items}
maxItems={field.max_items}
itemSchema={field.item_schema}
/>;
// ... other field types
default:
return <TextInput label={field.name} required={field.required} />;
}
}
Processing Results Handler
Copy
interface ProcessingResult {
final_decision: 'approved' | 'rejected' | 'manual_review';
automation_flags: AutomationFlag[];
extraction_results: Record<string, any>;
face_match_result?: FaceMatchResult;
watchlist_subjects_added?: WatchlistSubject[];
}
interface AutomationFlag {
rule_type: string;
action: string;
reason: string;
details: Record<string, any>;
}
function handleProcessingResult(result: ProcessingResult) {
// Display decision
if (result.final_decision === 'approved') {
showSuccess('Verification approved!');
} else if (result.final_decision === 'rejected') {
showError('Verification rejected');
// Show rejection reasons
const denyFlags = result.automation_flags
.filter(f => f.action === 'auto_deny');
denyFlags.forEach(flag => {
console.log(`Rejection reason: ${flag.reason}`);
});
} else {
showWarning('Manual review required');
// Show review reasons
const reviewFlags = result.automation_flags
.filter(f => f.action === 'manual_review' || f.action === 'flag');
reviewFlags.forEach(flag => {
console.log(`Review reason: ${flag.reason}`);
});
}
}
Related Documentation
- Workflows Overview - API endpoints
- Step Types - Step configuration
- Field Types - Field reference
- Automation Rules - Automation configuration
- Sessions - Session management