Unregistered VASP Condensed Flow
Create complete transactions to unknown or unregistered Virtual Asset Service Providers (VASPs) with automatic KYC screening and simplified workflow in a single API call.
Use Case
Ideal for transactions where the beneficiary uses a VASP that is not registered in the system's VASP directory. The system automatically creates a placeholder VASP record and handles the simplified workflow.
Key Features
- Automatic VASP Creation: Creates placeholder VASP record
- Website-Based Identification: Uses beneficiary VASP website URL
- Simplified Workflow: Skips standard VASP communication protocols
- Enhanced Risk Assessment: Additional screening for unknown entities
- Compliance Maintained: Full regulatory compliance despite unknown VASP
Request
Endpoint: POST https://api.trpcontinuum.com/trp/transactions/condensed
Headers:
Content-Type: application/json
Authorization: Bearer {your-token}
Request Body:
{
"transaction": {
"network": "bitcoin",
"virtualAsset": "Bitcoin (BTC)",
"amount": "75.00",
"beneficiaryWalletAddress": "bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh",
"originatorWalletAddress": "bc1qabc123def456ghi789jkl012mno345pqr678stu",
"memo": "Payment to unregistered VASP"
},
"beneficiary": {
"unregisteredVaspWebsite": "https://unknown-vasp.com",
"beneficiaryIsLegalPerson": false,
"beneficiaryFirstName": "Jane",
"beneficiaryLastName": "Smith",
"dateOfBirth": "1990-12-10",
"placeOfBirth": "Seattle, WA",
"beneficiaryIdNumber": "333444555",
"beneficiaryIdType": "PASSPORT",
"beneficiaryIdCountryOfIssue": "US",
"buildingNumber": "321",
"streetName": "Unknown Street",
"townName": "Seattle",
"postCode": "98101",
"country": "US"
},
"originator": {
"originatorIsLegalPerson": false,
"originatorFirstName": "John",
"originatorLastName": "Doe",
"originatorDob": "1985-03-20",
"originatorPlaceOfBirth": "Chicago, IL",
"originatorIdNumber": "987654321",
"originatorIdType": "PASSPORT",
"originatorIdCountryOfIssue": "US",
"originatorAddressLine1": "456 Oak Street",
"originatorAddressLine2": "Apt 2C",
"originatorCity": "San Francisco",
"originatorState": "CA",
"originatorPostalCode": "94102",
"originatorCountry": "US"
}
}
Response Examples
Success (No KYC Matches)
{
"success": true,
"data": {
"id": "txn_unreg123",
"status": "Waiting for TX Hash",
"network": "bitcoin",
"virtualAsset": "Bitcoin (BTC)",
"amount": "75.00",
"beneficiaryWalletAddress": "bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh",
"originatorWalletAddress": "bc1qabc123def456ghi789jkl012mno345pqr678stu",
"beneficiary": {
"beneficiaryFirstName": "Jane",
"beneficiaryLastName": "Smith",
"unregisteredVaspWebsite": "https://unknown-vasp.com",
"beneficiaryVaspName": "UNREGISTERED-VASP"
},
"originator": {
"originatorFirstName": "John",
"originatorLastName": "Doe"
},
"vaspInfo": {
"isRegistered": false,
"placeholderCreated": true,
"website": "https://unknown-vasp.com",
"riskAssessment": {
"websiteValid": true,
"domainAge": "unknown",
"sslCertificate": true,
"riskScore": 0.3
}
},
"kycCheck": {
"hasMatches": false,
"totalMatches": 0,
"beneficiaryChecked": true,
"originatorChecked": true,
"unregisteredVaspScreening": true,
"screenedAt": "2024-08-07T10:00:00Z"
},
"workflowType": "unregistered_vasp",
"autoSkippedSteps": [
"send_to_beneficiary_vasp",
"approve_originator",
"payment_check"
],
"createdAt": "2024-08-07T10:00:00Z",
"updatedAt": "2024-08-07T10:00:00Z"
}
}
Success (KYC Matches Found)
{
"success": true,
"data": {
"id": "txn_unreg456",
"status": "KYC Beneficiary Pending Review",
"network": "bitcoin",
"virtualAsset": "Bitcoin (BTC)",
"amount": "75.00",
"vaspInfo": {
"isRegistered": false,
"placeholderCreated": true,
"website": "https://suspicious-vasp.com",
"riskAssessment": {
"websiteValid": true,
"domainAge": "30 days",
"sslCertificate": false,
"riskScore": 0.8,
"riskFactors": ["new_domain", "no_ssl", "unknown_jurisdiction"]
}
},
"kycCheck": {
"hasMatches": true,
"totalMatches": 2,
"beneficiaryMatches": 1,
"originatorMatches": 0,
"vaspMatches": 1,
"topMatch": {
"score": 0.91,
"name": "Jane Smith",
"riskLevel": "high",
"sources": ["sanctions"],
"details": {
"birthDate": "1990-12-10",
"country": "US",
"matchType": "name_dob_country",
"vaspType": "unregistered"
}
},
"matches": [
{
"score": 0.91,
"name": "Jane Smith",
"type": "beneficiary",
"sources": ["sanctions"]
},
{
"score": 0.75,
"name": "suspicious-vasp.com",
"type": "vasp",
"sources": ["regulatory_warnings"]
}
],
"unregisteredVaspScreening": true,
"enhancedScreening": {
"vaspWebsiteAnalysis": true,
"domainRiskScore": 0.8,
"jurisdictionRisk": "unknown"
},
"screenedAt": "2024-08-07T10:00:00Z"
},
"workflowType": "unregistered_vasp",
"createdAt": "2024-08-07T10:00:00Z",
"updatedAt": "2024-08-07T10:00:00Z"
}
}
Required Fields
Transaction
network- Blockchain networkvirtualAsset- Asset nameamount- Transaction amount as stringbeneficiaryWalletAddress- Recipient wallet addressoriginatorWalletAddress- Sender wallet address
Beneficiary (Unregistered VASP)
unregisteredVaspWebsite- VASP website URL (must be valid HTTPS URL)beneficiaryIsLegalPerson-trueorfalse- Natural Person:
beneficiaryFirstName,beneficiaryLastName,dateOfBirth - Legal Person:
beneficiaryLegalName,dateOfIncorporation country- Country code (ISO 3166-1 alpha-2)
Originator
originatorIsLegalPerson-trueorfalse- Natural Person:
originatorFirstName,originatorLastName,originatorDob - Legal Person:
originatorLegalName,originatorDateOfIncorporation originatorCountry- Country code
Unregistered VASP Processing
Automatic VASP Record Creation
When unregisteredVaspWebsite is provided, the system:
- Creates Placeholder VASP: Temporary record with website information
- Validates Website: Checks URL accessibility and SSL certificate
- Risk Assessment: Analyzes domain age, jurisdiction, and other factors
- Sets VASP Name: Uses "UNREGISTERED-VASP" as identifier
Website Validation
The system performs automatic validation:
- URL Format: Must be valid HTTPS URL
- Domain Accessibility: Website must be reachable
- SSL Certificate: Checks for valid certificate
- Content Analysis: Basic website legitimacy checks
Risk Scoring Factors
Unregistered VASPs receive enhanced risk scoring based on:
- Domain Age: Newer domains higher risk
- SSL Certificate: Missing certificates increase risk
- Jurisdiction: Unknown/high-risk jurisdictions
- Website Content: Professional appearance and crypto-related content
- Regulatory Warnings: Known issues or warnings
Workflow Automation
Automatic Skip Steps
For unregistered VASPs, the system automatically skips:
- Send to Beneficiary VASP: No API endpoints available
- Approve Originator: No VASP to perform approval
- Payment Check: No VASP payment verification
- Direct to TX Hash: Ready for blockchain execution
Status Progression (No KYC Matches)
Waiting for TX Hash- Ready for blockchain transaction- Submit TX hash via
/tx-hash-submitendpoint Tx Hash Sent Successfully- Transaction complete
Status Progression (With KYC Matches)
KYC Beneficiary Pending Review- Manual review required- After KYC approval →
Waiting for TX Hash - Submit TX hash →
Tx Hash Sent Successfully
Enhanced KYC Screening
Additional Screening Elements
Unregistered VASP transactions receive enhanced screening:
- VASP Website Analysis: Domain reputation and content analysis
- Jurisdiction Assessment: Geographic risk evaluation
- Regulatory Database Checks: Known warnings or enforcement actions
- Enhanced Entity Screening: Stricter matching thresholds
- Transaction Pattern Analysis: Historical patterns with unknown VASPs
VASP-Specific Risks
Higher scrutiny for:
- Newly registered domains (< 6 months)
- Missing SSL certificates
- Anonymous domain registration
- High-risk jurisdictions
- Previous regulatory warnings
- Suspicious website content or functionality
Code Examples
JavaScript/Node.js
const axios = require('axios');
const URL = require('url');
async function createUnregisteredVaspTransaction() {
// Validate VASP website URL first
const vaspWebsite = "https://unknown-crypto-exchange.com";
if (!isValidVaspWebsite(vaspWebsite)) {
throw new Error("Invalid VASP website URL");
}
try {
const response = await axios.post('https://api.trpcontinuum.com/trp/transactions/condensed', {
transaction: {
network: "ethereum",
virtualAsset: "Ethereum (ETH)",
amount: "100.0",
beneficiaryWalletAddress: "0x742C4B4f7c1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e",
originatorWalletAddress: "0x123abc456def789ghi012jkl345mno678pqr901stu",
memo: "Payment to unknown exchange"
},
beneficiary: {
unregisteredVaspWebsite: vaspWebsite,
beneficiaryIsLegalPerson: false,
beneficiaryFirstName: "Sarah",
beneficiaryLastName: "Connor",
dateOfBirth: "1985-05-12",
country: "US",
beneficiaryIdNumber: "555123789",
beneficiaryIdType: "DRIVERS_LICENSE"
},
originator: {
originatorIsLegalPerson: false,
originatorFirstName: "Kyle",
originatorLastName: "Reese",
originatorDob: "1980-08-15",
originatorCountry: "US"
}
}, {
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
}
});
if (response.data.success) {
const transaction = response.data.data;
console.log(`Unregistered VASP transaction created: ${transaction.id}`);
console.log(`VASP Website: ${transaction.vaspInfo.website}`);
console.log(`VASP Risk Score: ${transaction.vaspInfo.riskAssessment.riskScore}`);
if (transaction.kycCheck.hasMatches) {
console.log(`⚠️ Enhanced review required`);
console.log(`Found ${transaction.kycCheck.totalMatches} matches including VASP risks`);
// Log specific risk factors
if (transaction.vaspInfo.riskAssessment.riskFactors) {
console.log(`Risk factors: ${transaction.vaspInfo.riskAssessment.riskFactors.join(', ')}`);
}
// Handle enhanced compliance review
await handleEnhancedComplianceReview(transaction.id);
} else {
console.log(`✅ Ready for execution (${transaction.status})`);
console.log(`Auto-skipped: ${transaction.autoSkippedSteps.join(', ')}`);
// Proceed to blockchain execution
await executeTransactionToUnregisteredVasp(transaction);
}
}
} catch (error) {
console.error('Unregistered VASP transaction failed:', error.response?.data);
}
}
function isValidVaspWebsite(url) {
try {
const parsedUrl = new URL(url);
return parsedUrl.protocol === 'https:' && parsedUrl.hostname;
} catch (e) {
return false;
}
}
async function handleEnhancedComplianceReview(transactionId) {
// Implementation for enhanced compliance review
console.log(`Initiating enhanced compliance review for transaction ${transactionId}`);
// Could trigger additional checks:
// - Manual VASP website review
// - Enhanced background checks
// - Senior compliance officer approval
}
async function executeTransactionToUnregisteredVasp(transaction) {
console.log(`Executing blockchain transaction for unregistered VASP`);
console.log(`Amount: ${transaction.amount} ${transaction.virtualAsset}`);
console.log(`Destination: ${transaction.beneficiaryWalletAddress}`);
// Execute blockchain transaction
const txHash = await broadcastTransaction(transaction);
// Submit transaction hash
await submitTransactionHash(transaction.id, txHash);
}
Python
import requests
import validators
from urllib.parse import urlparse
def create_unregistered_vasp_transaction():
vasp_website = "https://unknown-crypto-exchange.com"
# Validate VASP website
if not is_valid_vasp_website(vasp_website):
raise ValueError("Invalid VASP website URL")
payload = {
"transaction": {
"network": "ethereum",
"virtualAsset": "Ethereum (ETH)",
"amount": "100.0",
"beneficiaryWalletAddress": "0x742C4B4f7c1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e",
"originatorWalletAddress": "0x123abc456def789ghi012jkl345mno678pqr901stu",
"memo": "Payment to unknown exchange"
},
"beneficiary": {
"unregisteredVaspWebsite": vasp_website,
"beneficiaryIsLegalPerson": False,
"beneficiaryFirstName": "Sarah",
"beneficiaryLastName": "Connor",
"dateOfBirth": "1985-05-12",
"country": "US",
"beneficiaryIdNumber": "555123789",
"beneficiaryIdType": "DRIVERS_LICENSE"
},
"originator": {
"originatorIsLegalPerson": False,
"originatorFirstName": "Kyle",
"originatorLastName": "Reese",
"originatorDob": "1980-08-15",
"originatorCountry": "US"
}
}
response = requests.post(
'https://api.trpcontinuum.com/trp/transactions/condensed',
json=payload,
headers={
'Authorization': f'Bearer {token}',
'Content-Type': 'application/json'
}
)
if response.status_code == 200:
data = response.json()
if data['success']:
transaction = data['data']
print(f"Unregistered VASP transaction: {transaction['id']}")
print(f"VASP Website: {transaction['vaspInfo']['website']}")
print(f"Risk Assessment: {transaction['vaspInfo']['riskAssessment']}")
if transaction['kycCheck']['hasMatches']:
print("🚨 Enhanced compliance review required")
handle_enhanced_review(transaction)
else:
print("✅ Approved for execution")
execute_transaction(transaction)
else:
print(f"Transaction failed: {data.get('message', 'Unknown error')}")
else:
print(f"HTTP Error: {response.status_code} - {response.text}")
def is_valid_vasp_website(url):
"""Validate VASP website URL format"""
if not validators.url(url):
return False
parsed = urlparse(url)
return parsed.scheme == 'https' and parsed.netloc
def handle_enhanced_review(transaction):
"""Handle enhanced compliance review for unregistered VASP"""
print("Initiating enhanced review process...")
# Check risk factors
risk_factors = transaction['vaspInfo']['riskAssessment'].get('riskFactors', [])
print(f"Risk factors identified: {', '.join(risk_factors)}")
# Could trigger:
# - Manual VASP verification
# - Enhanced background checks
# - Senior approval requirements
def execute_transaction(transaction):
"""Execute blockchain transaction for unregistered VASP"""
print(f"Executing transaction to unregistered VASP")
print(f"Workflow type: {transaction['workflowType']}")
print(f"Skipped steps: {', '.join(transaction['autoSkippedSteps'])}")
# Blockchain execution would happen here
# tx_hash = broadcast_to_blockchain(transaction)
# submit_tx_hash(transaction['id'], tx_hash)
Compliance Considerations
Enhanced Due Diligence
Unregistered VASP transactions typically require:
- Manual VASP Verification: Research and validation of unknown entity
- Website Content Review: Analysis of VASP website and services
- Jurisdiction Assessment: Geographic and regulatory risk evaluation
- Enhanced Background Checks: Deeper investigation of beneficiary/VASP relationship
- Senior Approval: Higher-level compliance sign-off
Regulatory Reporting
Special considerations for unregistered VASPs:
- Suspicious Activity Monitoring: Enhanced transaction monitoring
- Regulatory Notifications: May require special reporting to authorities
- Record Keeping: Additional documentation and justification required
- Ongoing Monitoring: Continued surveillance of unregistered entities
Risk Mitigation
Strategies for managing unregistered VASP risks:
- Transaction Limits: Lower limits for unknown entities
- Enhanced Screening: Stricter KYC and sanctions screening
- Regular Reviews: Periodic reassessment of unregistered VASPs
- Relationship Monitoring: Tracking ongoing interactions
Common Errors
Invalid Website URL
{
"success": false,
"error": "INVALID_VASP_WEBSITE",
"message": "Unregistered VASP website URL is invalid or unreachable",
"details": {
"website": "http://invalid-site",
"issues": ["not_https", "unreachable"],
"requirement": "Must be valid HTTPS URL to accessible website"
}
}
High-Risk VASP Rejected
{
"success": false,
"error": "HIGH_RISK_VASP_REJECTED",
"message": "Unregistered VASP deemed too high risk",
"details": {
"website": "https://suspicious-exchange.com",
"riskScore": 0.95,
"riskFactors": ["new_domain", "no_ssl", "regulatory_warnings"],
"action": "Manual review required before proceeding"
}
}
Testing
Test Unregistered VASPs
Low Risk:
{
"unregisteredVaspWebsite": "https://test-exchange.com",
"beneficiaryFirstName": "Test",
"beneficiaryLastName": "User"
}
High Risk (Will Trigger Review):
{
"unregisteredVaspWebsite": "https://new-suspicious-exchange.com",
"beneficiaryFirstName": "High",
"beneficiaryLastName": "Risk"
}
Website Testing
Valid test URLs for different scenarios:
- Standard:
https://example-exchange.com - New Domain:
https://brand-new-crypto-site.com - No SSL: Use HTTP URLs (will be flagged as high risk)