Transfers

Transfers move funds instantly between Martis accounts within the platform. Unlike payouts that send money to external bank accounts, transfers keep funds within the Martis ecosystem for immediate availability.


Overview

Transfers enable instant money movement between active Martis accounts without external processing delays. Common use cases include:

  • Business-to-business payments between platform merchants
  • Multi-account fund allocation
  • Internal treasury management
  • Revenue sharing between partners

Transfer Flow

StageDescription
1. InitiationTransfer request submitted via API with destination account and amount
2. ValidationSource balance and destination account status verified
3. ExecutionFunds deducted from source and credited to destination
4. ConfirmationTransfer completed with immediate availability

Key Features

FeatureDescription
Instant SettlementFunds available immediately in the destination account
Real-time ValidationImmediate confirmation of account status and balance
Automated TrackingComplete audit trail with timestamps and references
Zero Processing DelayNo external banking system involvement

Transfer States

A transfer can have the following states:

  • Name
    succeeded
    Description

    Transfer completed successfully. Funds are available in the destination account.

  • Name
    failed
    Description

    Transfer failed due to insufficient balance or inactive destination account.


Requirements

Before initiating a transfer:

  1. Source Account: Must have sufficient available balance
  2. Destination Account: Must be an active Martis account
  3. API Authentication: Valid API key with transfer permissions

Example: Create a Transfer

curl --location 'https://api-staging.martis.id/api/v1/transfers' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {API_KEY}' \
--data '{
  "destination_account_id": "01HZDEF456789012ABCDEF",
  "amount": 100000.00,
  "currency": "idr",
  "description": "Revenue share payment",
  "client_reference_id": "TRF-2024-001"
}'

Response

{
  "status": "success",
  "data": {
    "id": "01HZXYZ789012345ABCDEF",
    "source_account_id": "01HZABC123456789FEDCBA",
    "destination_account_id": "01HZDEF456789012ABCDEF",
    "source_account_name": "Source Business",
    "destination_account_name": "Destination Business",
    "amount": 100000.00,
    "currency": "idr",
    "status": "succeeded",
    "description": "Revenue share payment",
    "client_reference_id": "TRF-2024-001",
    "created_at": "2025-01-15T10:30:00Z",
    "updated_at": "2025-01-15T10:30:00Z"
  }
}

Error Handling

Common transfer errors and resolutions:

ErrorCauseResolution
Destination account is not activeTarget account inactive or suspendedVerify destination account status
Insufficient balanceSource balance less than transfer amountCheck available balance before transfer
Amount must be greater than 0Invalid amount providedEnsure amount is a positive number

Best Practices

  • Validate destination accounts before initiating transfers to avoid failed transactions
  • Use client_reference_id to correlate transfers with internal records
  • Implement idempotency using the Idempotency-Key header for safe retries
  • Monitor balances to ensure sufficient funds for planned transfers

Integration

Was this page helpful?