Condensed Flows Overview
The condensed transaction flow combines multiple standard flow steps (Create Transaction + Add Beneficiary + Add Originator + KYC Check) into a single optimized API call, automatically performing KYC checks and holding transactions if matches are found.
Benefits
- Faster Processing: Combines 4+ API calls into 1
- Automatic KYC Screening: Built-in sanctions checking
- Consistent Data: All transaction data provided upfront
- Error Reduction: Single validation point
- Developer Efficiency: Simpler integration
Flow Overview
graph TD
A[1. Create Complete Transaction] --> B{KYC Matches Found?}
B -->|No| C[2. Send to Beneficiary VASP]
B -->|Yes| D[Transaction Held for Review]
D --> E[Manual KYC Approve/Reject]
E -->|Approved| C
E -->|Rejected| F[Transaction Rejected]
C --> G[3. Approve Originator]
G --> H[4. Payment Check Approve]
H --> I[5. Submit Transaction Hash]
I --> J[Transaction Complete]
Supported Transaction Types
The condensed flow supports all major transaction patterns:
- Natural Person - Individual to individual transactions
- Legal Person - Corporate and business entities
- Non-Custodial Wallet - Self-hosted wallets
- Unregistered VASP - Unknown service providers
- Travel Address - Privacy-enhanced transactions
Base API Endpoint
All condensed flows use the same endpoint with different payload structures:
Endpoint: POST https://api.trpcontinuum.com/trp/transactions/condensed
Common Response Structure
Success (No KYC Matches)
{
"success": true,
"data": {
"id": "txn_abc123",
"status": "Client Info Pending Send",
"network": "bitcoin",
"amount": "100.50",
"kycCheck": {
"hasMatches": false,
"totalMatches": 0,
"beneficiaryChecked": true,
"originatorChecked": true
},
"createdAt": "2024-08-07T10:00:00Z",
"updatedAt": "2024-08-07T10:00:00Z"
}
}
Success (KYC Matches Found)
{
"success": true,
"data": {
"id": "txn_abc123",
"status": "KYC Beneficiary Pending Review",
"network": "bitcoin",
"amount": "100.50",
"kycCheck": {
"hasMatches": true,
"totalMatches": 3,
"beneficiaryMatches": 2,
"originatorMatches": 1,
"topMatch": {
"score": 0.95,
"name": "Jane Smith",
"riskLevel": "high",
"sources": ["sanctions", "pep"]
}
},
"createdAt": "2024-08-07T10:00:00Z",
"updatedAt": "2024-08-07T10:00:00Z"
}
}
Status Progression
Without KYC Matches
Client Info Pending Send→ Ready for beneficiary VASP transmission- Continue with standard flow (Send to Beneficiary → Payment Check → TX Hash)
With KYC Matches
KYC Beneficiary Pending Review→ Manual review required- After approval →
Client Info Pending Send - Continue with standard flow
Performance Comparison
| Traditional Flow | Condensed Flow |
|---|---|
| 4+ API calls | 1 API call |
| Multiple validations | Single validation |
| Step-by-step errors | Upfront validation |
| Manual KYC timing | Automatic screening |
| Complex state management | Simplified workflow |
Migration Guide
From Standard Flow
Replace this:
// Old: Multiple API calls
const txn = await createTransaction(data);
const beneficiary = await addBeneficiary(txn.id, beneficiaryData);
const originator = await addOriginator(txn.id, originatorData);
const kyc = await approveKyc(txn.id);
With this:
// New: Single API call
const txn = await createCondensedTransaction({
transaction: data,
beneficiary: beneficiaryData,
originator: originatorData
});
Handling KYC Holds
const response = await createCondensedTransaction(data);
if (response.data.kycCheck.hasMatches) {
console.log(`Transaction held for review: ${response.data.kycCheck.totalMatches} matches found`);
// Handle manual review process
} else {
console.log('Transaction approved, proceeding to send to beneficiary');
// Continue with standard workflow
}
Best Practices
- Always validate data locally before sending to condensed endpoint
- Handle KYC holds gracefully with appropriate user messaging
- Use appropriate transaction types (registered VASP vs non-custodial)
- Never use forceApproveKyc in production without proper safeguards
- Implement proper error handling for validation failures
- Monitor KYC match rates to optimize data quality
Error Handling
Common validation errors:
- Missing Required Fields: Ensure all mandatory fields are present
- Invalid VASP ID: Verify beneficiaryVaspId exists and is active
- Network/Address Mismatch: Wallet address must match specified network
- Travel Address Invalid: Travel address format or resolution fails
- KYC Data Incomplete: Insufficient information for sanctions screening