Commute Data Platform

Referensi API

Commute Data API

Data transit Jakarta dan Jabodetabek: stasiun, lin, pumpunan moda, jadwal, dan tarif dari Commuter Line (KCI), MRT Jakarta, LRT Jakarta, LRT Jabodebek, dan TransJakarta.

https://api.commute.shiorilabs.id openapi.json

v1.0.0 · ODbL-1.0 · 15 endpoint

Datanya bebas dipakai dan diolah, asal sumbernya tetap dicantumkan dan hasil olahannya dibagi dengan lisensi yang sama.

Stasiun

Stasiun, jadwalnya, dan transfer antar stasiun.

/stationsget

Semua stasiun dari seluruh operator yang bisa dicari. Stasiun yang cuma dipakai buat routing tidak termasuk di sini. Isinya jarang berubah, jadi bisa di-cache di sisi kamu.

Bentuk data

statusnumber

Sama dengan HTTP status code-nya.

dataStation[]

Berhasil.

{
  "status": 200,
  "data": [
    {
      "id": "KCI-AC",
      "name": "Ancol",
      "officialName": "ANCOL",
      "code": "AC",
      "regionCode": "CGK",
      "operator": "KCI",
      "lines": [
        "KCI:TP"
      ],
      "amenities": [],
      "latitude": -6.128,
      "longitude": 106.8451,
      "score": 19,
      "searchable": true
    },
    {
      "id": "KCI-AK",
      "name": "Angke",
      "officialName": "ANGKE",
      "code": "AK",
      "regionCode": "CGK",
      "operator": "KCI",
      "lines": [
        "KCI:C"
      ],
      "amenities": [],
      "latitude": -6.1446,
      "longitude": 106.8008,
      "score": 46,
      "searchable": true
    },
    "… 399 lainnya"
  ]
}
/stations/{operator}get

Parameter path

operatorstringwajibKCI

Kode operator, misalnya KCI, MRTJ, TJ.

Bentuk data

statusnumber

Sama dengan HTTP status code-nya.

dataStation[]

Berhasil.

{
  "status": 200,
  "data": [
    {
      "id": "KCI-AC",
      "name": "Ancol",
      "officialName": "ANCOL",
      "code": "AC",
      "regionCode": "CGK",
      "operator": "KCI",
      "lines": [
        "KCI:TP"
      ],
      "amenities": [],
      "latitude": -6.128,
      "longitude": 106.8451,
      "score": 19,
      "searchable": true
    },
    {
      "id": "KCI-AK",
      "name": "Angke",
      "officialName": "ANGKE",
      "code": "AK",
      "regionCode": "CGK",
      "operator": "KCI",
      "lines": [
        "KCI:C"
      ],
      "amenities": [],
      "latitude": -6.1446,
      "longitude": 106.8008,
      "score": 46,
      "searchable": true
    },
    "… 110 lainnya"
  ]
}

Kode operator tidak ditemukan.

{
  "status": 404,
  "error": "string"
}
/stations/{operator}/{stationCode}get

Detail lengkap satu stasiun, termasuk fasilitas dan koordinatnya. Beda dengan endpoint daftar, di sini stasiun yang cuma dipakai buat routing juga ikut dikembalikan.

Parameter path

operatorstringwajibKCI

Kode operator, misalnya KCI, MRTJ, TJ.

stationCodestringwajibSUD

Kode stasiun versi operatornya, bukan station id yang lengkap.

Bentuk data

statusnumber

Sama dengan HTTP status code-nya.

Berhasil.

{
  "status": 200,
  "data": {
    "id": "KCI-SUD",
    "name": "Sudirman",
    "officialName": "SUDIRMAN",
    "code": "SUD",
    "regionCode": "CGK",
    "operator": "KCI",
    "lines": [
      "KCI:C"
    ],
    "amenities": [
      {
        "type": "TOILET",
        "text": "Peron 1"
      },
      {
        "type": "PRAYING_ROOM",
        "text": "Peron 1"
      },
      "… 5 lainnya"
    ],
    "latitude": -6.2024,
    "longitude": 106.8237,
    "score": 79,
    "searchable": true
  }
}

Kode operator atau stasiun tidak ditemukan.

{
  "status": 404,
  "error": "string"
}
/stations/{operator}/{stationCode}/timetableget

Semua jadwal keberangkatan dalam satu daftar, tanpa dipisah per lin. Kalau butuh yang sudah dikelompokkan per arah seperti papan keberangkatan, pakai /timetable/grouped. Bisa dipersempit ke rentang jam pakai from dan to (format HH:MM, waktu lokal Asia/Jakarta). Rentangnya dibulatkan ke jam bulat: from=12:13&to=15:18 jadi jam 12 sampai 15, mencakup keberangkatan sampai 15:59. Rentang yang melewati tengah malam ditulis biasa saja, misalnya from=22:00&to=02:00 buat kereta terakhir. Kalau from dan to persis sama, yang keluar sehari penuh.

Parameter path

operatorstringwajibKCI

Kode operator, misalnya KCI, MRTJ, TJ.

stationCodestringwajibSUD

Kode stasiun versi operatornya, bukan station id yang lengkap.

Parameter query

daystringSAT

Hari yang mau dilihat: WD (Senin-Jumat), SAT, atau SUN. Hari libur nasional ikut jadwal SUN. Default-nya hari ini waktu Jakarta.

fromstring12:00

Awal rentang jam keberangkatan, format HH:MM 24 jam, waktu lokal Asia/Jakarta. Dibulatkan ke bawah ke jam bulat, jadi 12:13 sama saja dengan 12:00. Kalau cuma to yang diisi, rentangnya mulai dari 00:00.

tostring15:00

Akhir rentang jam keberangkatan. Dibulatkan ke atas sampai akhir jamnya, jadi 15:18 mencakup semua keberangkatan sampai 15:59 dan yang diminta tidak ada yang hilang. Boleh lebih kecil dari from buat rentang yang melewati tengah malam, misalnya 22:00 sampai 02:00. Kalau persis sama dengan from, yang keluar sehari penuh.

Bentuk data

statusnumber

Sama dengan HTTP status code-nya.

dataSchedule[]

Berhasil.

{
  "status": 200,
  "data": [
    {
      "id": "KCI-SUD-5198C",
      "stationId": "KCI-SUD",
      "tripNumber": "5198C",
      "estimatedDeparture": "00: 05: 30",
      "estimatedArrival": "01: 04: 00",
      "boundFor": "Cikarang",
      "lineCode": "C",
      "createdAt": "2026-10-06 01: 43: 24",
      "updatedAt": "2026-10-06 01: 43: 24",
      "dayMask": 7
    },
    {
      "id": "KCI-SUD-5752C",
      "stationId": "KCI-SUD",
      "tripNumber": "5752C",
      "estimatedDeparture": "00: 15: 30",
      "estimatedArrival": "00: 22: 00",
      "boundFor": "Manggarai",
      "lineCode": "C",
      "createdAt": "2026-10-06 01: 43: 24",
      "updatedAt": "2026-10-06 01: 43: 24",
      "dayMask": 7
    },
    "… 262 lainnya"
  ]
}

Format `from` atau `to` salah (`INVALID_TIME_RANGE`). Pakai `HH:MM` 24 jam.

{
  "status": 404,
  "error": "string"
}

Kode operator atau stasiun tidak ditemukan.

{
  "status": 404,
  "error": "string"
}
/stations/{operator}/{stationCode}/timetable/groupedget

Jadwal keberangkatan yang sudah dikelompokkan per lin, arah, dan tujuan, sesuai bentuk yang ditampilkan papan keberangkatan. Arahnya ditentukan dari stasiun terakhir tiap perjalanan. Kalau butuh response yang lebih ringan, pakai compact=1. Tiap keberangkatan jadi tuple [tripNumber, minutesSinceMidnight], bukan object penuh. Menitnya pakai waktu lokal Asia/Jakarta, dari 0 sampai 1439. Bisa dipersempit ke rentang jam pakai from dan to (format HH:MM, dibulatkan ke jam bulat). Pengelompokannya tetap dihitung dari jadwal sehari penuh, jadi arah dan tujuan yang muncul tidak berubah cuma karena rentangnya dipersempit; yang tersaring keberangkatannya.

Parameter path

operatorstringwajibKCI

Kode operator, misalnya KCI, MRTJ, TJ.

stationCodestringwajibSUD

Kode stasiun versi operatornya, bukan station id yang lengkap.

Parameter query

compactstring1

Isi 1 kalau mau keberangkatannya dalam bentuk tuple. Nilai lain akan mengembalikan bentuk penuh.

daystringSAT

Hari yang mau dilihat: WD (Senin-Jumat), SAT, atau SUN. Hari libur nasional ikut jadwal SUN. Default-nya hari ini waktu Jakarta.

fromstring12:00

Awal rentang jam keberangkatan, format HH:MM 24 jam, waktu lokal Asia/Jakarta. Dibulatkan ke bawah ke jam bulat, jadi 12:13 sama saja dengan 12:00. Kalau cuma to yang diisi, rentangnya mulai dari 00:00.

tostring15:00

Akhir rentang jam keberangkatan. Dibulatkan ke atas sampai akhir jamnya, jadi 15:18 mencakup semua keberangkatan sampai 15:59 dan yang diminta tidak ada yang hilang. Boleh lebih kecil dari from buat rentang yang melewati tengah malam, misalnya 22:00 sampai 02:00. Kalau persis sama dengan from, yang keluar sehari penuh.

Bentuk data

statusnumber

Sama dengan HTTP status code-nya.

Berhasil.

{
  "status": 200,
  "data": [
    {
      "line": "KCI:C",
      "timetable": [
        {
          "key": "MRI:MRI",
          "label": [
            "Manggarai",
            "Jatinegara",
            "Cikarang"
          ],
          "platformCode": "2",
          "destinations": [
            {
              "boundFor": "Cikarang",
              "via": null,
              "schedules": [
                {
                  "tripNumber": "5198C",
                  "estimatedDeparture": "00: 05: 30",
                  "boundFor": "Cikarang",
                  "lineCode": "C"
                },
                {
                  "tripNumber": "5018C",
                  "estimatedDeparture": "05: 21: 30",
                  "boundFor": "Cikarang",
                  "lineCode": "C"
                },
                "… 52 lainnya"
              ]
            },
            {
              "boundFor": "Tambun",
              "via": null,
              "schedules": [
                {
                  "tripNumber": "5022D",
                  "estimatedDeparture": "05: 43: 30",
                  "boundFor": "Tambun",
                  "lineCode": "C"
                },
                {
                  "tripNumber": "6018D",
                  "estimatedDeparture": "10: 11: 30",
                  "boundFor": "Tambun",
                  "lineCode": "C"
                },
                {
                  "tripNumber": "5146D",
                  "estimatedDeparture": "18: 03: 30",
                  "boundFor": "Tambun",
                  "lineCode": "C"
                }
              ]
            },
            "… 2 lainnya"
          ]
        },
        {
          "key": "SUDB:",
          "label": [
            "BNI City",
            "Tanah Abang",
            "Kampung Bandan"
          ],
          "platformCode": "1",
          "destinations": [
            {
              "boundFor": "Kampung Bandan",
              "via": null,
              "schedules": [
                {
                  "tripNumber": "5701C",
                  "estimatedDeparture": "04: 19: 30",
                  "boundFor": "Kampung Bandan",
                  "lineCode": "C"
                },
                {
                  "tripNumber": "5505C",
                  "estimatedDeparture": "05: 23: 00",
                  "boundFor": "Kampung Bandan",
                  "lineCode": "C"
                },
                "… 60 lainnya"
              ]
            },
            {
              "boundFor": "Angke",
              "via": null,
              "schedules": [
                {
                  "tripNumber": "5703C",
                  "estimatedDeparture": "04: 34: 30",
                  "boundFor": "Angke",
                  "lineCode": "C"
                },
                {
                  "tripNumber": "5021C",
                  "estimatedDeparture": "04: 59: 00",
                  "boundFor": "Angke",
                  "lineCode": "C"
                },
                "… 67 lainnya"
              ]
            },
            {
              "boundFor": "Duri",
              "via": null,
              "schedules": [
                {
                  "tripNumber": "2023C",
                  "estimatedDeparture": "23: 19: 30",
                  "boundFor": "Duri",
                  "lineCode": "C"
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

Format `from` atau `to` salah (`INVALID_TIME_RANGE`). Pakai `HH:MM` 24 jam.

{
  "status": 404,
  "error": "string"
}

Kode operator atau stasiun tidak ditemukan.

{
  "status": 404,
  "error": "string"
}
/stations/{operator}/{stationCode}/timetable/{line}get

Jadwal satu lin di satu stasiun. Sama seperti /timetable, bisa dipersempit pakai from dan to.

Parameter path

operatorstringwajibKCI

Kode operator, misalnya KCI, MRTJ, TJ.

stationCodestringwajibSUD

Kode stasiun versi operatornya, bukan station id yang lengkap.

linestringwajibC

Kode lin yang mau difilter.

Parameter query

daystringSAT

Hari yang mau dilihat: WD (Senin-Jumat), SAT, atau SUN. Hari libur nasional ikut jadwal SUN. Default-nya hari ini waktu Jakarta.

fromstring12:00

Awal rentang jam keberangkatan, format HH:MM 24 jam, waktu lokal Asia/Jakarta. Dibulatkan ke bawah ke jam bulat, jadi 12:13 sama saja dengan 12:00. Kalau cuma to yang diisi, rentangnya mulai dari 00:00.

tostring15:00

Akhir rentang jam keberangkatan. Dibulatkan ke atas sampai akhir jamnya, jadi 15:18 mencakup semua keberangkatan sampai 15:59 dan yang diminta tidak ada yang hilang. Boleh lebih kecil dari from buat rentang yang melewati tengah malam, misalnya 22:00 sampai 02:00. Kalau persis sama dengan from, yang keluar sehari penuh.

Bentuk data

statusnumber

Sama dengan HTTP status code-nya.

dataSchedule[]

Berhasil.

{
  "status": 200,
  "data": [
    {
      "id": "KCI-SUD-5198C",
      "stationId": "KCI-SUD",
      "tripNumber": "5198C",
      "estimatedDeparture": "00: 05: 30",
      "estimatedArrival": "01: 04: 00",
      "boundFor": "Cikarang",
      "lineCode": "C",
      "createdAt": "2026-10-06 01: 43: 24",
      "updatedAt": "2026-10-06 01: 43: 24",
      "dayMask": 7
    },
    {
      "id": "KCI-SUD-5752C",
      "stationId": "KCI-SUD",
      "tripNumber": "5752C",
      "estimatedDeparture": "00: 15: 30",
      "estimatedArrival": "00: 22: 00",
      "boundFor": "Manggarai",
      "lineCode": "C",
      "createdAt": "2026-10-06 01: 43: 24",
      "updatedAt": "2026-10-06 01: 43: 24",
      "dayMask": 7
    },
    "… 262 lainnya"
  ]
}

Format `from` atau `to` salah (`INVALID_TIME_RANGE`). Pakai `HH:MM` 24 jam.

{
  "status": 404,
  "error": "string"
}

Kode operator, stasiun, atau lin tidak ditemukan.

{
  "status": 404,
  "error": "string"
}
/stations/{operator}/{stationCode}/transfersget

Sambungan ke stasiun terdekat, termasuk yang beda operator, lengkap dengan jarak jalan kakinya. Transfer INTERNAL masih di dalam area berbayar, sedangkan EXTERNAL berarti kamu harus tap keluar dulu lalu tap masuk lagi.

Parameter path

operatorstringwajibKCI

Kode operator, misalnya KCI, MRTJ, TJ.

stationCodestringwajibSUD

Kode stasiun versi operatornya, bukan station id yang lengkap.

Bentuk data

statusnumber

Sama dengan HTTP status code-nya.

dataTransfer[]

Berhasil.

{
  "status": 200,
  "data": [
    {
      "id": "T-KCI-SUD-MRTJ-DKA",
      "dataType": "INTERNAL",
      "toStation": {
        "id": "MRTJ-DKA",
        "name": "Dukuh Atas BNI",
        "officialName": "Stasiun Dukuh Atas",
        "code": "DKA",
        "operator": "MRTJ",
        "lines": [
          "MRTJ:M"
        ]
      },
      "distanceM": 90,
      "notes": "Keluar lewat pintu B, lalu jalan lewat Terowongan Kendal dan belok kanan",
      "fromExit": {
        "id": "KCI-SUD:B",
        "ref": "B",
        "name": null,
        "signs": [
          {
            "text": "Jl. Kendal"
          },
          {
            "text": "Jl. Blora"
          },
          "… 4 lainnya"
        ]
      }
    },
    {
      "id": "T-KCI-SUD-LRTJBDB-DKA",
      "dataType": "INTERNAL",
      "toStation": {
        "id": "LRTJBDB-DKA",
        "name": "Dukuh Atas Bank Syariah Indonesia",
        "officialName": "Dukuh Atas",
        "code": "DKA",
        "operator": "LRTJBDB",
        "lines": [
          "LRTJBDB:BK",
          "LRTJBDB:CB"
        ]
      },
      "distanceM": 310,
      "notes": "Keluar lewat pintu C, lalu jalan ke arah JPM Dukuh Atas untuk melanjutkan",
      "fromExit": {
        "id": "KCI-SUD:C",
        "ref": "C",
        "name": null,
        "signs": [
          {
            "text": "JPM Dukuh Atas"
          },
          {
            "text": "LRT Jabodebek Dukuh Atas Bank Syariah Indonesia",
            "kind": "RAIL",
            "stationId": "LRTJBDB-DKA"
          }
        ]
      }
    },
    "… 5 lainnya"
  ]
}

Kode operator atau stasiun tidak ditemukan.

{
  "status": 404,
  "error": "string"
}
/stations/{operator}/{stationCode}/exitsget

Daftar pintu keluar atau gerbang stasiun, urut berdasarkan nama pintu. Datanya diisi bertahap per stasiun, jadi array kosong artinya belum dicatat, bukan berarti stasiunnya nggak punya pintu.

Parameter path

operatorstringwajibKCI

Kode operator, misalnya KCI, MRTJ, TJ.

stationCodestringwajibSUD

Kode stasiun versi operatornya, bukan station id yang lengkap.

Bentuk data

statusnumber

Sama dengan HTTP status code-nya.

Berhasil.

{
  "status": 200,
  "data": [
    {
      "id": "KCI-SUD:A",
      "ref": "A",
      "name": null,
      "latitude": -6.202417,
      "longitude": 106.823028,
      "source": "FIELD",
      "signs": [
        {
          "text": "JXB buy local!"
        },
        {
          "text": "Skate Park Dukuh Atas"
        },
        "… 5 lainnya"
      ]
    },
    {
      "id": "KCI-SUD:B",
      "ref": "B",
      "name": null,
      "latitude": -6.202261,
      "longitude": 106.823185,
      "source": "FIELD",
      "signs": [
        {
          "text": "Jl. Kendal"
        },
        {
          "text": "Jl. Blora"
        },
        "… 4 lainnya"
      ]
    },
    {
      "id": "KCI-SUD:C",
      "ref": "C",
      "name": null,
      "latitude": -6.202643,
      "longitude": 106.824782,
      "source": "FIELD",
      "signs": [
        {
          "text": "JPM Dukuh Atas"
        },
        {
          "text": "LRT Jabodebek Dukuh Atas Bank Syariah Indonesia",
          "kind": "RAIL",
          "stationId": "LRTJBDB-DKA"
        }
      ]
    }
  ]
}

Kode operator atau stasiun tidak ditemukan.

{
  "status": 404,
  "error": "string"
}
/stations/{operator}/{stationCode}/headwayget

Rata-rata berapa lama sekali kendaraan tiap lin lewat stasiun ini. Ini BUKAN jadwal: nggak bisa dipakai buat tahu keberangkatan berikutnya jam berapa, cuma buat tahu kira-kira nunggunya berapa lama. Angkanya ikut hari: sebagian koridor lebih jarang atau malah nggak jalan pas akhir pekan. Defaultnya hari ini di Jakarta, atau tentukan sendiri lewat day. Lin yang nggak jalan di hari yang diminta headwayS-nya null dan days-nya berisi hari-hari lin itu jalan.

Parameter path

operatorstringwajibKCI

Kode operator, misalnya KCI, MRTJ, TJ.

stationCodestringwajibSUD

Kode stasiun versi operatornya, bukan station id yang lengkap.

Parameter query

daystringSAT

Hari yang mau dilihat: WD (Senin-Jumat), SAT, atau SUN. Hari libur nasional ikut jadwal SUN. Default-nya hari ini waktu Jakarta.

hourstring8

Jam yang mau dilihat, 0-23 waktu Jakarta. Default-nya jam sekarang. Dipakai buat headwayS: frekuensi TransJakarta beda-beda tiap jam.

Bentuk data

statusnumber

Sama dengan HTTP status code-nya.

Berhasil.

{
  "status": 200,
  "data": [
    {
      "line": "KCI:C",
      "headwayS": 240,
      "source": "STOP"
    }
  ]
}

Kode operator atau stasiun tidak ditemukan.

{
  "status": 404,
  "error": "string"
}
/stations/{operator}/{stationCode}/densityget

Seberapa padat stasiun ini BIASANYA di tiap jam, buat hari yang diminta. Ini perkiraan dari jadwal kereta, data penumpang yang dipublikasikan operator, dan pola jam sibuk. BUKAN pantauan live, jadi bisa meleset pas ada kejadian khusus. Skalanya 0 lengang, 1 ramai, 2 padat, 3 sangat padat. Tiap jam dikasih rentang min sampai max karena modelnya nggak bisa yakin persis: stasiun yang data penumpangnya dipublikasikan rentangnya lebih sempit daripada yang cuma diperkirakan. Sementara cuma stasiun kereta (KCI, MRT, LRT Jakarta, LRT Jabodebek). Halte TransJakarta dapat null semua.

Parameter path

operatorstringwajibKCI

Kode operator, misalnya KCI, MRTJ, TJ.

stationCodestringwajibSUD

Kode stasiun versi operatornya, bukan station id yang lengkap.

Parameter query

daystringSAT

Hari yang mau dilihat: WD (Senin-Jumat), SAT, atau SUN. Hari libur nasional ikut jadwal SUN. Default-nya hari ini waktu Jakarta.

Bentuk data

statusnumber

Sama dengan HTTP status code-nya.

Berhasil.

{
  "status": 200,
  "data": {
    "day": "WD",
    "hours": [
      {
        "hour": 0,
        "level": null
      },
      {
        "hour": 1,
        "level": null
      },
      "… 22 lainnya"
    ]
  }
}

Kode operator atau stasiun tidak ditemukan.

{
  "status": 404,
  "error": "string"
}

Lin

Struktur lin, termasuk percabangan dan loop.

/lines/{operator}/{lineCode}get

Struktur lengkap satu lin, urut dari stasiun awal. Lin yang lurus cuma punya satu segmen TRUNK. Lin yang bercabang seperti loop Cikarang atau ramp Nambo punya segmen tambahan yang menunjukkan di mana cabangnya berpisah dan menyatu lagi.

Parameter path

operatorstringwajibKCI

Kode operator, misalnya KCI, MRTJ, TJ.

lineCodestringwajibC

Kode lin, bisa diambil dari /operators.

Bentuk data

statusnumber

Sama dengan HTTP status code-nya.

Berhasil.

{
  "status": 200,
  "data": {
    "operator": {
      "code": "KCI",
      "name": "Commuter Line"
    },
    "line": {
      "name": "Lin Cikarang",
      "colorCode": "#25B8EB",
      "lineCode": "C",
      "mode": "RAIL",
      "searchable": true
    },
    "segments": [
      {
        "kind": "TRUNK",
        "joinsAtCode": null,
        "stations": [
          {
            "id": "KCI-CKR",
            "code": "CKR",
            "name": "Cikarang",
            "stationNumber": "C26",
            "isInterchange": false,
            "otherLines": []
          },
          {
            "id": "KCI-TLM",
            "code": "TLM",
            "name": "Metland Telagamurni",
            "stationNumber": "C25",
            "isInterchange": false,
            "otherLines": []
          },
          "… 10 lainnya"
        ]
      },
      {
        "kind": "LOOP",
        "joinsAtCode": "JNG",
        "stations": [
          {
            "id": "KCI-POK",
            "code": "POK",
            "name": "Pondok Jati",
            "stationNumber": "C01",
            "isInterchange": false,
            "otherLines": []
          },
          {
            "id": "KCI-KMT",
            "code": "KMT",
            "name": "Kramat",
            "stationNumber": "C02",
            "isInterchange": false,
            "otherLines": []
          },
          "… 12 lainnya"
        ]
      }
    ]
  }
}

Operator atau lin-nya tidak ditemukan, atau lin-nya belum punya data topologi (`NO_TOPOLOGY`).

{
  "status": 404,
  "error": "string"
}

Pumpunan Moda

Kompleks interchange yang menggabungkan beberapa stasiun.

/hubsget

Beberapa stasiun yang dianggap satu tempat karena saling terhubung. Dukuh Atas, misalnya, mencakup Sudirman, BNI City, plus stasiun MRT dan LRT-nya. Diurutkan dari yang paling ramai.

Bentuk data

statusnumber

Sama dengan HTTP status code-nya.

dataHub[]

Berhasil.

{
  "status": 200,
  "data": [
    {
      "id": "HUB-MRI",
      "slug": "manggarai",
      "name": "Manggarai",
      "kind": "hub",
      "heroImage": null,
      "lines": [
        "KCI:A",
        "KCI:B",
        "… 4 lainnya"
      ],
      "members": [
        {
          "id": "KCI-MRI",
          "name": "Manggarai",
          "officialName": "MANGGARAI",
          "code": "MRI",
          "operator": "KCI",
          "lines": [
            "KCI:A",
            "KCI:B",
            "KCI:C"
          ]
        },
        {
          "id": "LRTJ-MGI",
          "name": "Manggarai",
          "officialName": "Stasiun Manggarai",
          "code": "MGI",
          "operator": "LRTJ",
          "lines": [
            "LRTJ:S"
          ]
        },
        "… 2 lainnya"
      ]
    },
    {
      "id": "HUB-JAKK",
      "slug": "jakarta-kota",
      "name": "Jakarta Kota",
      "kind": "integrated",
      "heroImage": null,
      "lines": [
        "KCI:B",
        "KCI:C",
        "… 7 lainnya"
      ],
      "members": [
        {
          "id": "KCI-JAKK",
          "name": "Jakarta Kota",
          "officialName": "JAKARTA KOTA",
          "code": "JAKK",
          "operator": "KCI",
          "lines": [
            "KCI:B",
            "KCI:C",
            "KCI:TP"
          ]
        },
        {
          "id": "TJ-H00275P",
          "name": "Kota",
          "officialName": "Kota",
          "code": "H00275P",
          "operator": "TJ",
          "lines": [
            "TJ: 1",
            "TJ: 12",
            "… 4 lainnya"
          ]
        }
      ]
    },
    "… 13 lainnya"
  ]
}
/hubs/{slug}get

Satu pumpunan moda lengkap dengan stasiun-stasiun di dalamnya.

Parameter path

slugstringwajibdukuh-atas

Kunci URL pumpunan moda, bisa diambil dari /hubs.

Bentuk data

statusnumber

Sama dengan HTTP status code-nya.

dataHub

Berhasil.

{
  "status": 200,
  "data": {
    "id": "HUB-DKA",
    "slug": "dukuh-atas",
    "name": "Dukuh Atas",
    "kind": "hub",
    "heroImage": null,
    "lines": [
      "KCI:C",
      "KCI:A",
      "… 9 lainnya"
    ],
    "members": [
      {
        "id": "KCI-SUD",
        "name": "Sudirman",
        "officialName": "SUDIRMAN",
        "code": "SUD",
        "operator": "KCI",
        "lines": [
          "KCI:C"
        ]
      },
      {
        "id": "KCI-SUDB",
        "name": "BNI City",
        "officialName": "SUDIRMAN BARU",
        "code": "SUDB",
        "operator": "KCI",
        "lines": [
          "KCI:A",
          "KCI:C"
        ]
      },
      "… 5 lainnya"
    ]
  }
}

Tidak ada pumpunan moda dengan slug tersebut.

{
  "status": 404,
  "error": "string"
}

Tarif

Tarif dan rute antara dua stasiun.

/fares/{from}/{to}get

Mencari rute perjalanan sekaligus menghitung tarifnya. legs adalah perjalanan dari sisi penumpang: naik apa saja dan jalan kaki di mana saja. segments adalah cara tarifnya dihitung, yang bisa berbeda karena tiap operator menagih per perjalanan di jaringan mereka sendiri. Tarif integrasi sudah dihitung di totalFare.

Parameter path

fromstringwajibKCI-SUD

Station id asal, {operator}-{code}.

tostringwajibMRTJ-LBB

Station id tujuan.

Parameter query

paymentMethodstring

Menentukan tarif mana yang dipakai. Default-nya tarif kartu uang elektronik biasa.

atstring2026-07-28T08:00:00Z

Timestamp ISO 8601 buat perjalanannya, dipakai buat menentukan tarif peak atau off-peak. Default-nya waktu sekarang.

Bentuk data

statusnumber

Sama dengan HTTP status code-nya.

Berhasil.

{
  "status": 200,
  "data": {
    "from": {
      "id": "KCI-SUD",
      "name": "Sudirman"
    },
    "to": {
      "id": "MRTJ-LBB",
      "name": "Lebak Bulus Bank Syariah Indonesia"
    },
    "legs": [
      {
        "type": "TRANSFER",
        "from": {
          "id": "KCI-SUD",
          "name": "Sudirman"
        },
        "to": {
          "id": "MRTJ-DKA",
          "name": "Dukuh Atas BNI"
        },
        "distanceM": 90
      },
      {
        "type": "RIDE",
        "line": "MRTJ:M",
        "operator": "MRTJ",
        "from": {
          "id": "MRTJ-DKA",
          "name": "Dukuh Atas BNI"
        },
        "to": {
          "id": "MRTJ-LBB",
          "name": "Lebak Bulus Bank Syariah Indonesia"
        },
        "stationCount": 12,
        "stops": [
          {
            "id": "MRTJ-DKA",
            "name": "Dukuh Atas BNI"
          },
          {
            "id": "MRTJ-STB",
            "name": "Setiabudi Astra"
          },
          "… 10 lainnya"
        ],
        "headsign": "Lebak Bulus Bank Syariah Indonesia",
        "distanceM": 13659
      }
    ],
    "segments": [
      {
        "operator": "MRTJ",
        "from": {
          "id": "MRTJ-DKA",
          "name": "Dukuh Atas BNI"
        },
        "to": {
          "id": "MRTJ-LBB",
          "name": "Lebak Bulus Bank Syariah Indonesia"
        },
        "fare": 14000
      }
    ],
    "totalFare": 14000,
    "totalDistanceM": 13749,
    "transferCount": 1
  }
}

Salah satu stasiunnya tidak ditemukan, tidak ada rute di antara keduanya, atau asal dan tujuannya sama (`SAME_STATION`).

{
  "status": 404,
  "error": "string"
}

Perhitungan tarif gagal (`DATABASE_ERROR`).

{
  "status": 404,
  "error": "string"
}

Operator

Operator transit dan lin yang mereka jalankan.

/operatorsget

Semua operator transit beserta lin yang mereka jalankan. Bagus dipanggil duluan, karena kode dari sini dipakai di seluruh API.

Bentuk data

statusnumber

Sama dengan HTTP status code-nya.

Berhasil.

{
  "status": 200,
  "data": [
    {
      "code": "KCI",
      "name": "Commuter Line",
      "url": "https://kci.id/",
      "timezone": "Asia/Jakarta",
      "lang": "id",
      "mode": "RAIL",
      "lines": [
        {
          "name": "Lin Cikarang",
          "colorCode": "#25B8EB",
          "lineCode": "C",
          "mode": "RAIL",
          "searchable": true
        },
        {
          "name": "Lin Bogor",
          "colorCode": "#EE3D43",
          "lineCode": "B",
          "mode": "RAIL",
          "searchable": true
        },
        "… 4 lainnya"
      ]
    },
    {
      "code": "MRTJ",
      "name": "MRT Jakarta",
      "url": "https://jakartamrt.co.id/",
      "timezone": "Asia/Jakarta",
      "lang": "id",
      "mode": "SUBWAY",
      "lines": [
        {
          "name": "Lin Utara Selatan",
          "colorCode": "#ca2a51",
          "lineCode": "M",
          "mode": "SUBWAY",
          "searchable": true
        }
      ]
    },
    "… 4 lainnya"
  ]
}

Skema

Bentuk data yang dipakai berulang di beberapa endpoint. Tipe di atas menautkan ke sini.

Amenity

Satu fasilitas yang ada di stasiun, kadang dengan keterangan lokasinya.

typeTOILET TOILET_ACCESSIBLE PARKING BIKE_PARKING WIFI CHARGING_STATION PRAYING_ROOM ESCALATOR_UNPAID ESCALATOR_PAID ELEVATOR_UNPAID ELEVATOR_PAID LOCKERS NURSING_ROOM

Fasilitas yang ada di stasiun. TOILET: Toilet · TOILET_ACCESSIBLE: Toilet Difabel · PARKING: Parkir · BIKE_PARKING: Parkir Sepeda · WIFI: WiFi · CHARGING_STATION: Charging Station · PRAYING_ROOM: Mushola · ESCALATOR_UNPAID: Eskalator (Area Umum) · ESCALATOR_PAID: Eskalator (Area Berbayar) · ELEVATOR_UNPAID: Lift (Area Umum) · ELEVATOR_PAID: Lift (Area Berbayar) · LOCKERS: Loker · NURSING_ROOM: Ruang Menyusui.

textstringopsional
CompactGroupedTimetable

Sama dengan GroupedTimetable, tapi tiap keberangkatan diringkas jadi tuple [tripNumber, minutesSinceMidnight] biar payload-nya lebih kecil.

linestring

Lin yang punya keberangkatan ini.

timetableobject[]

Satu entri per arah keberangkatan.

keystring

Key yang stabil buat kelompok arah ini.

labelstring[]

Label arahnya, berisi nama stasiun. Gabungkan pakai " / " kalau mau ditampilkan.

platformCodestring

Info peron yang sudah kita kurasi. Null kalau peronnya belum diketahui.

destinationsobject[]

Satu entri per stasiun akhir di arah ini.

boundForstring

Stasiun akhir yang dituju.

viastring

Terisi kalau ada dua perjalanan ke stasiun akhir yang sama tapi lewat jalur berbeda.

schedulesstring | number[][]

Keberangkatan menuju stasiun akhir itu, urut dari yang paling awal.

DensityHour

Perkiraan kepadatan satu jam.

hournumber

Jam, 0-23 waktu Jakarta.

Perkiraan kepadatan biasanya di jam ini. null kalau lagi nggak ada layanan atau keretanya jarang banget, jadi nggak bisa diperkirakan. null BUKAN berarti lengang.

DensityRange

Rentang perkiraan kepadatan. Modelnya nggak yakin persis, jadi kasih rentang: { min: 2, max: 3 } artinya biasanya padat sampai sangat padat. Kalau min sama dengan max, modelnya cukup yakin.

mininteger

Ujung bawah perkiraan: 0 lengang, 1 ramai, 2 padat, 3 sangat padat.

maxinteger

Ujung atas perkiraan, skala yang sama. Selalu >= min.

Error

Isi error waktu request-nya gagal.

codestring

Kode error yang bisa dibaca mesin, misalnya SAME_STATION, NOT_FOUND.

messagestring
ExitRef

Rujukan singkat ke satu pintu keluar stasiun.

idstring
refstring

Nama pintu persis seperti tulisan di papan petunjuk, misalnya B atau Utara.

namestring

Jalan atau penanda tempat pintu ini membuka. Null kalau belum dicatat.

signsExitSign[]

Isi papan petunjuk pintu ini, urut seperti yang tercetak. Null kalau papannya belum disalin.

ExitSign

Satu baris di papan petunjuk pintu keluar.

textstring

Tulisan di papan, persis seperti yang tercetak.

kindRAIL BUSopsional

Hanya kalau papan memberi ikon: RAIL = stasiun kereta, BUS = halte bus.

stationIdstringopsional

ID internal stasiun atau halte yang dimaksud tulisan ini, kalau ada, misalnya MRTJ-DKA. Tidak diisi buat jalan atau gedung.

ExternalTransfer

Sambungan ke layanan yang belum ada di API ini. Tidak ada station id atau lin, cuma nama.

idstring
distanceMnumber

Jarak jalan kaki dalam meter.

notesstring

Petunjuk tambahan buat jalan kakinya. Null kalau tidak ada yang perlu dijelaskan.

fromExitExitRefopsional
dataTypeEXTERNAL
toStationobject
namestring
operatorNamestring

Nama operatornya dalam teks biasa, karena layanan di luar API ini tidak punya kode operator.

FareLeg

Satu tahap perjalanan. Dibedakan lewat type.

bentuk 1

bentuk 2

FareLegDeparture

Satu kendaraan yang melayani seluruh tahap, dari stasiun naik sampai stasiun turun, sesuai jadwal resmi.

departureAtstring

Jam berangkat dari stasiun naik.

arrivalAtstring

Jam tiba di stasiun turun.

tripIdstring

Penanda perjalanan kendaraan ini. Jangan diurai, cuma buat membandingkan.

linestring

OPERATOR:CODE, dicocokkan ke kamus lin dari /operators.

headsignstringopsional

Stasiun akhir yang dituju kendaraan ini, kalau jadwalnya mencantumkan.

FareLineRef

Lin yang dipakai di satu tahap perjalanan.

linestring

OPERATOR:CODE, dicocokkan ke kamus lin dari /operators.

headsignstring

Stasiun akhir yang dituju perjalanan ini.

FareResult

Hasil pencarian rute: perjalanannya seperti apa (legs) dan tarifnya dihitung bagaimana (segments).

legsFareLeg[]

Perjalanan dari sisi penumpang: naik apa saja dan transfer di mana saja.

segmentsFareSegment[]

Perjalanan dari sisi penagihan tarif.

totalFarenumber

Total dalam rupiah, sudah termasuk batas tarif integrasi. Null kalau tarif buat pasangan stasiun ini tidak bisa dihitung.

totalDistanceMnumber

Total jarak seluruh perjalanan dalam meter.

transferCountnumber

Berapa kali harus pindah kendaraan.

FareRideLeg

Tahap perjalanan naik kendaraan, dari stasiun naik sampai stasiun turun.

typeRIDE
linestring

OPERATOR:CODE, dicocokkan ke kamus lin dari /operators.

operatorKCI MRTJ LRTJ LRTJBDB TJ APCGK

Operator transit. KCI: Commuter Line · MRTJ: MRT Jakarta · LRTJ: LRT Jakarta · LRTJBDB: LRT Jabodebek · TJ: TransJakarta · APCGK: Kalayang Bandara. NUL cuma placeholder internal dan tidak pernah muncul di response.

stationCountnumber

Jumlah stasiun yang dilewati, termasuk stasiun awal dan akhir.

Daftar stasiun lengkap dan urut, dari tempat naik sampai tempat turun.

headsignstring

Stasiun akhir yang dituju. Null kalau tidak bisa ditentukan.

distanceMnumber

Jarak tempuh tahap ini dalam meter.

serviceLinesFareLineRef[]opsional

Cuma muncul di jalur yang dipakai bersama beberapa lin, jadi naik yang mana pun tetap sampai. Lin utamanya ditaruh paling depan.

departureAtstringopsional

Jam berangkat dari stasiun naik, sesuai jadwal resmi. Cuma ada di tahap yang jadwalnya kami punya.

arrivalAtstringopsional

Jam tiba di stasiun turun, sesuai jadwal resmi. Cuma ada di tahap yang jadwalnya kami punya.

lastServicetrueopsional

Ada dan bernilai true kalau ini kendaraan terakhir hari ini yang bisa dinaiki dari stasiun naik sampai stasiun turun tahap ini. Ketinggalan berarti tahap ini baru bisa dinaiki besok. Cuma ada di tahap yang jadwalnya kami punya.

stopTimesstring[]opsional

Jam kendaraan ada di tiap stasiun, urut sama dengan stops. Null kalau jamnya tidak tercatat. Cuma ada di tahap yang jadwalnya kami punya.

tripIdstringopsional

Penanda perjalanan kendaraan yang dinaiki. Jangan diurai, cuma buat membandingkan. Cuma ada di tahap yang jadwalnya kami punya.

minChangeSnumberopsional

Waktu pindah paling singkat dalam detik, dari turun di tahap naik sebelumnya sampai bisa naik di tahap ini, termasuk jalan kaki, sesuai kecepatan jalan penumpang. Tidak ada di tahap naik pertama atau tahap yang tidak punya jadwal.

upcomingDeparturesFareLegDeparture[]opsional

Kendaraan yang bisa dinaiki di tahap ini, urut dari yang paling cepat. Yang pertama selalu kendaraan yang dipakai di departureAt. Cuma ada di tahap yang jadwalnya kami punya.

earlierDeparturesFareLegDeparture[]opsional

Kendaraan yang jadwalnya sudah lewat sedikit sebelum departureAt tapi mungkin masih di peron kalau telat, urut dari yang paling awal. Cuma ada kalau memang ada.

platformCodestringopsional

Peron tempat naik, kalau datanya sudah diverifikasi. Bisa berupa rentang kalau peronnya pulau.

FareSegment

Satu bagian perjalanan yang ditagih. Tiap operator menagih per perjalanan menerus di jaringan mereka sendiri, makanya segment dan leg tidak selalu satu lawan satu.

operatorKCI MRTJ LRTJ LRTJBDB TJ APCGK

Operator transit. KCI: Commuter Line · MRTJ: MRT Jakarta · LRTJ: LRT Jakarta · LRTJBDB: LRT Jabodebek · TJ: TransJakarta · APCGK: Kalayang Bandara. NUL cuma placeholder internal dan tidak pernah muncul di response.

farenumber

Tarif buat segmen ini dalam rupiah. Null kalau tidak bisa dihitung.

FareStation

Stasiun di dalam hasil pencarian tarif.

idstring
namestring
latitudenumberopsional

Lintang stasiun. Cuma ada kalau koordinat stasiunnya kami punya.

longitudenumberopsional

Bujur stasiun. Cuma ada kalau koordinat stasiunnya kami punya.

FareTransferLeg

Tahap pindah kendaraan, biasanya jalan kaki antar peron atau antar stasiun.

typeTRANSFER
distanceMnumber

Jarak jalan kaki dalam meter. Jalan kaki yang berurutan digabung jadi satu tahap, jaraknya dibulatkan ke atas: kelipatan 50 m kalau di bawah 500 m, selebihnya kelipatan 100 m.

farenumberopsional

Cuma ada di koridor berbayar. Transfer jalan kaki biasa gratis, jadi tidak punya ini.

corridorLabelstringopsional

Nama koridor yang dilewati waktu pindah, kalau ada.

fromExitExitRefopsional
toExitExitRefopsional
GroupedTimetable

Jadwal satu lin, dikelompokkan tiga tingkat: per arah, lalu per stasiun tujuan, lalu daftar keberangkatannya. Ini bentuk yang dipakai papan keberangkatan.

linestring

Lin yang punya keberangkatan ini.

timetableobject[]

Satu entri per arah keberangkatan.

keystring

Key yang stabil buat kelompok arah ini.

labelstring[]

Label arahnya, berisi nama stasiun. Gabungkan pakai " / " kalau mau ditampilkan.

platformCodestring

Info peron yang sudah kita kurasi. Null kalau peronnya belum diketahui.

destinationsobject[]

Satu entri per stasiun akhir di arah ini.

boundForstring

Stasiun akhir yang dituju.

viastring

Terisi kalau ada dua perjalanan ke stasiun akhir yang sama tapi lewat jalur berbeda.

schedulesSchedule[]

Keberangkatan menuju stasiun akhir itu, urut dari yang paling awal.

HeadwayRow

Seberapa sering kendaraan lewat, bukan jadwal. Nggak bisa dipakai buat tahu kapan yang berikutnya datang.

linestring

Kunci lin, format OPERATOR:KODE — sama seperti yang ada di lines punya stasiun.

headwaySnumber

Rata-rata jarak antar kendaraan dalam detik. null kalau linnya cuma jalan pas akhir pekan.

sourceSTOP LINE

STOP kalau angkanya diukur di halte/stasiun ini sendiri, LINE kalau ambil rata-rata se-lin.

weekendOnlytrueopsional

DEPRECATED, pakai days. Ada dan bernilai true kalau linnya nggak jalan di hari kerja.

daysenum[]opsional

Hari-hari linnya jalan, urut. WD = Senin-Jumat, SAT = Sabtu, SUN = Minggu. Cuma ada kalau linnya nggak jalan setiap hari — kalau field-nya nggak ada, berarti tiap hari.

boundForstringopsional

Nama halte tujuan akhir buat arah ini, kayak yang ada di papan halte ("arah Galunggung"). Cuma ada kalau dua arahnya beda frekuensi — kalau nggak ada, angkanya berlaku buat dua-duanya.

scheduledSnumberopsional

Angka jadwal (GTFS) buat hari ini, sebelum disesuaikan dengan jam. Cuma ada kalau basis ada. null kalau linnya nggak jalan di hari itu.

basisOBSERVED INTERPOLATED SCALEDopsional

Dari mana headwayS berasal, cuma ada buat TransJakarta. OBSERVED = diukur dari posisi bus di jam itu. INTERPOLATED = diperkirakan dari jam-jam terdekat yang terukur, karena jam itu sendiri belum terukur. SCALED = angka jadwal yang disesuaikan dengan pola jam itu, kalau jam-jam di sekitarnya pun belum terukur. Kalau field-nya nggak ada, headwayS adalah angka jadwal apa adanya.

serviceHoursobjectopsional

Jam operasional lin ini di hari yang diminta, se-lin, bukan jam lewat di halte ini. Sekarang cuma ada buat TransJakarta, dan cuma kalau datanya ada — kalau nggak ada, berarti nggak diketahui, bukan 24 jam.

bentuk 1

startstring

Jam mulai operasional, HH:MM waktu Jakarta.

endstring

Jam selesai operasional, HH:MM waktu Jakarta. Bisa lebih kecil dari start kalau lewat tengah malam.

bentuk 2

allDaytrue

Linnya jalan 24 jam.

Hub

Beberapa stasiun yang dianggap satu tempat karena saling terhubung. Pumpunan moda sendiri tidak punya koordinat, yang punya stasiun-stasiun di dalamnya.

idstring
slugstring

Kunci buat URL-nya. Bisa berubah sewaktu-waktu, jadi pakai id kalau butuh yang stabil.

namestring
kindhub integrated

hub: beberapa stasiun yang namanya berbeda tapi ada di satu kompleks, jadi pengelompokannya membawa informasi. integrated: buat penumpang ini satu tempat yang sama, terpisahnya cuma di data antar operator.

heroImagestring

Foto kompleksnya, buat social card dan header halaman.

linesstring[]

Semua lin yang bisa dinaiki dari sini, sudah digabung dari seluruh stasiun anggotanya.

membersStationRef[]

Stasiun-stasiun yang ada di dalamnya, urut sesuai tampilan.

InternalTransfer

Sambungan ke stasiun lain yang ada di API ini. toStation berisi referensi stasiun lengkap.

idstring
distanceMnumber

Jarak jalan kaki dalam meter.

notesstring

Petunjuk tambahan buat jalan kakinya. Null kalau tidak ada yang perlu dijelaskan.

fromExitExitRefopsional
dataTypeINTERNAL
toStationStationRef
toExitExitRefopsional
Line

Satu lin, dengan kode dan warna yang dipakai di roundel-nya.

namestring
lineCodestring
colorCodestring

Warna hex buat roundel dan branding lin ini.

modeTransitModeopsional
searchablebooleanopsional

False kalau lin ini cuma dipakai buat routing dan sengaja disembunyikan dari pencarian dan sitemap. Lin seperti ini tetap ada di kamus lin, karena stasiun masih merujuk ke sana, tapi halaman detailnya belum tersedia.

LineDetail

Struktur lengkap satu lin: segmen-segmennya, plus stasiun yang dilewati tiap segmen.

operatorOperator
lineLine
segmentsLineSegment[]

Struktur lin secara urut. Lin sederhana cuma punya satu TRUNK; lin bercabang menambah segmen lain.

LineSegment

Satu ruas lin. Lin lurus cuma punya satu ruas TRUNK; lin bercabang punya beberapa.

kindTRUNK CONTINUATION RAMP LOOP

TRUNK: jalur utama. CONTINUATION: cabang yang meneruskan jalur utama dan terbaca sebagai mainline. RAMP: cabang samping yang memisah. LOOP: cabang yang menyatu kembali ke jalur utama.

joinsAtCodestring

Kode stasiun tempat cabang ini berpisah dari jalur utama; null buat TRUNK.

stationsLineStation[]
LineStation

Satu stasiun di sepanjang lin, urut dari stasiun awal.

idstring
codestring
namestring

Nama tampilan.

stationNumberstring

Label posisi di sepanjang lin, misalnya C13.

isInterchangeboolean

True kalau stasiun ini titik pindah ke lin lain.

otherLinesstring[]

Lin lain dari operator yang SAMA yang berhenti di sini, berupa line key. Lin yang sedang dibuka tidak termasuk. Sambungan lintas operator ada di transfer stasiunnya.

Operator

Operator transit yang menjalankan lin dan stasiun.

codeKCI MRTJ LRTJ LRTJBDB TJ APCGK

Operator transit. KCI: Commuter Line · MRTJ: MRT Jakarta · LRTJ: LRT Jakarta · LRTJBDB: LRT Jabodebek · TJ: TransJakarta · APCGK: Kalayang Bandara. NUL cuma placeholder internal dan tidak pernah muncul di response.

namestring
OperatorWithLines

Operator beserta seluruh lin yang dijalankannya. Ini yang dikembalikan /operators.

codeKCI MRTJ LRTJ LRTJBDB TJ APCGK

Operator transit. KCI: Commuter Line · MRTJ: MRT Jakarta · LRTJ: LRT Jakarta · LRTJBDB: LRT Jabodebek · TJ: TransJakarta · APCGK: Kalayang Bandara. NUL cuma placeholder internal dan tidak pernah muncul di response.

namestring
urlstring

Situs resmi operatornya. Sama dengan agency_url di GTFS.

timezonestring

Zona waktu yang dipakai semua jadwal operator ini. Sama dengan agency_timezone di GTFS, dan selalu Asia/Jakarta di sini.

langstring

Bahasa yang dipakai buat nama stasiun dan lin. Sama dengan agency_lang di GTFS.

linesLine[]
Schedule

Satu keberangkatan: kapan berangkat, menuju ke mana, dan dari peron berapa.

tripNumberstring

Nomor perjalanan versi operatornya. Null kalau operatornya tidak menerbitkan nomor.

estimatedDeparturestring

Waktu lokal, HH:MM:SS.

boundForstring

Stasiun akhir yang dituju perjalanan ini.

lineCodestring
Station

Satu stasiun lengkap dengan fasilitas, koordinat, dan lin yang berhenti di sana.

idstring

Identifier yang stabil, formatnya {operatorCode}-{stationCode}. Pakai ini kalau mau cek tarif.

namestring

Nama yang ditampilkan ke penumpang.

officialNamestring

Nama versi operatornya sendiri, yang sering beda jauh dari nama tampilannya. KCI, misalnya, masih menulis "SUDIRMAN BARU" buat stasiun yang kita tampilkan sebagai "BNI City". Berguna buat pencarian, karena banyak penumpang masih menyebut stasiunnya dengan nama ini.

codestring

Kode stasiun versi operatornya. Unik di dalam satu operator, tapi belum tentu unik antar operator.

operatorKCI MRTJ LRTJ LRTJBDB TJ APCGK

Operator transit. KCI: Commuter Line · MRTJ: MRT Jakarta · LRTJ: LRT Jakarta · LRTJBDB: LRT Jabodebek · TJ: TransJakarta · APCGK: Kalayang Bandara. NUL cuma placeholder internal dan tidak pernah muncul di response.

linesstring[]

Lin yang berhenti di stasiun ini, dalam bentuk key ke kamus lin dari /operators. Kosong kalau stasiunnya cuma dipakai buat routing.

regionCodeCGK BDO YIA

Wilayah, dinamai dari kode IATA bandara besar terdekat. CGK: Jabodetabek · BDO: Bandung Raya · YIA: Jogja-Solo.

amenitiesAmenity[]
latitudenumber

Lintang WGS84. Null kalau koordinatnya belum disurvei.

longitudenumber
scorenumber

Seberapa ramai stasiunnya (0-100), dipakai buat mengurutkan hasil pencarian. Makin tinggi makin ramai. Buat stasiun yang datanya dirilis operator, angkanya dihitung dari jumlah penumpang beneran (gate in-out plus penumpang transit). Sisanya perkiraan dari frekuensi kereta dan bentuk jaringan, bukan hasil pengukuran. TransJakarta belum dihitung, jadi masih 0.

searchableboolean

False kalau stasiunnya cuma dipakai buat routing dan sengaja disembunyikan dari pencarian. Di response daftar selalu true, karena yang seperti itu sudah difilter duluan.

StationDensity

Perkiraan seberapa padat stasiun ini biasanya, per jam.

dayWD SAT SUN

Hari yang dipakai: WD (Senin-Jumat), SAT, atau SUN.

24 jam, urut dari 0. Ini perkiraan dari jadwal dan data penumpang, BUKAN kondisi live.

StationExit

Satu pintu keluar atau gerbang stasiun.

idstring
refstring

Nama pintu persis seperti tulisan di papan petunjuk, misalnya B atau Utara.

namestring

Jalan atau penanda tempat pintu ini membuka. Null kalau belum dicatat.

signsExitSign[]

Isi papan petunjuk pintu ini, urut seperti yang tercetak. Null kalau papannya belum disalin.

latitudenumber

Koordinat pintu itu sendiri, bukan koordinat stasiun. Null kalau belum diukur.

longitudenumber
sourceFIELD OPERATOR OSM

Asal datanya. FIELD = dicek langsung di lokasi, OPERATOR = dari peta resmi operator, OSM = dari OpenStreetMap (ODbL, wajib atribusi).

StationRef

Rujukan ringkas ke sebuah stasiun. Dipakai di tempat yang cuma butuh nama dan kodenya, tanpa detail lengkap.

idstring

Identifier yang stabil, formatnya {operatorCode}-{stationCode}. Pakai ini kalau mau cek tarif.

namestring

Nama yang ditampilkan ke penumpang.

officialNamestring

Nama versi operatornya sendiri, yang sering beda jauh dari nama tampilannya. KCI, misalnya, masih menulis "SUDIRMAN BARU" buat stasiun yang kita tampilkan sebagai "BNI City". Berguna buat pencarian, karena banyak penumpang masih menyebut stasiunnya dengan nama ini.

codestring

Kode stasiun versi operatornya. Unik di dalam satu operator, tapi belum tentu unik antar operator.

operatorKCI MRTJ LRTJ LRTJBDB TJ APCGK

Operator transit. KCI: Commuter Line · MRTJ: MRT Jakarta · LRTJ: LRT Jakarta · LRTJBDB: LRT Jabodebek · TJ: TransJakarta · APCGK: Kalayang Bandara. NUL cuma placeholder internal dan tidak pernah muncul di response.

linesstring[]

Lin yang berhenti di stasiun ini, dalam bentuk key ke kamus lin dari /operators. Kosong kalau stasiunnya cuma dipakai buat routing.

Transfer

Dibedakan lewat dataType. Kebanyakan INTERNAL, tapi EXTERNAL juga ada, jadi tangani dua-duanya.

bentuk 1

bentuk 2

TransitMode

Moda transportasinya, mengikuti route_type di GTFS: RAIL (2), SUBWAY (1), TRAM (0), BUS (3), MONORAIL (12).

enum

Kamus

Arti kode-kode yang dipakai di seluruh API.

Fasilitas

TOILET
Toilet
TOILET_ACCESSIBLE
Toilet Difabel
PARKING
Parkir
BIKE_PARKING
Parkir Sepeda
WIFI
WiFi
CHARGING_STATION
Charging Station
PRAYING_ROOM
Mushola
ESCALATOR_UNPAID
Eskalator (Area Umum)
ESCALATOR_PAID
Eskalator (Area Berbayar)
ELEVATOR_UNPAID
Lift (Area Umum)
ELEVATOR_PAID
Lift (Area Berbayar)
LOCKERS
Loker
NURSING_ROOM
Ruang Menyusui

Operator

KCI
Commuter Line
MRTJ
MRT Jakarta
LRTJ
LRT Jakarta
LRTJBDB
LRT Jabodebek
TJ
TransJakarta
APCGK
Kalayang Bandara

Wilayah

CGK
Jabodetabek
BDO
Bandung Raya
YIA
Jogja-Solo

© 2026 Commute Data Platform · Dibuat oleh Shiori Labs