Settlement API Documentation

Dokumentasi API Settlement

Version 2.1 | Last updated: February 21, 2026

Versi 2.1 | Terakhir diperbarui: 21 February 2026

API Overview

Gambaran API

The Settlement API is used to submit daily transaction summaries from Point of Sale (POS) systems to the main server. This process is typically performed at the end of the business day to finalize all transactions.

API Settlement digunakan untuk mengirim ringkasan transaksi harian dari sistem Point of Sale (POS) ke server utama. Proses ini biasanya dilakukan di akhir hari kerja untuk menyelesaikan semua transaksi.

Key Features
Fitur Utama

API Endpoint

Endpoint API

POST settlement https://beta.mayagrahakencana.com/main_sb/penjualan/ActivityReportApi/settlement

Submit daily settlement data from POS systems.

Mengirim data settlement harian dari sistem POS.

Request Headers

Header Permintaan

Header Header Value Nilai Required Wajib
Content-Type Content-Type application/json application/json Yes Ya

Request Body (JSON)

Badan Permintaan (JSON)

{
    "user_id": 183,                                     // ID user kasir yang melakukan transaksi
    "dtime": "2025-06-21 16:57:11",                     // Tanggal dan waktu saat data ini dibuat/dikirim untuk settlement
    "cabang_id": 101,                                   // ID cabang tempat transaksi terjadi
    "device_id": "dev",                                 // ID device/mesin yang digunakan, bisa berupa kode unik kasir/komputer

    "data": {
        "2025-06-19": {                                 // Tanggal transaksi
            "cabang_id": "101",                         // ID cabang
            "machine_id": "4CE9341348",                 // ID mesin kasir tempat transaksi dilakukan
            "kasir_id": "183",                          // ID user kasir yang melakukan transaksi
            "version": "PYPOS.V2",                      // P.O.S VERSION ini di simpan setiap transaksi penjualan maupun return
            "date_sales": "2025-06-19",                 // Tanggal penjualan terjadi
            "date_settlement": "2025-06-21 16:57:11",   // Tanggal dan jam settlement dilakukan
            "total_penjualan_bruto": 748500,            // Total penjualan sebelum diskon atau retur
            "total_bayar": 697570,                      // Total uang yang dibayarkan oleh pelanggan
            "total_tagihan": 661070,                    // Total tagihan bersih setelah semua diskon diterapkan
            "total_kembalian": 36500,                   // Total uang kembali ke pelanggan (kembalian tunai)
            "total_diskon_produk": 48000,               // Diskon langsung dari produk (per item)
            "total_diskon_member": 29430,               // Diskon karena membership pelanggan
            "total_additional_diskon": 10000,           // Diskon tambahan (misalnya promo manual)
            "total_return_penjualan": 114000,           // Total nilai retur (pengembalian barang)
            "total_payment": 697570,                    // Total semua pembayaran masuk dari pelanggan
            "jml_transaksi": 5,                         // Jumlah total transaksi pada hari tersebut

            "payment": {
                "108": {                                // ID akun metode pembayaran (misalnya cash)
                    "bank": "",                         // Nama bank kosong untuk credit card dan cash menggunakan debit sesuai bank yang di pilih
                    "account_id": "108",                // ID akun pembayaran
                    "metode_pembayaran": "cash",        // Jenis pembayaran
                    "return_nilai": 114000,             // Total nilai retur untuk metode ini
                    "jml_payment": 3,                   // Jumlah transaksi dengan metode ini
                    "nilai_diterima": 259500,           // Total uang yang masuk lewat metode ini
                    "nilai_settlement": 250000,         // Uang yang disetor oleh kasir (input manual)
                    "selisih_settlement": -9500         // Selisih antara diterima dan disetor (negatif = kurang setor)
                },
                "110": {                                // ID akun untuk kartu kredit
                    "bank": "",                         // Nama bank kosong untuk credit card dan cash menggunakan debit sesuai bank yang di pilih
                    "account_id": "110",                // ID akun pembayaran
                    "metode_pembayaran": "credit card", // Jenis pembayaran
                    "return_nilai": 0,                  // Total nilai retur untuk metode ini
                    "jml_payment": 2,                   // Jumlah transaksi dengan metode ini
                    "nilai_diterima": 297570,           // Total uang yang masuk lewat metode ini
                    "nilai_settlement": 297570,         // Uang yang disetor oleh kasir (input manual)
                    "selisih_settlement": 0             // Selisih antara diterima dan disetor (negatif = kurang setor)
                }
            },

            "id_penjualan": [183,185,187,189],          // Daftar ID transaksi penjualan yang dilakukan di hari ini
            "settlement_oto_id": 182,                   // ID user admin atau supervisor yang otorisasi settlement ini
            "settlement_oto_nama": "admin_bpj",         // Nama user admin atau supervisor yang otorisasi settlement ini
            "cabang_nama": "BPJ",                       // Nama cabang
            "cpu_info": "intel Q9500",                  // Informasi CPU device kasir
            "com_name": "WHQL0921345",                  // Nama komputer kasir
            "point_transaksi": 326,                     // Total poin loyalty yang dihasilkan oleh semua transaksi
            "id_return": [191]                          // Daftar ID transaksi retur
        }
    }
}

Response Codes

Kode Respons

200
400
401
500
Status Code Kode Status Description Deskripsi
200 200 Settlement successful Settlement berhasil
400 400 Bad request - invalid data Permintaan tidak valid - data salah
401 401 Unauthorized - invalid token Tidak diizinkan - token tidak valid
500 500 Internal server error Kesalahan server internal

Response Fields

Field Respons

Field Field Type Tipe Description Deskripsi
success success Boolean Boolean True if settlement was successful True jika settlement berhasil
message message String String Success message Pesan keberhasilan
settlement_id settlement_id String String Unique ID for the settlement ID unik untuk settlement
timestamp timestamp String String Server timestamp when processed Timestamp server saat diproses
error error String String Error message (only when success=false) Pesan error (hanya saat success=false)

Implementation Examples

Contoh Implementasi

Python
cURL
JavaScript
import requests
import json
import datetime

# Configuration
url = "https://beta.mayagrahakencana.com/main_sb/penjualan/ActivityReportApi/settlement"

# Settlement data
settlement_data = {
    "user_id": 183,
    "dtime": datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
    "cabang_id": 101,
    "device_id": "dev",
    "data": {
        "2025-06-19": {
            "cabang_id": "101",
            "machine_id": "4CE9341348",
            "kasir_id": "183",
            "version": "PYPOS.V2",
            "date_sales": "2025-06-19",
            "date_settlement": datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
            "total_penjualan_bruto": 748500,
            "total_bayar": 697570,
            "total_tagihan": 661070,
            "total_kembalian": 36500,
            "total_diskon_produk": 48000,
            "total_diskon_member": 29430,
            "total_additional_diskon": 10000,
            "total_return_penjualan": 114000,
            "total_payment": 697570,
            "jml_transaksi": 5,
            "payment": {
                "108": {
                    "bank": "",
                    "account_id": "108",
                    "metode_pembayaran": "cash",
                    "return_nilai": 114000,
                    "jml_payment": 3,
                    "nilai_diterima": 259500,
                    "nilai_settlement": 250000,
                    "selisih_settlement": -9500
                },
                "110": {
                    "bank": "",
                    "account_id": "110",
                    "metode_pembayaran": "credit card",
                    "return_nilai": 0,
                    "jml_payment": 2,
                    "nilai_diterima": 297570,
                    "nilai_settlement": 297570,
                    "selisih_settlement": 0
                }
            },
            "id_penjualan": [183, 185, 187, 189],
            "settlement_oto_id": 182,
            "settlement_oto_nama": "admin_bpj",
            "cabang_nama": "BPJ",
            "cpu_info": "intel Q9500",
            "com_name": "WHQL0921345",
            "point_transaksi": 326,
            "id_return": [191]
        }
    }
}

# Prepare headers
headers = {
    'Content-Type': 'application/json'
}

# Send request
try:
    response = requests.post(url, data=json.dumps(settlement_data), headers=headers)
    
    if response.status_code == 200:
        result = response.json()
        if result.get('success'):
            print("Settlement successful!")
            print("Settlement ID:", result.get('settlement_id'))
            # Take action: close POS, delete local data, etc.
        else:
            print("Settlement failed:", result.get('error', 'Unknown error'))
            # Save data for retry, notify supervisor
    else:
        print(f"Error: {response.status_code} - {response.text}")
        
except requests.exceptions.RequestException as e:
    print("Request error:", str(e))
curl -X POST \
  https://beta.mayagrahakencana.com/main_sb/penjualan/ActivityReportApi/settlement \
  -H "Content-Type: application/json" \
  -d '{
    "user_id": 183,
    "dtime": "2025-06-21 16:57:11",
    "cabang_id": 101,
    "device_id": "dev",
    "data": {
        "2025-06-19": {
            "cabang_id": "101",
            "machine_id": "4CE9341348",
            "kasir_id": "183",
            "version": "PYPOS.V2",
            "date_sales": "2025-06-19",
            "date_settlement": "2025-06-21 16:57:11",
            "total_penjualan_bruto": 748500,
            "total_bayar": 697570,
            "total_tagihan": 661070,
            "total_kembalian": 36500,
            "total_diskon_produk": 48000,
            "total_diskon_member": 29430,
            "total_additional_diskon": 10000,
            "total_return_penjualan": 114000,
            "total_payment": 697570,
            "jml_transaksi": 5,
            "payment": {
                "108": {
                    "bank": "",
                    "account_id": "108",
                    "metode_pembayaran": "cash",
                    "return_nilai": 114000,
                    "jml_payment": 3,
                    "nilai_diterima": 259500,
                    "nilai_settlement": 250000,
                    "selisih_settlement": -9500
                },
                "110": {
                    "bank": "",
                    "account_id": "110",
                    "metode_pembayaran": "credit card",
                    "return_nilai": 0,
                    "jml_payment": 2,
                    "nilai_diterima": 297570,
                    "nilai_settlement": 297570,
                    "selisih_settlement": 0
                }
            },
            "id_penjualan": [183,185,187,189],
            "settlement_oto_id": 182,
            "settlement_oto_nama": "admin_bpj",
            "cabang_nama": "BPJ",
            "cpu_info": "intel Q9500",
            "com_name": "WHQL0921345",
            "point_transaksi": 326,
            "id_return": [191]
        }
    }
}'
// Using fetch API
const url = 'https://beta.mayagrahakencana.com/main_sb/penjualan/ActivityReportApi/settlement';

const settlementData = {
  user_id: 183,
  dtime: new Date().toISOString().slice(0, 19).replace('T', ' '),
  cabang_id: 101,
  device_id: 'dev',
  data: {
    '2025-06-19': {
      cabang_id: '101',
      machine_id: '4CE9341348',
      kasir_id: '183',
      version: 'PYPOS.V2',
      date_sales: '2025-06-19',
      date_settlement: new Date().toISOString().slice(0, 19).replace('T', ' '),
      total_penjualan_bruto: 748500,
      total_bayar: 697570,
      total_tagihan: 661070,
      total_kembalian: 36500,
      total_diskon_produk: 48000,
      total_diskon_member: 29430,
      total_additional_diskon: 10000,
      total_return_penjualan: 114000,
      total_payment: 697570,
      jml_transaksi: 5,
      payment: {
        '108': {
          bank: '',
          account_id: '108',
          metode_pembayaran: 'cash',
          return_nilai: 114000,
          jml_payment: 3,
          nilai_diterima: 259500,
          nilai_settlement: 250000,
          selisih_settlement: -9500
        },
        '110': {
          bank: '',
          account_id: '110',
          metode_pembayaran: 'credit card',
          return_nilai: 0,
          jml_payment: 2,
          nilai_diterima: 297570,
          nilai_settlement: 297570,
          selisih_settlement: 0
        }
      },
      id_penjualan: [183, 185, 187, 189],
      settlement_oto_id: 182,
      settlement_oto_nama: 'admin_bpj',
      cabang_nama: 'BPJ',
      cpu_info: 'intel Q9500',
      com_name: 'WHQL0921345',
      point_transaksi: 326,
      id_return: [191]
    }
  }
};

fetch(url, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(settlementData)
})
.then(response => {
  if (!response.ok) {
    throw new Error('Network response was not ok');
  }
  return response.json();
})
.then(data => {
  if (data.success) {
    console.log('Settlement successful!');
    console.log('Settlement ID:', data.settlement_id);
    // Take action: close POS, delete local data, etc.
  } else {
    console.error('Settlement failed:', data.error || 'Unknown error');
    // Save data for retry, notify supervisor
  }
})
.catch(error => {
  console.error('Error submitting settlement:', error);
});

Response Examples

Contoh Respons

Success (200)
Sukses (200)
Error (400)
Error (400)
{
  "success": true,
  "message": "Settlement data successfully processed",
  "settlement_id": "SETT-20250621-001",
  "timestamp": "2025-06-21 17:02:30"
}
{
  "success": false,
  "error": "Invalid settlement data",
  "details": {
    "field": "data.2025-06-19.total_payment",
    "message": "Value does not match calculated amount"
  },
  "timestamp": "2025-06-21 17:05:12"
}
Implementation Notes
Catatan Implementasi
  1. Validate data locally before sending to ensure consistency
  2. Validasi data secara lokal sebelum mengirim untuk memastikan konsistensi
  3. Implement retry logic for failed requests
  4. Terapkan logika percobaan ulang untuk permintaan yang gagal
  5. Store settlement data locally until confirmed successful
  6. Simpan data settlement secara lokal hingga dikonfirmasi berhasil

Common Scenarios

Skenario Umum

1
End-of-day settlement process
Proses settlement akhir hari
2
Collect all daily transaction data
Kumpulkan semua data transaksi harian
3
Prepare JSON settlement data
Siapkan data settlement JSON
4
Send POST request to settlement endpoint
Kirim permintaan POST ke endpoint settlement
5
Handle response and take appropriate action
Tangani respons dan ambil tindakan yang sesuai

Troubleshooting

Pemecahan Masalah

Issue Masalah Solution Solusi
401 Unauthorized 401 Tidak Diizinkan Check API token validity and expiration Periksa validitas dan kedaluwarsa token API
400 Bad Request 400 Permintaan Buruk Validate JSON structure and data types Validasi struktur JSON dan tipe data
Data inconsistencies Ketidakkonsistenan data Reconcile POS data before settlement Rekonsiliasi data POS sebelum settlement
Network issues Masalah jaringan Implement retry mechanism with backoff Terapkan mekanisme percobaan ulang dengan backoff