DocsUpah Minimum

API Upah Minimum

Data lengkap Upah Minimum Provinsi (UMP), Upah Minimum Kabupaten/Kota (UMK), dan Upah Minimum Sektoral (UMSK) seluruh Indonesia.

Ringkasan

Base URL:/api/v1/wages
Total Data:500+ data per tahun
Sumber Data:Kemenaker / Keputusan Gubernur
Update:Tahunan (1 November)

Apa itu Upah Minimum?

Upah minimum adalah standar upah terendah yang wajib dibayarkan oleh pemberi kerja kepada pekerja. Di Indonesia, terdapat 3 jenis upah minimum:

TipeNama LengkapDeskripsiContoh
UMPUpah Minimum ProvinsiUpah minimum yang berlaku di seluruh wilayah provinsiUMP DKI Jakarta 2025
UMKUpah Minimum Kabupaten/KotaUpah minimum spesifik untuk kabupaten/kota tertentuUMK Kota Bekasi 2025
UMSKUpah Minimum Sektoral Kab/KotaUpah minimum untuk sektor industri tertentu di wilayah tertentuUMSK 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

GET/api/v1/wages

Mendapatkan daftar upah minimum dengan filtering dan pagination

Query Parameters

ParameterTipeDefaultDeskripsi
pageinteger1Nomor halaman untuk pagination
limitinteger50Jumlah data per halaman (maks: 100)
regionstring-Filter berdasarkan ID wilayah
typestring-Filter tipe: UMP, UMK, UMSK
yearstring-Filter berdasarkan tahun (format: YYYY)
effective_atstring-Filter upah yang berlaku pada tanggal tertentu (format: YYYY-MM-DD)

Contoh Request

cURL
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

FieldTipeDeskripsi
idUUIDID unik data upah minimum
regionIdintegerID wilayah terkait
regionCodestringKode wilayah BPS
regionNamestringNama wilayah
typeenumTipe upah: UMP, UMK, atau UMSK
amountintegerNominal upah dalam Rupiah (tanpa desimal)
effectiveDatestringTanggal mulai berlaku (format: YYYY-MM-DD)
regulationRefstring | nullNomor peraturan/keputusan gubernur
sourceUrlstring | nullURL 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=2025

2. UMK Berdasarkan Provinsi

Mendapatkan daftar UMK kabupaten/kota dalam satu provinsi

GET /api/v1/wages?type=UMK&region=32&year=2025

3. Upah Minimum yang Berlaku Saat Ini

Mendapatkan upah minimum yang berlaku pada tanggal tertentu

GET /api/v1/wages?effective_at=2025-06-15

4. Histori Upah Minimum Wilayah

Melihat perkembangan upah minimum suatu wilayah dari tahun ke tahun

GET /api/v1/wages?region=31&type=UMP

Contoh Kode Lengkap

JavaScript - Kalkulator Gaji Minimum
// 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
// }
Python - Perbandingan UMP Antar Provinsi
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

ProvinsiUMP 2025Kenaikan
DKI JakartaRp 5.396.761+6.50%
Jawa BaratRp 2.191.312+6.50%
Jawa TimurRp 2.165.244+6.50%
Jawa TengahRp 2.159.866+6.25%
BaliRp 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.

Lihat Juga