Skip to main content

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 network
  • virtualAsset - Asset name
  • amount - Transaction amount as string
  • beneficiaryWalletAddress - Recipient wallet address
  • originatorWalletAddress - Sender wallet address

Beneficiary (Unregistered VASP)

  • unregisteredVaspWebsite - VASP website URL (must be valid HTTPS URL)
  • beneficiaryIsLegalPerson - true or false
  • Natural Person: beneficiaryFirstName, beneficiaryLastName, dateOfBirth
  • Legal Person: beneficiaryLegalName, dateOfIncorporation
  • country - Country code (ISO 3166-1 alpha-2)

Originator

  • originatorIsLegalPerson - true or false
  • 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:

  1. Creates Placeholder VASP: Temporary record with website information
  2. Validates Website: Checks URL accessibility and SSL certificate
  3. Risk Assessment: Analyzes domain age, jurisdiction, and other factors
  4. 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:

  1. Send to Beneficiary VASP: No API endpoints available
  2. Approve Originator: No VASP to perform approval
  3. Payment Check: No VASP payment verification
  4. Direct to TX Hash: Ready for blockchain execution

Status Progression (No KYC Matches)

  1. Waiting for TX Hash - Ready for blockchain transaction
  2. Submit TX hash via /tx-hash-submit endpoint
  3. Tx Hash Sent Successfully - Transaction complete

Status Progression (With KYC Matches)

  1. KYC Beneficiary Pending Review - Manual review required
  2. After KYC approval → Waiting for TX Hash
  3. 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)