Chuẩn hoá sao kê ngân hàng API

Đọc file sao kê XLSX / CSV của các ngân hàng Việt Nam về một cấu trúc chung, kiểm tra số dư luỹ kế và đối soát tiền về với danh sách cần thu.

POSThttps://apibox.io.vn/v1/vn-bank-statement

Tải lên file sao kê xuất từ internet banking dạng XLSX hoặc CSV, hoặc gửi các dòng dạng JSON. API tìm dòng tiêu đề nằm dưới phần đầu trang của ngân hàng, nhận diện cột tiếng Việt hoặc tiếng Anh (ngày giao dịch, số tham chiếu, ghi nợ / ghi có hoặc một cột số tiền có dấu, số dư, nội dung / diễn giải, đối ứng…), nhận biết ngân hàng và số tài khoản từ phần đầu, rồi trả mọi giao dịch theo một cấu trúc chung: ngày, nợ, có, số tiền có dấu, số dư, nội dung, số tham chiếu, đối ứng và mã đơn tìm được theo prefix / pattern. Dòng tổng cộng, số dư đầu kỳ, cuối kỳ được nhận diện và bỏ qua.

Số dư luỹ kế được kiểm tra theo cả hai chiều xuất file (cũ trước hoặc mới trước): mỗi số dư phải bằng số dư trước cộng tiền có trừ tiền nợ; các dòng lệch được liệt kê cùng số dư đầu kỳ, cuối kỳ. Gửi expected ([{"code", "amount"}], tối đa 5.000 khoản) để đối soát: mỗi khoản tiền về được khớp theo mã, sau đó theo số tiền duy nhất; kết quả gồm các khoản đã khớp, thiếu / thừa tiền, chưa nhận, và các khoản tiền về không khớp khoản nào.

Không đọc file .xls nhị phân cũ và sao kê PDF (hãy lưu thành .xlsx hoặc CSV; /v1/pdf-text lấy chữ từ PDF). File chỉ xử lý trong bộ nhớ, không lưu lại.

Tham số

TênVị tríKiểuBắt buộcMặc định
filebodyfilekhôngFile sao kê .xlsx hoặc .csv (multipart file, body thô hoặc file_base64). Hoặc csv dạng chữ, hoặc rows (mảng object / mảng).
expectedbodyarraykhôngCác khoản cần đối soát [{"code", "amount", "id"?}] (tối đa 5.000).
prefixbodystringkhôngTiền tố mã đơn cần lấy từ nội dung (vd. DH), hoặc pattern (biểu thức chính quy).
sheetbodystringkhôngTên sheet trong file Excel (mặc định: sheet hiển thị đầu tiên).
bankbodystringkhôngMã hoặc tên ngân hàng khi file không ghi.
limitbodynumberkhông10000Số giao dịch tối đa trả về (tổng và kiểm tra vẫn dùng mọi dòng).

Ví dụ

curl -X POST "https://apibox.io.vn/v1/vn-bank-statement" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"csv":"Ngày giao dịch,Số tham chiếu,Nội dung,Ghi nợ,Ghi có,Số dư\n10/11/2026,FT001,CT DEN DH1001 NGUYEN VAN A,,\"500,000\",\"10,500,000\"\n10/11/2026,FT002,Phi SMS,\"11,000\",,\"10,489,000\"\n11/11/2026,FT003,DH1002 TRAN THI B,,\"1,200,000\",\"11,689,000\"","prefix":"DH","expected":[{"code":"DH1001","amount":500000},{"code":"DH1002","amount":1250000},{"code":"DH1003","amount":99000}]}'

Kết quả trả về

{
  "source": "csv",
  "sheet": null,
  "bank": null,
  "account": null,
  "header_row": 1,
  "columns": {
    "date": "Ngày giao dịch",
    "reference": "Số tham chiếu",
    "description": "Nội dung",
    "debit": "Ghi nợ",
    "credit": "Ghi có",
    "balance": "Số dư"
  },
  "count": 3,
  "period": {
    "from": "2026-11-10",
    "to": "2026-11-11"
  },
  "totals": {
    "debit": 11000,
    "credit": 1700000,
    "net": 1689000
  },
  "balance_check": {
    "order": "ascending",
    "ok": true,
    "rows_with_balance": 3,
    "opening_balance": 10000000,
    "closing_balance": 11689000,
    "errors": []
  },
  "reconciliation": {
    "matched": 1,
    "amount_mismatch": 1,
    "missing": 1,
    "matches": [
      {
        "row": 2,
        "date": "2026-11-10",
        "amount": 500000,
        "description": "CT DEN DH1001 NGUYEN VAN A",
        "id": "DH1001",
        "code": "DH1001",
        "expected_amount": 500000,
        "matched_by": "code",
        "status": "matched",
        "difference": 0
      },
      {
        "row": 4,
        "date": "2026-11-11",
        "amount": 1200000,
        "description": "DH1002 TRAN THI B",
        "id": "DH1002",
        "code": "DH1002",
        "expected_amount": 1250000,
        "matched_by": "code",
        "status": "underpaid",
        "difference": -50000
      }
    ],
    "missing_payments": [
      {
        "id": "DH1003",
        "code": "DH1003",
        "amount": 99000
      }
    ],
    "unexpected_credits": []
  },
  "transactions": [
    {
      "row": 2,
      "date": "2026-11-10",
      "datetime": null,
      "value_date": null,
      "debit": 0,
      "credit": 500000,
      "amount": 500000,
      "balance": 10500000,
      "description": "CT DEN DH1001 NGUYEN VAN A",
      "reference": "FT001",
      "counterparty": null,
      "counterparty_account": null,
      "counterparty_bank": null,
      "order_code": "DH1001"
    },
    "…"
  ],
  "truncated": false,
  "skipped_rows": [],
  "privacy": "Processed in memory, not stored or logged."
}

Ứng dụng

  • Đưa sao kê của nhiều ngân hàng vào kế toán theo một cấu trúc
  • Đối soát tiền khách chuyển với hoá đơn chưa thu
  • Phát hiện dòng bị thiếu, bị sửa nhờ kiểm tra số dư luỹ kế
  • Chuẩn bị dữ liệu ngân hàng để nhập vào ERP

Hỏi đáp

Hỗ trợ ngân hàng nào?

Mọi file có dòng tiêu đề gồm cột ngày và cột nợ / có hoặc số tiền, bằng tiếng Việt hay tiếng Anh: bao gồm các mẫu xuất thông dụng của Vietcombank, BIDV, VietinBank, Techcombank, MB, ACB, VPBank. Ngân hàng được nhận diện từ phần đầu file hoặc truyền qua bank.

Kiểm tra số dư làm gì?

Tính lại từng số dư từ số dư trước và số tiền phát sinh, theo thứ tự trong file hoặc đảo ngược, rồi liệt kê các dòng không khớp.

File có bị lưu không?

Không. File chỉ được đọc trong bộ nhớ cho đúng yêu cầu đó.

API liên quan

Bắt đầu với 1.000 request miễn phí mỗi tháng. Nhận API key miễn phí →