{"openapi":"3.1.0","info":{"title":"API Upah Minimum Indonesia","version":"1.0.0","description":"API publik data UMP, UMK, UMSP, UMK sektoral, serta master KBLI 2020 dan 2025. Kode wilayah menerima kode BPS atau Kemendagri."},"servers":[{"url":"/api/v1","description":"API versi 1 pada host yang sama"}],"tags":[{"name":"Upah standar","description":"UMP dan UMK standar."},{"name":"Upah sektoral","description":"UMSP dan UMK sektoral."},{"name":"Master KBLI","description":"Data master KBLI 2020 dan 2025."},{"name":"Indeks","description":"Daftar endpoint yang tersedia."}],"paths":{"/minimum-wages":{"get":{"tags":["Indeks"],"summary":"Daftar endpoint upah minimum","operationId":"listMinimumWageEndpoints","responses":{"200":{"description":"Daftar endpoint upah minimum.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EndpointIndex"}}}}}}},"/master/kbli":{"get":{"tags":["Master KBLI"],"summary":"Daftar kategori KBLI","operationId":"listKbliCategories","parameters":[{"$ref":"#/components/parameters/KbliVersionQuery"},{"$ref":"#/components/parameters/KbliCategoryQuery"}],"responses":{"200":{"description":"Daftar kategori beserta hierarki KBLI untuk versi yang dipilih.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KbliCategoryList"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/master/kbli/groups":{"get":{"tags":["Master KBLI"],"summary":"Cari kelompok KBLI di seluruh kategori","operationId":"listKbliGroups","parameters":[{"$ref":"#/components/parameters/KbliVersionQuery"},{"$ref":"#/components/parameters/KbliSearchQuery"},{"$ref":"#/components/parameters/PageQuery"},{"$ref":"#/components/parameters/PerPageQuery"}],"responses":{"200":{"description":"Daftar kelompok KBLI yang cocok, dengan metadata kategori dan hierarki.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KbliGroupList"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/minimum-wages/provinces":{"get":{"tags":["Upah standar"],"summary":"Daftar UMP per provinsi","operationId":"listProvinces","parameters":[{"$ref":"#/components/parameters/ProvinceCodeQuery"},{"$ref":"#/components/parameters/CodeTypeQuery"},{"$ref":"#/components/parameters/YearQuery"}],"responses":{"200":{"description":"Daftar UMP.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvinceList"}}}},"400":{"$ref":"#/components/responses/BadRequest"}}}},"/minimum-wages/provinces/{provinceCode}":{"get":{"tags":["Upah standar"],"summary":"Detail UMP satu provinsi","operationId":"getProvince","parameters":[{"$ref":"#/components/parameters/ProvinceCodePath"},{"$ref":"#/components/parameters/CodeTypeQuery"}],"responses":{"200":{"description":"Detail UMP provinsi.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvinceDetail"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/minimum-wages/provinces/{provinceCode}/cities":{"get":{"tags":["Upah standar"],"summary":"Daftar UMK dalam satu provinsi","operationId":"listProvinceCities","parameters":[{"$ref":"#/components/parameters/ProvinceCodePath"},{"$ref":"#/components/parameters/CityCodeQuery"},{"$ref":"#/components/parameters/YearQuery"},{"$ref":"#/components/parameters/CodeTypeQuery"}],"responses":{"200":{"description":"Daftar kota/kabupaten dan UMK dalam provinsi.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvinceCities"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/minimum-wages/cities":{"get":{"tags":["Upah standar"],"summary":"Daftar UMK seluruh kota/kabupaten","operationId":"listCities","parameters":[{"$ref":"#/components/parameters/CityCodeQuery"},{"$ref":"#/components/parameters/YearQuery"},{"$ref":"#/components/parameters/CodeTypeQuery"},{"$ref":"#/components/parameters/PageQuery"},{"$ref":"#/components/parameters/PerPageQuery"}],"responses":{"200":{"description":"Daftar UMK kota/kabupaten dengan metadata pagination.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CityList"}}}},"400":{"$ref":"#/components/responses/BadRequest"}}}},"/minimum-wages/cities/{cityCode}":{"get":{"tags":["Upah standar"],"summary":"Detail UMK satu kota/kabupaten","operationId":"getCity","parameters":[{"$ref":"#/components/parameters/CityCodePath"},{"$ref":"#/components/parameters/CodeTypeQuery"}],"responses":{"200":{"description":"Detail UMK kota/kabupaten.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CityDetail"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/minimum-wages/sectoral/provinces":{"get":{"tags":["Upah sektoral"],"summary":"Daftar UMSP per provinsi","operationId":"listSectoralProvinces","parameters":[{"$ref":"#/components/parameters/ProvinceCodeQuery"},{"$ref":"#/components/parameters/CodeTypeQuery"},{"$ref":"#/components/parameters/YearQuery"},{"$ref":"#/components/parameters/KbliCodeQuery"}],"responses":{"200":{"description":"Daftar UMSP.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SectoralProvinceList"}}}},"400":{"$ref":"#/components/responses/BadRequest"}}}},"/minimum-wages/sectoral/provinces/{provinceCode}":{"get":{"tags":["Upah sektoral"],"summary":"Detail UMSP satu provinsi","operationId":"getSectoralProvince","parameters":[{"$ref":"#/components/parameters/ProvinceCodePath"},{"$ref":"#/components/parameters/CodeTypeQuery"}],"responses":{"200":{"description":"Detail UMSP provinsi.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SectoralProvinceDetail"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/minimum-wages/sectoral/provinces/{provinceCode}/cities":{"get":{"tags":["Upah sektoral"],"summary":"Daftar UMK sektoral dalam satu provinsi","operationId":"listSectoralProvinceCities","parameters":[{"$ref":"#/components/parameters/ProvinceCodePath"},{"$ref":"#/components/parameters/CityCodeQuery"},{"$ref":"#/components/parameters/YearQuery"},{"$ref":"#/components/parameters/KbliCodeQuery"},{"$ref":"#/components/parameters/CodeTypeQuery"}],"responses":{"200":{"description":"Daftar kota/kabupaten dan UMK sektoral dalam provinsi.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SectoralProvinceCities"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/minimum-wages/sectoral/cities":{"get":{"tags":["Upah sektoral"],"summary":"Daftar UMK sektoral seluruh kota/kabupaten","operationId":"listSectoralCities","parameters":[{"$ref":"#/components/parameters/ProvinceCodeFilterQuery"},{"$ref":"#/components/parameters/CityCodeQuery"},{"$ref":"#/components/parameters/YearQuery"},{"$ref":"#/components/parameters/KbliCodeQuery"},{"$ref":"#/components/parameters/CodeTypeQuery"}],"responses":{"200":{"description":"Daftar UMK sektoral kota/kabupaten.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SectoralCityList"}}}},"400":{"$ref":"#/components/responses/BadRequest"}}}},"/minimum-wages/sectoral/cities/{cityCode}":{"get":{"tags":["Upah sektoral"],"summary":"Detail UMK sektoral satu kota/kabupaten","operationId":"getSectoralCity","parameters":[{"$ref":"#/components/parameters/CityCodePath"},{"$ref":"#/components/parameters/CodeTypeQuery"}],"responses":{"200":{"description":"Detail UMK sektoral kota/kabupaten.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SectoralCityDetail"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"}}}}},"components":{"parameters":{"ProvinceCodeQuery":{"name":"code","in":"query","required":false,"description":"Kode provinsi BPS atau Kemendagri, dicocokkan persis.","schema":{"type":"string"},"example":"36"},"CityCodeQuery":{"name":"code","in":"query","required":false,"description":"Kode kota/kabupaten BPS atau Kemendagri, dicocokkan persis.","schema":{"type":"string"},"example":"3671"},"CodeTypeQuery":{"name":"code_type","in":"query","required":false,"description":"Skema kode wilayah untuk memilih BPS atau Kemendagri saat kode ambigu.","schema":{"type":"string","enum":["bps","kemendagri"]},"example":"bps"},"ProvinceCodeFilterQuery":{"name":"province_code","in":"query","required":false,"description":"Kode provinsi BPS atau Kemendagri untuk membatasi hasil.","schema":{"type":"string"},"example":"36"},"YearQuery":{"name":"year","in":"query","required":false,"description":"Filter tahun, harus terdiri dari empat digit.","schema":{"type":"string","pattern":"^\\d{4}$"},"example":"2026"},"PageQuery":{"name":"page","in":"query","required":false,"description":"Nomor halaman, dimulai dari 1.","schema":{"type":"integer","minimum":1,"default":1},"example":1},"PerPageQuery":{"name":"per_page","in":"query","required":false,"description":"Jumlah data per halaman.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50},"example":50},"KbliCodeQuery":{"name":"kbli_code","in":"query","required":false,"description":"Kode KBLI yang dicocokkan persis.","schema":{"type":"string"},"example":"01262"},"KbliVersionQuery":{"name":"version","in":"query","required":true,"description":"Versi master KBLI yang diminta.","schema":{"type":"string","enum":["2020","2025"]},"example":"2025"},"KbliCategoryQuery":{"name":"category","in":"query","required":false,"description":"ID kategori KBLI. Jika diisi, hanya kategori tersebut yang dikembalikan.","schema":{"type":"string","pattern":"^[A-Za-z]$"},"example":"A"},"KbliSearchQuery":{"name":"search","in":"query","required":false,"description":"Pencarian substring tanpa membedakan huruf besar/kecil pada kode dan nama kelompok serta nama hierarkinya.","schema":{"type":"string"},"example":"komputer"},"ProvinceCodePath":{"name":"provinceCode","in":"path","required":true,"description":"Kode provinsi BPS atau Kemendagri.","schema":{"type":"string"},"example":"36"},"CityCodePath":{"name":"cityCode","in":"path","required":true,"description":"Kode kota/kabupaten BPS atau Kemendagri.","schema":{"type":"string"},"example":"3671"}},"responses":{"BadRequest":{"description":"Parameter tidak valid, ambigu, atau diulang lebih dari satu kali.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"success":false,"message":"Parameter year harus berupa tahun dengan 4 digit","data":null,"meta":{}}}}},"NotFound":{"description":"Data tidak ditemukan.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"success":false,"message":"Data provinsi tidak ditemukan","data":null,"meta":{}}}}}},"schemas":{"ApiError":{"type":"object","additionalProperties":false,"required":["success","message","data","meta"],"properties":{"success":{"type":"boolean","const":false},"message":{"type":"string"},"data":{"type":"null"},"meta":{"type":"object"}}},"CodePair":{"type":"object","required":["bps","kemendagri"],"properties":{"bps":{"type":"string","description":"Kode wilayah BPS."},"kemendagri":{"type":"string","description":"Kode wilayah Kemendagri."}}},"Source":{"type":"object","required":["name","url"],"properties":{"name":{"type":"string"},"url":{"type":"string","description":"URL dokumen pada object storage; dapat berupa string kosong jika key sumber atau SOURCE_STORAGE_BASE_URL belum tersedia."}}},"Wage":{"type":"object","required":["minimum_wage","year","source"],"properties":{"minimum_wage":{"type":"integer","description":"Nilai upah minimum dalam rupiah."},"year":{"type":"integer"},"source":{"$ref":"#/components/schemas/Source"}}},"SectoralWage":{"type":"object","required":["kbli_code","kbli_name","minimum_wage","year","source"],"properties":{"kbli_code":{"type":"string"},"kbli_name":{"type":"string"},"minimum_wage":{"type":"integer","description":"Nilai upah sektoral dalam rupiah."},"year":{"type":"integer"},"source":{"$ref":"#/components/schemas/Source"}}},"Province":{"type":"object","required":["province_code","province_name","wages"],"properties":{"province_code":{"$ref":"#/components/schemas/CodePair"},"province_name":{"type":"string"},"wages":{"type":"array","items":{"$ref":"#/components/schemas/Wage"}}}},"City":{"type":"object","required":["province_code","province_name","city_code","city_name","wages"],"properties":{"province_code":{"$ref":"#/components/schemas/CodePair"},"province_name":{"type":"string"},"city_code":{"$ref":"#/components/schemas/CodePair"},"city_name":{"type":"string"},"wages":{"type":"array","items":{"$ref":"#/components/schemas/Wage"}}}},"SectoralProvince":{"type":"object","required":["province_code","province_name","sectoral"],"properties":{"province_code":{"$ref":"#/components/schemas/CodePair"},"province_name":{"type":"string"},"sectoral":{"type":"array","items":{"$ref":"#/components/schemas/SectoralWage"}}}},"SectoralCity":{"type":"object","required":["province_code","province_name","city_code","city_name","sectoral"],"properties":{"province_code":{"$ref":"#/components/schemas/CodePair"},"province_name":{"type":"string"},"city_code":{"$ref":"#/components/schemas/CodePair"},"city_name":{"type":"string"},"sectoral":{"type":"array","items":{"$ref":"#/components/schemas/SectoralWage"}}}},"ProvinceReference":{"type":"object","required":["province_code","province_name"],"properties":{"province_code":{"$ref":"#/components/schemas/CodePair"},"province_name":{"type":"string"}}},"ProvinceCityCollection":{"type":"object","required":["province","cities"],"properties":{"province":{"$ref":"#/components/schemas/ProvinceReference"},"cities":{"type":"array","items":{"$ref":"#/components/schemas/City"}}}},"SectoralProvinceCityCollection":{"type":"object","required":["province","cities"],"properties":{"province":{"$ref":"#/components/schemas/ProvinceReference"},"cities":{"type":"array","items":{"$ref":"#/components/schemas/SectoralCity"}}}},"StandardSummary":{"type":"object","required":["province_count","city_count"],"properties":{"province_count":{"type":"integer"},"city_count":{"type":"integer"}}},"SectoralSummary":{"type":"object","required":["umsp_province_count","umsp_sector_count","umsk_province_count","umsk_city_count","umsk_sector_count"],"properties":{"umsp_province_count":{"type":"integer"},"umsp_sector_count":{"type":"integer"},"umsk_province_count":{"type":"integer"},"umsk_city_count":{"type":"integer"},"umsk_sector_count":{"type":"integer"}}},"PaginationMeta":{"type":"object","required":["total"],"properties":{"page":{"type":"integer","minimum":1},"per_page":{"type":"integer","minimum":1,"maximum":100},"total":{"type":"integer","minimum":0},"total_pages":{"type":"integer","minimum":0}}},"FilterMeta":{"type":"object","additionalProperties":true},"StandardMeta":{"type":"object","properties":{"summary":{"$ref":"#/components/schemas/StandardSummary"},"filters":{"$ref":"#/components/schemas/FilterMeta"},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}}},"SectoralMeta":{"type":"object","properties":{"summary":{"$ref":"#/components/schemas/SectoralSummary"},"filters":{"$ref":"#/components/schemas/FilterMeta"},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}}},"EndpointIndexMeta":{"type":"object","required":["pagination"],"properties":{"pagination":{"$ref":"#/components/schemas/PaginationMeta"}}},"EndpointInfo":{"type":"object","required":["method","path","description"],"properties":{"method":{"type":"string","enum":["GET"]},"path":{"type":"string"},"description":{"type":"string"},"query":{"type":"array","items":{"type":"string"}}}},"EndpointIndex":{"type":"object","additionalProperties":false,"required":["success","message","data","meta"],"properties":{"success":{"type":"boolean","const":true},"message":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/EndpointInfo"}},"meta":{"$ref":"#/components/schemas/EndpointIndexMeta"}}},"ProvinceList":{"type":"object","additionalProperties":false,"required":["success","message","data","meta"],"properties":{"success":{"type":"boolean","const":true},"message":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Province"}},"meta":{"$ref":"#/components/schemas/StandardMeta"}}},"ProvinceDetail":{"type":"object","additionalProperties":false,"required":["success","message","data","meta"],"properties":{"success":{"type":"boolean","const":true},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/Province"},"meta":{"$ref":"#/components/schemas/StandardMeta"}}},"CityList":{"type":"object","additionalProperties":false,"required":["success","message","data","meta"],"properties":{"success":{"type":"boolean","const":true},"message":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/City"}},"meta":{"$ref":"#/components/schemas/StandardMeta"}}},"CityDetail":{"type":"object","additionalProperties":false,"required":["success","message","data","meta"],"properties":{"success":{"type":"boolean","const":true},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/City"},"meta":{"$ref":"#/components/schemas/StandardMeta"}}},"ProvinceCities":{"type":"object","additionalProperties":false,"required":["success","message","data","meta"],"properties":{"success":{"type":"boolean","const":true},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/ProvinceCityCollection"},"meta":{"$ref":"#/components/schemas/StandardMeta"}}},"SectoralProvinceList":{"type":"object","additionalProperties":false,"required":["success","message","data","meta"],"properties":{"success":{"type":"boolean","const":true},"message":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/SectoralProvince"}},"meta":{"$ref":"#/components/schemas/SectoralMeta"}}},"SectoralProvinceDetail":{"type":"object","additionalProperties":false,"required":["success","message","data","meta"],"properties":{"success":{"type":"boolean","const":true},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/SectoralProvince"},"meta":{"$ref":"#/components/schemas/SectoralMeta"}}},"SectoralProvinceCities":{"type":"object","additionalProperties":false,"required":["success","message","data","meta"],"properties":{"success":{"type":"boolean","const":true},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/SectoralProvinceCityCollection"},"meta":{"$ref":"#/components/schemas/SectoralMeta"}}},"SectoralCityList":{"type":"object","additionalProperties":false,"required":["success","message","data","meta"],"properties":{"success":{"type":"boolean","const":true},"message":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/SectoralCity"}},"meta":{"$ref":"#/components/schemas/SectoralMeta"}}},"SectoralCityDetail":{"type":"object","additionalProperties":false,"required":["success","message","data","meta"],"properties":{"success":{"type":"boolean","const":true},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/SectoralCity"},"meta":{"$ref":"#/components/schemas/SectoralMeta"}}},"KbliMeta":{"type":"object","required":["filters","pagination"],"properties":{"filters":{"$ref":"#/components/schemas/KbliFilters"},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}}},"KbliFilters":{"type":"object","required":["version"],"properties":{"version":{"type":"string","enum":["2020","2025"]},"category":{"anyOf":[{"type":"string"},{"type":"null"}]},"search":{"anyOf":[{"type":"string"},{"type":"null"}]}}},"KbliGroupsMeta":{"type":"object","required":["filters","pagination"],"properties":{"filters":{"$ref":"#/components/schemas/KbliFilters"},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}}},"KbliCodeNameReference":{"type":"object","required":["id","name"],"properties":{"id":{"type":"string"},"name":{"type":"string"}}},"KbliGroup":{"type":"object","required":["group_id","group_name","group_description"],"properties":{"group_id":{"type":"string"},"group_name":{"type":"string"},"group_description":{"type":"string"}}},"KbliSubClass":{"type":"object","required":["sub_class_id","sub_class_name","sub_class_description"],"properties":{"sub_class_id":{"type":"string"},"sub_class_name":{"type":"string"},"sub_class_description":{"type":"string"},"group":{"type":"array","items":{"$ref":"#/components/schemas/KbliGroup"}}}},"KbliClass":{"type":"object","required":["class_id","class_name","class_description"],"properties":{"class_id":{"type":"string"},"class_name":{"type":"string"},"class_description":{"type":"string"},"sub_class":{"type":"array","items":{"$ref":"#/components/schemas/KbliSubClass"}},"group":{"type":"array","description":"Pada beberapa data KBLI 2020, kelompok terhubung langsung dengan kelas.","items":{"$ref":"#/components/schemas/KbliGroup"}}}},"KbliMainClass":{"type":"object","required":["main_class_id","main_class_name","main_class_description","sub_class"],"properties":{"main_class_id":{"type":"string"},"main_class_name":{"type":"string"},"main_class_description":{"type":"string"},"sub_class":{"type":"array","items":{"$ref":"#/components/schemas/KbliClass"}}}},"KbliCategory":{"type":"object","required":["category_id","category_name","category_description","main_group"],"properties":{"category_id":{"type":"string"},"category_name":{"type":"string"},"category_description":{"type":"string"},"main_group":{"type":"array","items":{"$ref":"#/components/schemas/KbliMainClass"}}}},"KbliCategoryList":{"type":"object","additionalProperties":false,"required":["success","message","data","meta"],"properties":{"success":{"type":"boolean","const":true},"message":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/KbliCategory"}},"meta":{"$ref":"#/components/schemas/KbliMeta"}}},"KbliGroupResult":{"type":"object","required":["group_id","group_name","group_description","category","main_class","class","sub_class"],"properties":{"group_id":{"type":"string"},"group_name":{"type":"string"},"group_description":{"type":"string"},"category":{"$ref":"#/components/schemas/KbliCodeNameReference"},"main_class":{"$ref":"#/components/schemas/KbliCodeNameReference"},"class":{"$ref":"#/components/schemas/KbliCodeNameReference"},"sub_class":{"anyOf":[{"$ref":"#/components/schemas/KbliCodeNameReference"},{"type":"null"}],"description":"Null bila kelompok terhubung langsung dengan kelas pada sumber KBLI."}}},"KbliGroupList":{"type":"object","additionalProperties":false,"required":["success","message","data","meta"],"properties":{"success":{"type":"boolean","const":true},"message":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/KbliGroupResult"}},"meta":{"$ref":"#/components/schemas/KbliGroupsMeta"}}}}}}