Traditional Transaction API - Complete Transaction Management
The Traditional Transaction API provides comprehensive transaction management capabilities for wallet operations, internal transfers, and administrative oversight. Built for enterprise-grade financial applications with full audit trails and multi-user support.
🎯 What Can You Manage?
Your complete transaction ecosystem with these powerful tools:
- Wallet Operations: TOPUP, WITHDRAW, WALLET_TRANSFER, WALLET_RECEIVE, CONVERT
- Transaction History: Detailed pagination and filtering capabilities
- Administrative Controls: Update, delete, and monitor transactions
- Internal Transaction Logging: Multi-step transaction process tracking
- Advanced Filtering: Multi-parameter transaction search
- Full Detail Views: Complete transaction information with steps
🧩 Your Transaction Building Blocks
📊 Query & Retrieval Blocks
GET /transactions/transfers- Get transfers with filteringGET /transactions/users/:user_id/transactions- User transaction historyGET /transactions/:transactionID- Single transaction detailsGET /transactions/:id/full-detail- Complete transaction informationGET /transactions/all- All transactions (admin view)GET /transactions/filter- Advanced filtering capabilities
✏️ Creation & Management Blocks
POST /transactions/transactions- Create new transactionsPOST /transactions/transactions/internal- Internal transaction recordsPOST /transactions/transactions/log_steps- Log multi-step processes
🔧 Administrative Blocks
PUT /transactions/transfers/:transferID- Update transfer statusDELETE /transactions/transfers/:transferID- Remove transfers
🏗️ Common Management Patterns
Pattern 1: "I want to view user transaction history"
User ID → getUserTransactions → Paginated transaction list
Use: /transactions/users/:user_id/transactions
Pattern 2: "I want to track transaction status"
Transaction query → getTransfers → Filter by status → Monitor progress
Use: /transactions/transfers
Pattern 3: "I want to audit all transactions"
Admin access → getAllTransactions → Full system view
Use: /transactions/all
Pattern 4: "I want to log transaction steps"
Multi-step transaction → logTransactionWithSteps → Complete audit trail
Use: /transactions/transactions/log_steps
🔧 Transaction Management Details
Get All Transfers
Retrieve All Transfer Transactions
Get a filtered list of all transfer transactions in the system. Supports pagination and returns transactions filtered by wallet transaction types (TOPUP, WITHDRAW, WALLET_TRANSFER, WALLET_RECEIVE, CONVERT).
Parameters
limitnumberMaximum number of records to return (default: 10)
offsetnumberNumber of records to skip for pagination (default: 0)
Response
{
"transfers": [
{
"transaction_id": "txn_1234567890",
"type": "WALLET_TRANSFER",
"amount": 150000,
"currency": "IDR",
"status": "SUCCESS_RECEIVED",
"reference_id": "ref_abc123",
"description": "Wallet to wallet transfer",
"created_at": "2024-01-15T10:30:00Z"
},
{
"transaction_id": "txn_0987654321",
"type": "TOPUP",
"amount": 75,
"currency": "SGD",
"status": "PENDING",
"reference_id": "ref_def456",
"description": "Wallet topup via bank transfer",
"created_at": "2024-01-15T09:15:00Z"
}
]
}{
"error": "Failed to fetch transfers",
"details": "Database connection error"
}Get User Transaction History
Get User Transaction History
Retrieve comprehensive transaction history for a specific user with pagination support. Combines wallet transactions and non-wallet transactions with detailed source and destination information.
Parameters
user_idstringrequiredUser ID to get transaction history for
pagenumberPage number for pagination (default: 1)
limitnumberRecords per page (default: 10)
Response
{
"page": 1,
"limit": 10,
"count": 25,
"transactions": [
{
"transaction_id": "txn_1234567890",
"transaction_type": "WALLET_TRANSFER",
"transaction_date": "2024-01-15T10:30:00Z",
"wallet_id": "wallet_123",
"wallet_code": "IDR_MAIN",
"wallet_from_id": "wallet_123",
"wallet_to_id": "wallet_456",
"currency_from": "IDR",
"currency_to": "IDR",
"amount": 150000,
"converted_amount": 150000,
"trans_wallet_type": "WALLET_TRANSFER",
"trans_wallet_flow": "WALLET_DEBIT",
"settlement_status": "SUCCESS_RECEIVED",
"source": "IDR_MAIN",
"destination": "IDR_SAVINGS",
"product": "WALLET_TRANSFER",
"details": "IDR → IDR",
"balance_type": "WALLET_DEBIT"
}
]
}{
"error": "User ID is required"
}{
"error": "Internal Server Error"
}Get Transaction Detail
Get Single Transaction Detail
Retrieve detailed information for a specific transaction by its ID. Returns basic transaction information from the main transactions table.
Parameters
transactionIDstringrequiredTransaction ID to retrieve details for
Response
{
"transaction": {
"transaction_id": "txn_1234567890",
"user_id": 123,
"transaction_type": "WALLET_TRANSFER",
"transaction_date": "2024-01-15T10:30:00Z",
"status": "SUCCESS_RECEIVED",
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T10:35:00Z"
}
}{
"error": "Transaction not found"
}{
"error": "Failed to fetch transaction detail"
}Get Full Transaction Detail
Get Complete Transaction Information
Retrieve comprehensive transaction details including wallet information, steps, and platform fees. Supports both wallet transactions and non-wallet transactions with complete audit trail.
Parameters
idstringrequiredTransaction ID to get full details for
Response
{
"transaction": {
"transaction_id": "txn_1234567890",
"user_id": 123,
"transaction_type": "CONVERT",
"transaction_date": "2024-01-15T10:30:00Z",
"status": "SUCCESS_RECEIVED"
},
"source": "wallet",
"details": {
"wallet_id": "wallet_123",
"wallet_from_id": "wallet_123",
"wallet_to_id": "wallet_456",
"amount": 150000,
"currency_from": "IDR",
"currency_to": "SGD",
"converted_amount": 135,
"platform_fee": 7500,
"settlement_status": "SUCCESS_RECEIVED",
"from_wallet_code": "IDR_MAIN",
"to_wallet_code": "SGD_SAVINGS",
"trans_wallet_type": "CONVERT",
"trans_wallet_flow": "WALLET_DEBIT",
"card_last4": null
},
"steps": [
{
"step": 1,
"description": "Debit 150000 IDR from wallet IDR_MAIN"
},
{
"step": 2,
"description": "Convert IDR to SGD at rate 1111.11"
},
{
"step": 3,
"description": "Credit 135 SGD to wallet SGD_SAVINGS"
}
]
}{
"error": "No transaction detail found for this ID"
}{
"error": "Internal Server Error",
"details": "Database query failed"
}Create New Transaction
Create New Transaction
Create a new transaction record in the system. Requires user authentication and returns the created transaction with a unique ID.
Parameters
user_idnumberrequiredUser ID creating the transaction
typestringrequiredTransaction type (TOPUP, WITHDRAW, WALLET_TRANSFER, WALLET_RECEIVE, CONVERT)
amountnumberrequiredTransaction amount
currencystringrequiredCurrency code (IDR, SGD, AUD, VND, INR, USD)
reference_idstringrequiredUnique reference identifier for the transaction
descriptionstringOptional transaction description
Request Body
{
"user_id": 123,
"type": "WALLET_TRANSFER",
"amount": 75000,
"currency": "IDR",
"reference_id": "ref_transfer_20240115_001",
"description": "Wallet to wallet transfer"
}Response
{
"message": "Transaction created successfully!",
"transaction": {
"transaction_id": "txn_new_1234567890",
"user_id": 123,
"type": "WALLET_TRANSFER",
"amount": 75000,
"currency": "IDR",
"status": "PENDING",
"reference_id": "ref_transfer_20240115_001",
"description": "Wallet to wallet transfer",
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T10:30:00Z"
}
}{
"error": "Missing required fields: user_id, type, amount, currency, reference_id"
}{
"error": "Failed to create transaction",
"details": "Database constraint violation"
}Update Transfer Status
Update Transfer Status (Admin Only)
Update the status of an existing transfer. Restricted to admin users only. Allows changing transfer status for administrative oversight and transaction management.
Parameters
transferIDstringrequiredTransfer ID to update
statusstringrequiredNew status: PENDING, SUCCESS_RECEIVED, or FAILED
Request Body
{
"status": "SUCCESS_RECEIVED"
}Response
{
"message": "Transfer updated successfully",
"transfer": {
"transaction_id": "txn_1234567890",
"status": "SUCCESS_RECEIVED"
}
}{
"error": "Invalid status. Allowed: PENDING, SUCCESS_RECEIVED, FAILED"
}{
"error": "Unauthorized access. Only admins can update transfers."
}{
"error": "Transfer with ID txn_1234567890 not found."
}{
"error": "Failed to update transfer",
"details": "Database update error"
}Advanced Transaction Filtering
Get Filtered Transactions
Advanced transaction filtering with multiple parameters. Supports filtering by user, transaction type, wallet, date range, and includes country information for comprehensive transaction analysis.
Parameters
user_idnumberFilter by specific user ID
typestringFilter by transaction type (TOPUP, WITHDRAW, WALLET_TRANSFER, WALLET_RECEIVE, CONVERT)
wallet_codestringFilter by wallet code
start_datestringFilter from start date (ISO format)
end_datestringFilter to end date (ISO format)
Response
{
"transactions": [
{
"transaction_id": "txn_1234567890",
"created_at": "2024-01-15T10:30:00Z",
"amount": 100000,
"asset": "IDR",
"type": "WALLET_TRANSFER",
"status": "SUCCESS_RECEIVED",
"source": "IDR_MAIN",
"destination": "IDR_SAVINGS",
"tx_id": "txn_1234567890",
"country_code": "ID"
}
]
}{
"error": "Wallet code not found."
}{
"error": "Internal Server Error"
}🚀 Complete Transaction Management Workflows
Workflow 1: User Transaction Monitoring
// Monitor user transaction activity
async function monitorUserActivity(userId) {
console.log('📊 Monitoring user transaction activity...');
// Get recent transaction history
const history = await transactions.getUserTransactions(userId, {
page: 1,
limit: 10
});
console.log(`📈 User has ${history.count} total transactions`);
// Check for pending transactions
const pendingTx = history.transactions.filter(tx =>
tx.settlement_status === 'PENDING'
);
if (pendingTx.length > 0) {
console.log(`⏳ ${pendingTx.length} pending transactions found`);
// Get full details for pending transactions
for (const tx of pendingTx) {
const fullDetail = await transactions.getFullTransactionDetail(tx.transaction_id);
console.log(`🔍 Transaction ${tx.transaction_id}:`);
console.log(` Amount: ${fullDetail.details.amount} ${fullDetail.details.currency_from}`);
console.log(` Steps: ${fullDetail.steps.length} steps logged`);
}
}
return { total: history.count, pending: pendingTx.length };
}
Workflow 2: Administrative Transfer Management
// Admin transfer oversight and management
async function adminTransferManagement() {
console.log('🔧 Administrative transfer management...');
// Get all transfers for review
const transfers = await transactions.getTransfers({
limit: 50,
offset: 0
});
console.log(`📋 Found ${transfers.transfers.length} transfers to review`);
// Find failed transfers that need attention
const failedTransfers = transfers.transfers.filter(tx =>
tx.status === 'FAILED'
);
if (failedTransfers.length > 0) {
console.log(`❌ ${failedTransfers.length} failed transfers need attention`);
// Review and potentially retry failed transfers
for (const transfer of failedTransfers) {
console.log(`🔍 Reviewing failed transfer: ${transfer.transaction_id}`);
console.log(` Amount: ${transfer.amount} ${transfer.currency}`);
console.log(` Reference: ${transfer.reference_id}`);
// Admin decision to retry (update to PENDING) or keep failed
const shouldRetry = transfer.description.includes('network_timeout');
if (shouldRetry) {
const retryResult = await transactions.updateTransfer(transfer.transaction_id, {
status: 'PENDING'
});
console.log(`🔄 Retrying transfer: ${retryResult.message}`);
}
}
}
return { total: transfers.transfers.length, failed: failedTransfers.length };
}
Workflow 3: Currency Conversion Tracking
// Track currency conversion transactions
async function trackCurrencyConversions(referenceId) {
console.log('💱 Tracking currency conversion...');
// Create transaction with steps logging
const stepLogs = [
{
step: 1,
description: "Debit 150000 IDR from wallet IDR_MAIN",
rate: null,
converted_amount: 150000.00
},
{
step: 2,
description: "Convert IDR to SGD at rate 1111.11",
rate: 1111.11,
converted_amount: 135.00
},
{
step: 3,
description: "Credit 135 SGD to wallet SGD_SAVINGS",
rate: null,
converted_amount: 135.00
}
];
// Log all steps for audit trail
await transactions.logTransactionWithSteps({
reference_id: referenceId,
log_steps: stepLogs
});
console.log(`📝 Logged ${stepLogs.length} steps for reference ${referenceId}`);
// Verify transaction completion
const filteredTx = await transactions.getFilteredTransactions({
type: 'CONVERT'
});
const ourConversion = filteredTx.transactions.find(tx =>
tx.tx_id === referenceId
);
if (ourConversion) {
console.log(`✅ Currency conversion completed:`);
console.log(` ${ourConversion.amount} ${ourConversion.asset}`);
console.log(` ${ourConversion.source} → ${ourConversion.destination}`);
console.log(` Status: ${ourConversion.status}`);
console.log(` Country: ${ourConversion.country_code}`);
}
return { reference: referenceId, steps: stepLogs.length };
}
Workflow 4: Transaction Analytics and Reporting
// Generate transaction analytics and reports
async function generateTransactionAnalytics(userId, dateRange) {
console.log('📊 Generating transaction analytics...');
// Get filtered transactions for analysis
const transactionsData = await transactions.getFilteredTransactions({
user_id: userId,
start_date: dateRange.start,
end_date: dateRange.end
});
// Analyze transaction patterns
const analytics = {
totalTransactions: transactionsData.transactions.length,
totalAmount: 0,
currencies: new Set(),
countries: new Set(),
statusBreakdown: {},
typeBreakdown: {}
};
transactionsData.transactions.forEach(tx => {
analytics.totalAmount += parseFloat(tx.amount);
analytics.currencies.add(tx.asset);
if (tx.country_code) analytics.countries.add(tx.country_code);
// Count by status
analytics.statusBreakdown[tx.status] =
(analytics.statusBreakdown[tx.status] || 0) + 1;
// Count by type
analytics.typeBreakdown[tx.type] =
(analytics.typeBreakdown[tx.type] || 0) + 1;
});
console.log(`📈 Transaction Analytics:`);
console.log(` Total Transactions: ${analytics.totalTransactions}`);
console.log(` Total Amount: ${analytics.totalAmount.toFixed(2)}`);
console.log(` Currencies: ${Array.from(analytics.currencies).join(', ')}`);
console.log(` Countries: ${Array.from(analytics.countries).join(', ')}`);
console.log(` Status Breakdown:`, analytics.statusBreakdown);
console.log(` Type Breakdown:`, analytics.typeBreakdown);
return analytics;
}
🎯 When to Use Which API
Transaction Monitoring
- User history:
GET /transactions/users/:user_id/transactions - Transfer overview:
GET /transactions/transfers - System-wide view:
GET /transactions/all
Detailed Investigation
- Basic details:
GET /transactions/:transactionID - Complete information:
GET /transactions/:id/full-detail - Advanced filtering:
GET /transactions/filter
Transaction Creation
- Standard transactions:
POST /transactions/transactions - Internal records:
POST /transactions/transactions/internal - Multi-step logging:
POST /transactions/transactions/log_steps
Administrative Control
- Status updates:
PUT /transactions/transfers/:transferID - Transfer removal:
DELETE /transactions/transfers/:transferID
💡 Pro Tips for Transaction Management
Pagination Strategy
// Efficient pagination for large datasets
async function getAllUserTransactions(userId) {
const allTransactions = [];
let page = 1;
const limit = 50;
while (true) {
const result = await transactions.getUserTransactions(userId, {
page,
limit
});
allTransactions.push(...result.transactions);
if (result.transactions.length < limit) {
break; // No more pages
}
page++;
}
return allTransactions;
}
Error Handling
// Robust error handling for transaction operations
async function safeTransactionOperation(operation) {
try {
return await operation();
} catch (error) {
if (error.message.includes('not found')) {
console.log('Transaction not found - may have been deleted');
return null;
} else if (error.message.includes('Unauthorized')) {
console.log('Admin permissions required for this operation');
throw new Error('Insufficient permissions');
} else {
console.error('Transaction operation failed:', error.message);
throw error;
}
}
}
// Usage
const result = await safeTransactionOperation(() =>
transactions.updateTransfer("txn_123", { status: "SUCCESS_RECEIVED" })
);
Audit Trail Management
// Comprehensive audit trail for compliance
async function createAuditTrail(transactionId) {
const fullDetail = await transactions.getFullTransactionDetail(transactionId);
const auditRecord = {
transaction_id: transactionId,
timestamp: new Date().toISOString(),
transaction_type: fullDetail.transaction.transaction_type,
amount: fullDetail.details.amount,
currency: fullDetail.details.currency_from,
status: fullDetail.details.settlement_status,
steps_count: fullDetail.steps.length,
platform_fee: fullDetail.details.platform_fee,
source_wallet: fullDetail.details.from_wallet_code,
destination_wallet: fullDetail.details.to_wallet_code
};
console.log('📋 Audit record created:', auditRecord);
return auditRecord;
}
🔐 Authentication & Authorization
All transaction endpoints require authentication:
// Configure authentication
const config = await brdzSDK.config;
config.setToken('your-jwt-token');
config.setApiKey('your-api-key');
// User-level access
await transactions.getUserTransactions("123");
await transactions.getById("txn_123");
await transactions.createTransaction(data);
// Admin-level access (requires admin role)
await transactions.updateTransfer("txn_123", { status: "SUCCESS_RECEIVED" });
await transactions.deleteTransfer("txn_123");
🌍 Supported Transaction Types & Countries
Transaction Types (Based on Backend Model)
- TOPUP - Credit funds to wallet (trans_wallet_flow: WALLET_CREDIT)
- WITHDRAW - Debit funds from wallet (trans_wallet_flow: WALLET_DEBIT)
- WALLET_TRANSFER - Transfer funds from wallet (trans_wallet_flow: WALLET_DEBIT)
- WALLET_RECEIVE - Receive funds to wallet (trans_wallet_flow: WALLET_CREDIT)
- CONVERT - Currency conversion (trans_wallet_flow: WALLET_DEBIT)
Settlement Status Options
- PENDING - Transaction initiated, awaiting processing
- SUCCESS_RECEIVED - Transaction completed and settled
- FAILED - Transaction failed, requires attention
- SETTLED - Transaction settled and finalized
Currency & Country Support
Fiat currencies based on user country:
- IDR (Indonesia) - Primary currency, country code: ID
- SGD (Singapore) - Regional currency, country code: SG
- AUD (Australia) - Regional currency, country code: AU
- VND (Vietnam) - Regional currency, country code: VN
- INR (India) - Regional currency, country code: IN
- USD (United States) - International standard, country code: US
Always use pagination for large datasets, implement proper error handling for admin operations, and maintain audit trails for compliance. Use filtered queries to optimize performance and leverage full-detail endpoints for comprehensive investigation.
Update and delete operations are restricted to admin users only. These operations are logged and monitored for security. Always verify transaction status before performing administrative actions.
Complex transactions like currency conversions support step-by-step logging for complete audit trails. Use the step logging functionality to track multi-phase operations and provide transparency for regulatory compliance.