API Upah Minimum
Data lengkap Upah Minimum Provinsi (UMP), Upah Minimum Kabupaten/Kota (UMK), dan Upah Minimum Sektoral (UMSK) seluruh Indonesia.
Ringkasan
/api/v1/wagesApa itu Upah Minimum?
Upah minimum adalah standar upah terendah yang wajib dibayarkan oleh pemberi kerja kepada pekerja. Di Indonesia, terdapat 3 jenis upah minimum:
| Tipe | Nama Lengkap | Deskripsi | Contoh |
|---|---|---|---|
UMP | Upah Minimum Provinsi | Upah minimum yang berlaku di seluruh wilayah provinsi | UMP DKI Jakarta 2025 |
UMK | Upah Minimum Kabupaten/Kota | Upah minimum spesifik untuk kabupaten/kota tertentu | UMK Kota Bekasi 2025 |
UMSK | Upah Minimum Sektoral Kab/Kota | Upah minimum untuk sektor industri tertentu di wilayah tertentu | UMSK Industri Otomotif Karawang |
Hierarki Upah Minimum
UMK harus lebih tinggi dari UMP, dan UMSK harus lebih tinggi dari UMK. Jika suatu daerah tidak memiliki UMK, maka yang berlaku adalah UMP provinsi tersebut.
Waktu Berlaku
Upah minimum baru ditetapkan setiap tahun dan berlaku mulai 1 Januari. Keputusan biasanya diumumkan sekitar November tahun sebelumnya.
Endpoints
/api/v1/wagesMendapatkan daftar upah minimum dengan filtering dan pagination
Query Parameters
| Parameter | Tipe | Default | Deskripsi |
|---|---|---|---|
page | integer | 1 | Nomor halaman untuk pagination |
limit | integer | 50 | Jumlah data per halaman (maks: 100) |
region | string | - | Filter berdasarkan ID wilayah |
type | string | - | Filter tipe: UMP, UMK, UMSK |
year | string | - | Filter berdasarkan tahun (format: YYYY) |
effective_at | string | - | Filter upah yang berlaku pada tanggal tertentu (format: YYYY-MM-DD) |
Contoh Request
curl -X GET "https://api.portaldata.id/api/v1/wages?type=UMP&year=2025" \
-H "X-API-Key: YOUR_API_KEY"Contoh Response
{
"data": [
{
"id": "550e8400-e29b-41d4-a716-446655440001",
"regionId": 1,
"regionCode": "31",
"regionName": "DKI Jakarta",
"type": "UMP",
"amount": 5067381,
"effectiveDate": "2025-01-01",
"regulationRef": "Pergub DKI Jakarta No. 191/2024",
"sourceUrl": "https://jdih.jakarta.go.id/..."
},
{
"id": "550e8400-e29b-41d4-a716-446655440002",
"regionId": 2,
"regionCode": "32",
"regionName": "Jawa Barat",
"type": "UMP",
"amount": 2191312,
"effectiveDate": "2025-01-01",
"regulationRef": "Kepgub Jabar No. 561/2024",
"sourceUrl": "https://jdih.jabarprov.go.id/..."
}
],
"pagination": {
"page": 1,
"limit": 50,
"total": 38,
"totalPages": 1
},
"meta": {
"source": "Kemenaker / Governor Decrees",
"apiVersion": "1.0.0",
"riskLevel": "high",
"nextExpectedUpdate": "2025-11-01"
},
"disclaimer": "Reference data only. Not legal or tax advice."
}Penjelasan Field Response
| Field | Tipe | Deskripsi |
|---|---|---|
id | UUID | ID unik data upah minimum |
regionId | integer | ID wilayah terkait |
regionCode | string | Kode wilayah BPS |
regionName | string | Nama wilayah |
type | enum | Tipe upah: UMP, UMK, atau UMSK |
amount | integer | Nominal upah dalam Rupiah (tanpa desimal) |
effectiveDate | string | Tanggal mulai berlaku (format: YYYY-MM-DD) |
regulationRef | string | null | Nomor peraturan/keputusan gubernur |
sourceUrl | string | null | URL sumber dokumen resmi |
Contoh Penggunaan
1. Menampilkan UMP Semua Provinsi
Mendapatkan daftar UMP tahun berjalan untuk semua provinsi
GET /api/v1/wages?type=UMP&year=20252. UMK Berdasarkan Provinsi
Mendapatkan daftar UMK kabupaten/kota dalam satu provinsi
GET /api/v1/wages?type=UMK®ion=32&year=20253. Upah Minimum yang Berlaku Saat Ini
Mendapatkan upah minimum yang berlaku pada tanggal tertentu
GET /api/v1/wages?effective_at=2025-06-154. Histori Upah Minimum Wilayah
Melihat perkembangan upah minimum suatu wilayah dari tahun ke tahun
GET /api/v1/wages?region=31&type=UMPContoh Kode Lengkap
// Fungsi untuk mendapatkan upah minimum berdasarkan lokasi karyawan
async function getMinimumWage(regionCode, year = new Date().getFullYear()) {
// Coba dapatkan UMK terlebih dahulu (lebih spesifik)
let response = await fetch(
`https://api.portaldata.id/api/v1/wages?region=${regionCode}&type=UMK&year=${year}`,
{ headers: { 'X-API-Key': 'YOUR_API_KEY' } }
);
let { data } = await response.json();
// Jika UMK tidak ada, gunakan UMP provinsi
if (data.length === 0) {
// Ambil kode provinsi (2 digit pertama)
const provinceCode = regionCode.split('.')[0];
response = await fetch(
`https://api.portaldata.id/api/v1/wages?region=${provinceCode}&type=UMP&year=${year}`,
{ headers: { 'X-API-Key': 'YOUR_API_KEY' } }
);
({ data } = await response.json());
}
if (data.length > 0) {
return {
amount: data[0].amount,
type: data[0].type,
regionName: data[0].regionName,
effectiveDate: data[0].effectiveDate
};
}
throw new Error('Upah minimum tidak ditemukan');
}
// Fungsi untuk menghitung gaji minimum dengan overtime
function calculateSalary(minimumWage, overtimeHours = 0) {
// Asumsi 173 jam kerja per bulan (standar Kemenaker)
const hourlyRate = minimumWage / 173;
const overtimeRate = hourlyRate * 1.5; // 150% untuk overtime
return {
baseSalary: minimumWage,
hourlyRate: Math.round(hourlyRate),
overtimePay: Math.round(overtimeHours * overtimeRate),
totalSalary: minimumWage + Math.round(overtimeHours * overtimeRate)
};
}
// Contoh penggunaan
const wage = await getMinimumWage('32.73'); // Kota Bandung
console.log('Upah Minimum:', wage);
// Output:
// {
// amount: 4340940,
// type: 'UMK',
// regionName: 'Kota Bandung',
// effectiveDate: '2025-01-01'
// }
const salary = calculateSalary(wage.amount, 10);
console.log('Perhitungan Gaji:', salary);
// Output:
// {
// baseSalary: 4340940,
// hourlyRate: 25092,
// overtimePay: 376380,
// totalSalary: 4717320
// }import requests
import pandas as pd
API_KEY = 'YOUR_API_KEY'
BASE_URL = 'https://api.portaldata.id/api/v1'
def get_all_ump(year):
"""Mendapatkan semua UMP dalam satu tahun"""
response = requests.get(
f'{BASE_URL}/wages',
params={'type': 'UMP', 'year': year, 'limit': 100},
headers={'X-API-Key': API_KEY}
)
return response.json()['data']
def compare_ump(year1, year2):
"""Membandingkan UMP antara dua tahun"""
ump_year1 = {w['regionCode']: w for w in get_all_ump(year1)}
ump_year2 = {w['regionCode']: w for w in get_all_ump(year2)}
comparison = []
for code, w2 in ump_year2.items():
w1 = ump_year1.get(code)
if w1:
increase = w2['amount'] - w1['amount']
pct_increase = (increase / w1['amount']) * 100
comparison.append({
'region': w2['regionName'],
f'UMP_{year1}': w1['amount'],
f'UMP_{year2}': w2['amount'],
'increase': increase,
'pct_increase': round(pct_increase, 2)
})
return sorted(comparison, key=lambda x: x['pct_increase'], reverse=True)
# Contoh penggunaan
comparison = compare_ump(2024, 2025)
df = pd.DataFrame(comparison)
print(df.head(10))
# Output:
# region UMP_2024 UMP_2025 increase pct_increase
# 0 DKI Jakarta 5067381 5396761 329380 6.50
# 1 Jawa Tengah 2032856 2159866 127010 6.25
# 2 DIY Yogya 2125800 2254100 128300 6.03
# ...UMP 2025 Beberapa Provinsi
| Provinsi | UMP 2025 | Kenaikan |
|---|---|---|
| DKI Jakarta | Rp 5.396.761 | +6.50% |
| Jawa Barat | Rp 2.191.312 | +6.50% |
| Jawa Timur | Rp 2.165.244 | +6.50% |
| Jawa Tengah | Rp 2.159.866 | +6.25% |
| Bali | Rp 2.813.672 | +6.50% |
* Data contoh. Gunakan API untuk mendapatkan data terbaru dan lengkap.
Best Practices
Gunakan effective_at untuk Perhitungan
Untuk sistem payroll, selalu gunakan parameter effective_at dengan tanggal payroll untuk mendapatkan upah minimum yang berlaku pada saat itu.
Cek UMK Sebelum UMP
Selalu cek UMK kabupaten/kota terlebih dahulu. Jika tidak ada, baru gunakan UMP provinsi sebagai fallback.
Perhatikan Tanggal Update
Upah minimum baru biasanya diumumkan November dan berlaku 1 Januari. Pastikan sistem Anda siap menggunakan data baru tepat waktu.