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

  1. Regular Monitoring: Check balance regularly to avoid failed transactions
  2. Pre-transaction Check: Always verify sufficient balance before disbursement
  3. Error Handling: Implement proper error handling for balance check failures
  4. Caching: Cache balance information for short periods to reduce API calls
  5. 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