DANA Operations API

Lakukan transfer QRIS dan transfer bank keluar menggunakan akun DANA.

Semua endpoint membutuhkan header x-api-key. Lihat Authentication.

Endpoint ini memungkinkan Anda melakukan transfer keluar (kirim uang) dari akun DANA yang terhubung — baik via scan QR code maupun transfer langsung ke rekening bank.


POST /api/v1/accounts/:id/transfer — QRIS Transfer

Transfer uang dari akun DANA dengan cara scan gambar QR code. Kirim gambar QR dalam format multipart/form-data.

Path Parameters

ParameterTypeRequiredKeterangan
idstringYaUUID akun DANA (dari Accounts API)

Request Body (multipart/form-data)

FieldTypeRequiredKeterangan
actionstringYaHarus dana-qris-create
qrImageFileYaFile gambar (JPG/PNG) yang mengandung QR code
amountstringYaJumlah transfer dalam Rupiah (minimum Rp 1)

Response 200

{
  "success": true,
  "message": "QRIS transfer processed successfully"
}

Errors

StatusKeterangan
400qrImage tidak disertakan
400Saldo tidak cukup
400Gagal decode QR code dari gambar — pastikan gambar jelas dan QR code terbaca
401API key tidak valid atau tidak ada
404Akun tidak ditemukan
500Internal server error

Contoh

curl -X POST \
  'https://mutasiku.co.id/api/v1/accounts/123e4567-e89b-12d3-a456-426614174000/transfer' \
  -H 'x-api-key: YOUR_API_KEY' \
  -F 'action=dana-qris-create' \
  -F 'qrImage=@/path/to/qr_code.jpg' \
  -F 'amount=50000'

POST /api/v1/accounts/:id/transfer — List Banks

Ambil daftar bank yang tersedia untuk transfer. Jalankan endpoint ini terlebih dahulu untuk mendapatkan data yang diperlukan di langkah Validate Bank Account.

Request Body

{
  "action": "dana-bank-list"
}

Response 200

{
  "success": true,
  "data": [
    {
      "instId": "014",
      "name": "Bank Central Asia",
      "instLocalName": "Bank Central Asia",
      "payMethod": "WITHDRAW_BANKCARD",
      "payOption": "BANK_TRANSFER"
    },
    {
      "instId": "002",
      "name": "Bank Rakyat Indonesia",
      "instLocalName": "Bank Rakyat Indonesia",
      "payMethod": "WITHDRAW_BANKCARD",
      "payOption": "BANK_TRANSFER"
    }
  ]
}

Catat instId, instLocalName, payMethod, dan payOption dari bank tujuan — keempat nilai ini diperlukan di langkah berikutnya.

Errors

StatusKeterangan
400Gagal mengambil daftar bank
401API key tidak valid atau tidak ada
404Akun tidak ditemukan
500Internal server error

Contoh

curl -X POST \
  'https://mutasiku.co.id/api/v1/accounts/123e4567-e89b-12d3-a456-426614174000/transfer' \
  -H 'x-api-key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"action": "dana-bank-list"}'

POST /api/v1/accounts/:id/transfer — Validate Bank Account

Validasi nomor rekening tujuan dan dapatkan nama pemilik sebelum transfer. Ini adalah konfirmasi bahwa nomor rekening valid dan milik siapa.

Request Body

FieldTypeRequiredKeterangan
actionstringYaHarus dana-bank-init
accountNumberstringYaNomor rekening tujuan
amountstringYaJumlah transfer (min. Rp 10.000)
instIdstringYaID bank dari List Banks
instLocalNamestringYaNama bank dari List Banks
payMethodstringYapayMethod dari List Banks
payOptionstringYapayOption dari List Banks
{
  "action": "dana-bank-init",
  "accountNumber": "1234567890",
  "amount": "100000",
  "instId": "014",
  "instLocalName": "Bank Central Asia",
  "payMethod": "WITHDRAW_BANKCARD",
  "payOption": "BANK_TRANSFER"
}

Response 200

{
  "success": true,
  "data": {
    "bankAccountIndexNo": "abc123def456",
    "accountName": "JOHN DOE"
  }
}

Verifikasi accountName sesuai rekening tujuan. Simpan bankAccountIndexNo — diperlukan di langkah Execute Bank Transfer.

Errors

StatusKeterangan
400Field wajib tidak lengkap
400Saldo tidak cukup
400Jumlah minimum Rp 10.000
400Validasi rekening gagal — nomor rekening tidak valid atau bank tidak cocok
401API key tidak valid atau tidak ada
500Internal server error

Contoh

curl -X POST \
  'https://mutasiku.co.id/api/v1/accounts/123e4567-e89b-12d3-a456-426614174000/transfer' \
  -H 'x-api-key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "action": "dana-bank-init",
    "accountNumber": "1234567890",
    "amount": "100000",
    "instId": "014",
    "instLocalName": "Bank Central Asia",
    "payMethod": "WITHDRAW_BANKCARD",
    "payOption": "BANK_TRANSFER"
  }'

POST /api/v1/accounts/:id/transfer — Execute Bank Transfer

Eksekusi transfer bank setelah validasi rekening berhasil.

Transfer ini langsung mengurangi saldo DANA Anda dan tidak bisa dibatalkan. Pastikan bankAccountIndexNo dan amount sudah benar sebelum eksekusi.

Request Body

FieldTypeRequiredKeterangan
actionstringYaHarus dana-bank-create
bankAccountIndexNostringYaIndex rekening dari hasil Validate Bank Account
amountstringYaJumlah transfer (min. Rp 10.000) — harus sama dengan yang divalidasi
{
  "action": "dana-bank-create",
  "bankAccountIndexNo": "abc123def456",
  "amount": "100000"
}

Response 200

{
  "success": true,
  "message": "Transfer successfully"
}

Errors

StatusKeterangan
400bankAccountIndexNo tidak ada atau sudah expired
400Saldo tidak cukup
400Jumlah minimum Rp 10.000
401API key tidak valid atau tidak ada
500Transfer gagal

Contoh

curl -X POST \
  'https://mutasiku.co.id/api/v1/accounts/123e4567-e89b-12d3-a456-426614174000/transfer' \
  -H 'x-api-key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "action": "dana-bank-create",
    "bankAccountIndexNo": "abc123def456",
    "amount": "100000"
  }'

Alur Transfer Bank

Ambil daftar bank

Panggil List Banks untuk mendapatkan instId, instLocalName, payMethod, dan payOption bank tujuan.

Validasi rekening

Panggil Validate Bank Account dengan data bank dari step sebelumnya. Verifikasi accountName di respons sesuai penerima. Simpan bankAccountIndexNo.

Eksekusi transfer

Panggil Execute Bank Transfer dengan bankAccountIndexNo dan jumlah transfer. Transfer langsung diproses dan tidak bisa dibatalkan.

© 2026 PT. Cobra Code Indonesia. All rights reserved.

Last updated: 4/11/2026