REST API

REST API menyediakan akses ke data kode pos Indonesia melalui endpoint RESTful. Autentikasi menggunakan header Authorization: Bearer.

Base URL: https://api.kodepos.dev/kodepos/api

Data Model

Data kode pos Indonesia mengikuti hierarki wilayah: Provinsi → Kota/Kabupaten → Kecamatan → Kelurahan/Desa. Setiap kelurahan/desa memiliki kode pos.

EntitasFieldTipeDeskripsi
Province

code

stringKode provinsi (2 digit)

name

stringNama provinsi
City

code

stringKode kota/kabupaten (5 digit)

name

stringNama kota/kabupaten
District

code

stringKode kecamatan (8 digit)

name

stringNama kecamatan
Subdistrict

code

stringKode kelurahan/desa (13 digit)

name

stringNama kelurahan/desa

postalCode

stringKode pos (5 digit)

Response Envelope

Semua response API menggunakan format envelope yang konsisten. Response yang berhasil memiliki field success: true dan data, sedangkan response error memiliki success: false dan error.

Response Berhasil

{
  "success": true,
  "data": [ ... ]
}

Response Error

{
  "success": false,
  "error": {
    "code": "ERROR_CODE",
    "message": "Deskripsi error dalam bahasa Inggris"
  }
}

Pagination

Semua endpoint list mendukung pagination berbasis kursor (cursor-based pagination). Gunakan parameter first dan after untuk menavigasi hasil.

ParameterTipeDefaultDeskripsi

first

integer20Jumlah item per halaman (maks 100)

after

stringnullKursor untuk halaman berikutnya

Contoh Response dengan Pagination

{
  "success": true,
  "data": [
    { "code": "11", "name": "Aceh" },
    { "code": "12", "name": "Sumatera Utara" }
  ],
  "pagination": {
    "hasNextPage": true,
    "endCursor": "eyJjb2RlIjoiMTIifQ=="
  }
}

Menggunakan Kursor

Gunakan nilai endCursor dari response sebelumnya sebagai parameter after untuk mendapatkan halaman berikutnya:

curl -H "Authorization: Bearer kp_live_xxxxxxxxxxxxxxxx" \
  "https://api.kodepos.dev/kodepos/api/provinces?first=10&after=eyJjb2RlIjoiMTIifQ=="

Provinces

GET

/kodepos/api/provinces

Mendapatkan daftar provinsi di Indonesia.

Parameter

ParameterTipeDeskripsi

q

stringKata kunci pencarian (opsional)

first

integerJumlah item per halaman (default 20)

after

stringKursor pagination

Contoh Request

curl -H "Authorization: Bearer kp_live_xxxxxxxxxxxxxxxx" \
  "https://api.kodepos.dev/kodepos/api/provinces?first=5"

Contoh Response

{
  "success": true,
  "data": [
    { "code": "11", "name": "Aceh" },
    { "code": "12", "name": "Sumatera Utara" },
    { "code": "13", "name": "Sumatera Barat" },
    { "code": "14", "name": "Riau" },
    { "code": "15", "name": "Jambi" }
  ],
  "pagination": {
    "hasNextPage": true,
    "endCursor": "eyJjb2RlIjoiMTUifQ=="
  }
}
GET

/kodepos/api/provinces/:code

Mendapatkan detail provinsi berdasarkan kode.

Contoh Request

curl -H "Authorization: Bearer kp_live_xxxxxxxxxxxxxxxx" \
  "https://api.kodepos.dev/kodepos/api/provinces/11"

Contoh Response

{
  "success": true,
  "data": {
    "code": "11",
    "name": "Aceh"
  }
}

Cities

GET

/kodepos/api/cities

Mendapatkan daftar kota/kabupaten berdasarkan kode provinsi.

Parameter

ParameterTipeDeskripsi

provinceCode

wajib
stringFilter berdasarkan kode provinsi (wajib)

q

stringKata kunci pencarian (opsional)

first

integerJumlah item per halaman (default 20)

after

stringKursor pagination

Contoh Request

curl -H "Authorization: Bearer kp_live_xxxxxxxxxxxxxxxx" \
  "https://api.kodepos.dev/kodepos/api/cities?provinceCode=11&first=5"

Contoh Response

{
  "success": true,
  "data": [
    { "code": "11.01", "name": "Kab. Aceh Selatan" },
    { "code": "11.02", "name": "Kab. Aceh Tenggara" },
    { "code": "11.03", "name": "Kab. Aceh Timur" },
    { "code": "11.04", "name": "Kab. Aceh Tengah" },
    { "code": "11.05", "name": "Kab. Aceh Barat" }
  ],
  "pagination": {
    "hasNextPage": true,
    "endCursor": "eyJjb2RlIjoiMTEuMDUifQ=="
  }
}
GET

/kodepos/api/cities/:code

Mendapatkan detail kota/kabupaten berdasarkan kode, termasuk data provinsi induk.

Contoh Response

{
  "success": true,
  "data": {
    "code": "11.01",
    "name": "Kab. Aceh Selatan",
    "province": {
      "code": "11",
      "name": "Aceh"
    }
  }
}

Districts

GET

/kodepos/api/districts

Mendapatkan daftar kecamatan berdasarkan kode kota/kabupaten.

Parameter

ParameterTipeDeskripsi

cityCode

wajib
stringFilter berdasarkan kode kota/kabupaten (wajib)

q

stringKata kunci pencarian (opsional)

first

integerJumlah item per halaman (default 20)

after

stringKursor pagination

Contoh Request

curl -H "Authorization: Bearer kp_live_xxxxxxxxxxxxxxxx" \
  "https://api.kodepos.dev/kodepos/api/districts?cityCode=11.01&first=5"

Contoh Response

{
  "success": true,
  "data": [
    { "code": "11.01.01", "name": "Bakongan" },
    { "code": "11.01.02", "name": "Kluet Utara" },
    { "code": "11.01.03", "name": "Kluet Selatan" },
    { "code": "11.01.04", "name": "Kluet Timur" },
    { "code": "11.01.05", "name": "Kluet Tengah" }
  ],
  "pagination": {
    "hasNextPage": true,
    "endCursor": "eyJjb2RlIjoiMTEuMDEuMDUifQ=="
  }
}
GET

/kodepos/api/districts/:code

Mendapatkan detail kecamatan berdasarkan kode, termasuk data kota dan provinsi induk.

Contoh Response

{
  "success": true,
  "data": {
    "code": "11.01.01",
    "name": "Bakongan",
    "city": {
      "code": "11.01",
      "name": "Kab. Aceh Selatan"
    },
    "province": {
      "code": "11",
      "name": "Aceh"
    }
  }
}

Subdistricts

GET

/kodepos/api/subdistricts

Mendapatkan daftar kelurahan/desa beserta kode pos dan hierarki wilayah berdasarkan kode kecamatan.

Parameter

ParameterTipeDeskripsi

districtCode

wajib
stringFilter berdasarkan kode kecamatan (wajib)

q

stringKata kunci pencarian (opsional)

first

integerJumlah item per halaman (default 20)

after

stringKursor pagination

Contoh Request

curl -H "Authorization: Bearer kp_live_xxxxxxxxxxxxxxxx" \
  "https://api.kodepos.dev/kodepos/api/subdistricts?districtCode=11.01.01&first=5"

Contoh Response

{
  "success": true,
  "data": [
    {
      "code": "11.01.01.2001",
      "name": "Kampung Baru",
      "postalCode": "23761",
      "district": { "code": "11.01.01", "name": "Bakongan" },
      "city": { "code": "11.01", "name": "Kab. Aceh Selatan" },
      "province": { "code": "11", "name": "Aceh" }
    }
  ],
  "pagination": {
    "hasNextPage": false,
    "endCursor": null
  }
}
GET

/kodepos/api/subdistricts/:code

Mendapatkan detail kelurahan/desa berdasarkan kode, termasuk kode pos dan hierarki wilayah lengkap.

Contoh Response

{
  "success": true,
  "data": {
    "code": "11.01.01.2001",
    "name": "Kampung Baru",
    "postalCode": "23761",
    "district": { "code": "11.01.01", "name": "Bakongan" },
    "city": { "code": "11.01", "name": "Kab. Aceh Selatan" },
    "province": { "code": "11", "name": "Aceh" }
  }
}

Pencarian

GET

/kodepos/api/search

Pencarian lintas semua kelurahan/desa berdasarkan kata kunci. Pencarian dilakukan pada nama kelurahan, kode pos, nama kecamatan, nama kota/kabupaten, dan nama provinsi.

Parameter

ParameterTipeDeskripsi

q

wajib
stringKata kunci pencarian (wajib, min. 2 karakter)

first

integerJumlah item per halaman (default 20)

after

stringKursor pagination

Contoh Request

curl -H "Authorization: Bearer kp_live_xxxxxxxxxxxxxxxx" \
  "https://api.kodepos.dev/kodepos/api/search?q=menteng&first=5"

Contoh Response

{
  "success": true,
  "data": [
    {
      "code": "31.73.06.1003",
      "name": "Menteng",
      "postalCode": "10310",
      "district": { "code": "31.73.06", "name": "Menteng" },
      "city": { "code": "31.73", "name": "Kota Jakarta Pusat" },
      "province": { "code": "31", "name": "DKI Jakarta" }
    }
  ],
  "pagination": {
    "hasNextPage": false,
    "endCursor": null
  }
}