Get Balance
GET
Check your merchant account balance.
Endpoint
GET /api/v1/balance
Request Headers
| Header |
Required |
Description |
Authorization |
Yes |
Bearer token from login |
Accept |
Yes |
application/json |
Request Parameters
This endpoint doesn't require any parameters.
Response
Success Response
{
"success": true,
"message": "Balance retrieved successfully",
"data": {
"merchant_id": "MERCHANT001",
"balance": 5000000,
"currency": "IDR",
"last_updated": "2024-01-15T10:30:00Z",
"status": "ACTIVE"
},
"meta": {
"timestamp": "2024-01-15T10:30:00Z"
}
}
Response Fields
| Field |
Type |
Description |
merchant_id |
string |
Your unique merchant ID |
balance |
decimal |
Current account balance |
currency |
string |
Currency code (IDR) |
last_updated |
string |
Last balance update timestamp |
status |
string |
Account status (ACTIVE, SUSPENDED, BLOCKED) |
Account Status Types
| Status |
Description |
| ACTIVE |
Account is active and can process transactions |
| SUSPENDED |
Account is temporarily suspended |
| BLOCKED |
Account is blocked and cannot process transactions |
Code Examples
PHP Example
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://openapi.swiftrans.id:7654/api/v1/balance',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Authorization: Bearer ' . $accessToken,
'Accept: application/json'
),
));
$response = curl_exec($curl);
$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
$result = json_decode($response, true);
if ($httpCode === 200 && $result['success']) {
$balance = number_format($result['data']['balance'], 0, ',', '.');
echo "Current balance: IDR " . $balance;
echo "Account status: " . $result['data']['status'];
} else {
echo "Failed to get balance: " . $result['message'];
}
JavaScript Example
try {
const response = await fetch('https://openapi.swiftrans.id:7654/api/v1/balance', {
method: 'GET',
headers: {
'Authorization': `Bearer ${accessToken}`,
'Accept': 'application/json'
}
});
const result = await response.json();
if (response.ok && result.success) {
const balance = new Intl.NumberFormat('id-ID').format(result.data.balance);
console.log(`Current balance: IDR ${balance}`);
console.log(`Account status: ${result.data.status}`);
} else {
console.error('Failed to get balance:', result.message);
}
} catch (error) {
console.error('Balance check error:', error);
}
cURL Example
curl -X GET https://openapi.swiftrans.id:7654/api/v1/balance \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Accept: application/json"
Error Responses
Unauthorized
{
"success": false,
"message": "Invalid or expired token",
"error_code": "UNAUTHORIZED"
}
Account Suspended
{
"success": false,
"message": "Merchant account is suspended",
"error_code": "ACCOUNT_SUSPENDED"
}
Service Unavailable
{
"success": false,
"message": "Balance service temporarily unavailable",
"error_code": "SERVICE_UNAVAILABLE"
}
Usage Examples
Check Balance Before Disbursement
<?php
function checkBalanceBeforeDisbursement($accessToken, $disbursementAmount) {
// Get current balance
$balanceResponse = getBalance($accessToken);
if ($balanceResponse['success']) {
$currentBalance = $balanceResponse['data']['balance'];
if ($currentBalance >= $disbursementAmount) {
echo "Sufficient balance. Proceeding with disbursement.";
return true;
} else {
echo "Insufficient balance. Current: " . $currentBalance . ", Required: " . $disbursementAmount;
return false;
}
} else {
echo "Failed to check balance: " . $balanceResponse['message'];
return false;
}
}
function getBalance($accessToken) {
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://openapi.swiftrans.id:7654/api/v1/balance',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Authorization: Bearer ' . $accessToken,
'Accept: application/json'
),
));
$response = curl_exec($curl);
curl_close($curl);
return json_decode($response, true);
}
// Usage
$canProceed = checkBalanceBeforeDisbursement($accessToken, 100000);
Real-time Balance Monitoring
class BalanceMonitor {
constructor(accessToken) {
this.accessToken = accessToken;
this.lastBalance = null;
}
async checkBalance() {
try {
const response = await fetch('https://openapi.swiftrans.id:7654/api/v1/balance', {
method: 'GET',
headers: {
'Authorization': `Bearer ${this.accessToken}`,
'Accept': 'application/json'
}
});
const result = await response.json();
if (response.ok && result.success) {
const currentBalance = result.data.balance;
if (this.lastBalance !== null && currentBalance !== this.lastBalance) {
console.log(`Balance changed: ${this.lastBalance} → ${currentBalance}`);
}
this.lastBalance = currentBalance;
return result.data;
} else {
throw new Error(result.message);
}
} catch (error) {
console.error('Balance check failed:', error);
return null;
}
}
startMonitoring(intervalMs = 60000) {
setInterval(() => {
this.checkBalance();
}, intervalMs);
}
}
// Usage
const monitor = new BalanceMonitor(accessToken);
monitor.startMonitoring(30000); // Check every 30 seconds
Best Practices
- Regular Monitoring: Check balance regularly to avoid failed transactions
- Pre-transaction Check: Always verify sufficient balance before disbursement
- Error Handling: Implement proper error handling for balance check failures
- Caching: Cache balance information for short periods to reduce API calls
- Alerts: Set up low balance alerts for your application
Rate Limiting
- Maximum 60 balance check requests per minute
- Use caching to minimize repeated balance checks
- Implement exponential backoff for rate limit errors
Important Notes
- Balance is updated in real-time after each transaction
- Minimum balance requirements may apply for certain operations
- Account status affects transaction processing capabilities
- Balance includes process transaction amounts