Standard Transaction Flow
The standard transaction flow is the most common workflow for transfers between two registered VASPs with full KYC/AML compliance.
Flow Overview
graph TD
A[1. Create Transaction] --> B[2. Add Beneficiary Details]
B --> C[3. KYC Approve Beneficiary]
C --> D[4. Add Originator Details]
D --> E[5. Send to Beneficiary VASP]
E --> F[6. Approve Originator]
F --> G[7. Payment Check Approve]
G --> H[8. Submit Transaction Hash]
H --> I[Transaction Complete]
Complete Step-by-Step Guide
Step 1: Create Transaction
Create the initial transaction with basic transfer information.
Endpoint: POST https://api.trpcontinuum.com/trp/transactions
{
"network": "bitcoin",
"virtualAsset": "Bitcoin (BTC)",
"amount": "100.50",
"beneficiaryWalletAddress": "bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh",
"originatorWalletAddress": "bc1qabc123def456ghi789jkl012mno345pqr678stu",
"memo": "Payment for invoice #123",
"purpose": "Commercial payment"
}
Response:
{
"success": true,
"data": {
"id": "txn_abc123",
"status": "Pending Beneficiary Details",
"network": "bitcoin",
"amount": "100.50",
"createdAt": "2024-08-07T10:00:00Z"
}
}
Step 2: Add Beneficiary Details
Add comprehensive beneficiary information including VASP association.
Endpoint: POST https://api.trpcontinuum.com/trp/transactions/{transactionId}/add-beneficiary
Natural Person Example:
{
"beneficiaryVaspId": "vasp_123456",
"isLegalPerson": false,
"beneficiaryFirstName": "Jane",
"beneficiaryLastName": "Smith",
"dateOfBirth": "1990-05-15",
"placeOfBirth": "New York, NY",
"buildingNumber": "123",
"streetName": "Main Street",
"townName": "New York",
"postCode": "10001",
"country": "US",
"beneficiaryIdNumber": "123456789",
"beneficiaryIdType": "PASSPORT",
"beneficiaryIdCountryOfIssue": "US"
}
Legal Person Example:
{
"beneficiaryVaspId": "vasp_123456",
"isLegalPerson": true,
"beneficiaryLegalName": "Global Finance Corp",
"beneficiaryOrganization": "Global Finance Corp",
"dateOfIncorporation": "2015-08-20",
"placeOfIncorporation": "London, UK",
"buildingNumber": "456",
"streetName": "Corporate Avenue",
"townName": "London",
"postCode": "SW1A 1AA",
"country": "GB",
"beneficiaryIdNumber": "GB987654321",
"beneficiaryIdType": "LEIX",
"beneficiaryIdCountryOfIssue": "GB",
"beneficiaryRegistrationAuthority": "Companies House"
}
Status Change: Pending Beneficiary Details → Pending KYC Approval
Step 3: KYC Approve Beneficiary
Approve the beneficiary's KYC information after verification.
Endpoint: POST https://api.trpcontinuum.com/trp/transactions/{transactionId}/kyc-check/approve
{
"note": "KYC documentation verified successfully",
"riskScore": "low",
"verificationMethod": "document_review",
"approvedBy": "compliance_officer_001"
}
Status Change: Pending KYC Approval → KYC Approved
Step 4: Add Originator Details
Provide complete originator information.
Endpoint: POST https://api.trpcontinuum.com/trp/transactions/{transactionId}/originator-details
Natural Person Example:
{
"isLegalPerson": false,
"originatorFirstName": "John",
"originatorLastName": "Doe",
"originatorDob": "1985-03-20",
"originatorPlaceOfBirth": "Chicago, IL",
"originatorIdNumber": "987654321",
"originatorIdType": "PASSPORT",
"originatorIdCountryOfIssue": "US",
"originatorAddressLine1": "456 Oak Street",
"originatorCity": "San Francisco",
"originatorState": "CA",
"originatorPostalCode": "94102",
"originatorCountry": "US"
}
Status Change: KYC Approved → Originator Details Added
Step 5: Send to Beneficiary VASP
Transmit transaction information to the beneficiary VASP.
Endpoint: POST https://api.trpcontinuum.com/trp/transactions/{transactionId}/send-to-beneficiary
{}
Status Change: Originator Details Added → Sent to Beneficiary
Step 6: Approve Originator (Beneficiary VASP)
Beneficiary VASP approves the originator's KYC information.
Endpoint: POST https://api.trpcontinuum.com/trp/transactions/{transactionId}/approve-originator
{
"note": "Originator KYC approved by beneficiary VASP",
"approvedBy": "beneficiary_compliance_team",
"approvalDate": "2024-08-07T10:30:00Z"
}
Status Change: Sent to Beneficiary → Originator Approved
Step 7: Payment Check Approve
Verify and approve the payment address and transaction details.
Endpoint: POST https://api.trpcontinuum.com/trp/transactions/{transactionId}/payment-check/approve
{
"note": "Payment address verified successfully",
"verificationMethod": "address_ownership_proof",
"addressValid": true,
"networkConfirmed": true
}
Status Change: Originator Approved → Payment Check Approved
Step 8: Submit Transaction Hash
Submit the blockchain transaction hash after executing the on-chain transfer.
Endpoint: POST https://api.trpcontinuum.com/trp/transactions/{transactionId}/tx-hash-submit
{
"txHash": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
"note": "Transaction completed on blockchain",
"blockNumber": 18456789,
"gasUsed": 21000,
"transactionFee": "0.0001"
}
Status Change: Payment Check Approved → Completed
Status Progression
Pending Beneficiary DetailsPending KYC ApprovalKYC ApprovedOriginator Details AddedSent to BeneficiaryOriginator ApprovedPayment Check ApprovedCompleted
Required Fields Summary
Transaction Creation (Minimum)
networkvirtualAssetamountbeneficiaryWalletAddress
Beneficiary Details (Natural Person)
beneficiaryVaspIdbeneficiaryFirstNamebeneficiaryLastNamedateOfBirthcountry
Originator Details (Natural Person)
originatorFirstNameoriginatorLastNameoriginatorDoboriginatorCountry
Error Handling
At any step, transactions can be rejected:
- KYC Rejection: Use
/kyc-check/rejectendpoint - Payment Rejection: Use
/payment-check/rejectendpoint - General Rejection: Use
/rejectendpoint
Rejected transactions move to Rejected status with detailed reason codes.
Common Issues
- Invalid VASP ID: Ensure beneficiaryVaspId exists and is verified
- Missing Required Fields: Check field requirements for each step
- Sanctions Hit: Resolve through compliance team before proceeding
- Network Mismatch: Ensure wallet address matches specified network
- Amount Limits: Verify transaction amount within VASP limits