Version 2.1 | Last updated: February 21, 2026
Versi 2.1 | Terakhir diperbarui: 21 February 2026
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.
Submit daily settlement data from POS systems.
Mengirim data settlement harian dari sistem POS.
| Header | Header | Value | Nilai | Required | Wajib |
|---|---|---|---|---|---|
| Content-Type | Content-Type | application/json | application/json | Yes | Ya |
{
"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
}
}
}
| 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 |
| 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) |
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);
});
{
"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"
}
| 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 |