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 · 12 endpoint
Datanya bebas dipakai dan diolah, asal sumbernya tetap dicantumkan dan hasil olahannya dibagi dengan lisensi yang sama.
Tidak ada endpoint yang cocok.
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
statusnumberSama 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
},
"… 401 lainnya"
]
}/stations/{operator}get
Parameter path
operatorstringwajibKCIKode operator, misalnya KCI, MRTJ, TJ.
Bentuk data
statusnumberSama 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
operatorstringwajibKCIKode operator, misalnya KCI, MRTJ, TJ.
stationCodestringwajibSUDKode stasiun versi operatornya, bukan station id yang lengkap.
Bentuk data
statusnumberSama dengan HTTP status code-nya.
dataStationBerhasil.
{
"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
operatorstringwajibKCIKode operator, misalnya KCI, MRTJ, TJ.
stationCodestringwajibSUDKode stasiun versi operatornya, bukan station id yang lengkap.
Parameter query
fromstring12:00Awal 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:00Akhir 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
statusnumberSama dengan HTTP status code-nya.
dataSchedule[]Berhasil.
{
"status": 200,
"data": [
{
"id": "KCI-SUD-5198B",
"stationId": "KCI-SUD",
"tripNumber": "5198B",
"estimatedDeparture": "00: 05: 30",
"estimatedArrival": "01: 04: 00",
"boundFor": "Cikarang",
"lineCode": "C",
"createdAt": "2026-07-17 10: 12: 30",
"updatedAt": "2026-07-17 10: 12: 30"
},
{
"id": "KCI-SUD-5752B",
"stationId": "KCI-SUD",
"tripNumber": "5752B",
"estimatedDeparture": "00: 15: 30",
"estimatedArrival": "00: 22: 00",
"boundFor": "Manggarai",
"lineCode": "C",
"createdAt": "2026-07-17 10: 12: 30",
"updatedAt": "2026-07-17 10: 12: 30"
},
"… 258 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
operatorstringwajibKCIKode operator, misalnya KCI, MRTJ, TJ.
stationCodestringwajibSUDKode stasiun versi operatornya, bukan station id yang lengkap.
Parameter query
compactstring1Isi 1 kalau mau keberangkatannya dalam bentuk tuple. Nilai lain akan mengembalikan bentuk penuh.
fromstring12:00Awal 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:00Akhir 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
statusnumberSama dengan HTTP status code-nya.
dataGroupedTimetable[] | CompactGroupedTimetable[]Berhasil.
{
"status": 200,
"data": [
{
"line": "KCI:C",
"timetable": [
{
"key": "MRI:MRI",
"label": [
"Manggarai",
"Jatinegara",
"Cikarang"
],
"platformCode": "2",
"destinations": [
{
"boundFor": "Cikarang",
"via": null,
"schedules": [
{
"tripNumber": "5198B",
"estimatedDeparture": "00: 05: 30",
"boundFor": "Cikarang",
"lineCode": "C"
},
{
"tripNumber": "5018B",
"estimatedDeparture": "05: 21: 30",
"boundFor": "Cikarang",
"lineCode": "C"
},
"… 52 lainnya"
]
},
{
"boundFor": "Tambun",
"via": null,
"schedules": [
{
"tripNumber": "5022C",
"estimatedDeparture": "05: 43: 30",
"boundFor": "Tambun",
"lineCode": "C"
},
{
"tripNumber": "6018C",
"estimatedDeparture": "10: 11: 30",
"boundFor": "Tambun",
"lineCode": "C"
},
{
"tripNumber": "5146C",
"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": "5701B",
"estimatedDeparture": "04: 20: 00",
"boundFor": "Kampung Bandan",
"lineCode": "C"
},
{
"tripNumber": "5505B",
"estimatedDeparture": "05: 23: 00",
"boundFor": "Kampung Bandan",
"lineCode": "C"
},
"… 60 lainnya"
]
},
{
"boundFor": "Angke",
"via": null,
"schedules": [
{
"tripNumber": "5703B",
"estimatedDeparture": "04: 35: 00",
"boundFor": "Angke",
"lineCode": "C"
},
{
"tripNumber": "5021B",
"estimatedDeparture": "04: 59: 00",
"boundFor": "Angke",
"lineCode": "C"
},
"… 66 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/{line}get
Jadwal satu lin di satu stasiun. Sama seperti /timetable, bisa dipersempit pakai from dan to.
Parameter path
operatorstringwajibKCIKode operator, misalnya KCI, MRTJ, TJ.
stationCodestringwajibSUDKode stasiun versi operatornya, bukan station id yang lengkap.
linestringwajibCKode lin yang mau difilter.
Parameter query
fromstring12:00Awal 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:00Akhir 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
statusnumberSama dengan HTTP status code-nya.
dataSchedule[]Berhasil.
{
"status": 200,
"data": [
{
"id": "KCI-SUD-5198B",
"stationId": "KCI-SUD",
"tripNumber": "5198B",
"estimatedDeparture": "00: 05: 30",
"estimatedArrival": "01: 04: 00",
"boundFor": "Cikarang",
"lineCode": "C",
"createdAt": "2026-07-17 10: 12: 30",
"updatedAt": "2026-07-17 10: 12: 30"
},
{
"id": "KCI-SUD-5752B",
"stationId": "KCI-SUD",
"tripNumber": "5752B",
"estimatedDeparture": "00: 15: 30",
"estimatedArrival": "00: 22: 00",
"boundFor": "Manggarai",
"lineCode": "C",
"createdAt": "2026-07-17 10: 12: 30",
"updatedAt": "2026-07-17 10: 12: 30"
},
"… 258 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
operatorstringwajibKCIKode operator, misalnya KCI, MRTJ, TJ.
stationCodestringwajibSUDKode stasiun versi operatornya, bukan station id yang lengkap.
Bentuk data
statusnumberSama 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"
},
{
"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"
},
"… 4 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
operatorstringwajibKCIKode operator, misalnya KCI, MRTJ, TJ.
lineCodestringwajibCKode lin, bisa diambil dari /operators.
Bentuk data
statusnumberSama dengan HTTP status code-nya.
dataLineDetailBerhasil.
{
"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
statusnumberSama 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"
]
},
{
"id": "HUB-CW",
"slug": "cawang",
"name": "Cawang",
"kind": "hub",
"heroImage": null,
"lines": [
"KCI:B",
"LRTJBDB:BK",
"… 7 lainnya"
],
"members": [
{
"id": "KCI-CW",
"name": "Cawang",
"officialName": "CAWANG",
"code": "CW",
"operator": "KCI",
"lines": [
"KCI:B"
]
},
{
"id": "LRTJBDB-CKK",
"name": "Cikoko",
"officialName": "Cikoko",
"code": "CKK",
"operator": "LRTJBDB",
"lines": [
"LRTJBDB:BK",
"LRTJBDB:CB"
]
},
"… 2 lainnya"
]
},
"… 4 lainnya"
]
}/hubs/{slug}get
Satu pumpunan moda lengkap dengan stasiun-stasiun di dalamnya.
Parameter path
slugstringwajibdukuh-atasKunci URL pumpunan moda, bisa diambil dari /hubs.
Bentuk data
statusnumberSama dengan HTTP status code-nya.
dataHubBerhasil.
{
"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-SUDStation id asal, {operator}-{code}.
tostringwajibMRTJ-LBBStation id tujuan.
Parameter query
paymentMethodstringMenentukan tarif mana yang dipakai. Default-nya tarif kartu uang elektronik biasa.
atstring2026-07-28T08:00:00ZTimestamp ISO 8601 buat perjalanannya, dipakai buat menentukan tarif peak atau off-peak. Default-nya waktu sekarang.
Bentuk data
statusnumberSama dengan HTTP status code-nya.
dataFareResultBerhasil.
{
"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": 13298
}
],
"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": 13388,
"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
statusnumberSama dengan HTTP status code-nya.
dataOperatorWithLines[]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_ROOMFasilitas 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.
textstringopsionalCompactGroupedTimetable
Sama dengan GroupedTimetable, tapi tiap keberangkatan diringkas jadi tuple [tripNumber, minutesSinceMidnight] biar payload-nya lebih kecil.
linestringLin yang punya keberangkatan ini.
timetableobject[]Satu entri per arah keberangkatan.
keystringKey yang stabil buat kelompok arah ini.
labelstring[]Label arahnya, berisi nama stasiun. Gabungkan pakai " / " kalau mau ditampilkan.
platformCodestringInfo peron yang sudah kita kurasi. Null kalau peronnya belum diketahui.
destinationsobject[]Satu entri per stasiun akhir di arah ini.
boundForstringStasiun akhir yang dituju.
viastringTerisi 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.
Error
Isi error waktu request-nya gagal.
codestringKode error yang bisa dibaca mesin, misalnya SAME_STATION, NOT_FOUND.
messagestringExternalTransfer
Sambungan ke layanan yang belum ada di API ini. Tidak ada station id atau lin, cuma nama.
idstringdistanceMnumberJarak jalan kaki dalam meter.
notesstringPetunjuk tambahan buat jalan kakinya. Null kalau tidak ada yang perlu dijelaskan.
dataTypeEXTERNALtoStationobjectnamestringoperatorNamestringNama 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
FareLineRef
Lin yang dipakai di satu tahap perjalanan.
linestringOPERATOR:CODE, dicocokkan ke kamus lin dari /operators.
headsignstringStasiun akhir yang dituju perjalanan ini.
FareResult
Hasil pencarian rute: perjalanannya seperti apa (legs) dan tarifnya dihitung bagaimana (segments).
fromFareStationlegsFareLeg[]Perjalanan dari sisi penumpang: naik apa saja dan transfer di mana saja.
segmentsFareSegment[]Perjalanan dari sisi penagihan tarif.
totalFarenumberTotal dalam rupiah, sudah termasuk batas tarif integrasi. Null kalau tarif buat pasangan stasiun ini tidak bisa dihitung.
totalDistanceMnumberTotal jarak seluruh perjalanan dalam meter.
transferCountnumberBerapa kali harus pindah kendaraan.
FareRideLeg
Tahap perjalanan naik kendaraan, dari stasiun naik sampai stasiun turun.
typeRIDElinestringOPERATOR:CODE, dicocokkan ke kamus lin dari /operators.
operatorKCI MRTJ LRTJ LRTJBDB TJ APCGKOperator 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.
fromFareStationstationCountnumberJumlah stasiun yang dilewati, termasuk stasiun awal dan akhir.
stopsFareStation[]Daftar stasiun lengkap dan urut, dari tempat naik sampai tempat turun.
headsignstringStasiun akhir yang dituju. Null kalau tidak bisa ditentukan.
distanceMnumberJarak tempuh tahap ini dalam meter.
Cuma muncul di jalur yang dipakai bersama beberapa lin, jadi naik yang mana pun tetap sampai. Lin utamanya ditaruh paling depan.
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 APCGKOperator 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.
fromFareStationfarenumberTarif buat segmen ini dalam rupiah. Null kalau tidak bisa dihitung.
FareStation
Stasiun di dalam hasil pencarian tarif.
idstringnamestringFareTransferLeg
Tahap pindah kendaraan, biasanya jalan kaki antar peron atau antar stasiun.
typeTRANSFERfromFareStationdistanceMnumberJarak jalan kaki dalam meter.
farenumberopsionalCuma ada di koridor berbayar. Transfer jalan kaki biasa gratis, jadi tidak punya ini.
corridorLabelstringopsionalNama koridor yang dilewati waktu pindah, kalau ada.
GroupedTimetable
Jadwal satu lin, dikelompokkan tiga tingkat: per arah, lalu per stasiun tujuan, lalu daftar keberangkatannya. Ini bentuk yang dipakai papan keberangkatan.
linestringLin yang punya keberangkatan ini.
timetableobject[]Satu entri per arah keberangkatan.
keystringKey yang stabil buat kelompok arah ini.
labelstring[]Label arahnya, berisi nama stasiun. Gabungkan pakai " / " kalau mau ditampilkan.
platformCodestringInfo peron yang sudah kita kurasi. Null kalau peronnya belum diketahui.
destinationsobject[]Satu entri per stasiun akhir di arah ini.
boundForstringStasiun akhir yang dituju.
viastringTerisi kalau ada dua perjalanan ke stasiun akhir yang sama tapi lewat jalur berbeda.
schedulesSchedule[]Keberangkatan menuju stasiun akhir itu, urut dari yang paling awal.
Hub
Beberapa stasiun yang dianggap satu tempat karena saling terhubung. Pumpunan moda sendiri tidak punya koordinat, yang punya stasiun-stasiun di dalamnya.
idstringslugstringKunci buat URL-nya. Bisa berubah sewaktu-waktu, jadi pakai id kalau butuh yang stabil.
namestringkindhub integratedhub: 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.
heroImagestringFoto 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.
idstringdistanceMnumberJarak jalan kaki dalam meter.
notesstringPetunjuk tambahan buat jalan kakinya. Null kalau tidak ada yang perlu dijelaskan.
dataTypeINTERNALtoStationStationRefLine
Satu lin, dengan kode dan warna yang dipakai di roundel-nya.
namestringlineCodestringcolorCodestringWarna hex buat roundel dan branding lin ini.
searchablebooleanopsionalFalse 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.
operatorOperatorlineLinesegmentsLineSegment[]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 LOOPTRUNK: 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.
joinsAtCodestringKode stasiun tempat cabang ini berpisah dari jalur utama; null buat TRUNK.
stationsLineStation[]LineStation
Satu stasiun di sepanjang lin, urut dari stasiun awal.
idstringcodestringnamestringNama tampilan.
stationNumberstringLabel posisi di sepanjang lin, misalnya C13.
isInterchangebooleanTrue 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 APCGKOperator 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.
namestringOperatorWithLines
Operator beserta seluruh lin yang dijalankannya. Ini yang dikembalikan /operators.
codeKCI MRTJ LRTJ LRTJBDB TJ APCGKOperator 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.
namestringurlstringSitus resmi operatornya. Sama dengan agency_url di GTFS.
timezonestringZona waktu yang dipakai semua jadwal operator ini. Sama dengan agency_timezone di GTFS, dan selalu Asia/Jakarta di sini.
langstringBahasa yang dipakai buat nama stasiun dan lin. Sama dengan agency_lang di GTFS.
modeTransitModelinesLine[]Schedule
Satu keberangkatan: kapan berangkat, menuju ke mana, dan dari peron berapa.
tripNumberstringNomor perjalanan versi operatornya. Null kalau operatornya tidak menerbitkan nomor.
estimatedDeparturestringWaktu lokal, HH:MM:SS.
boundForstringStasiun akhir yang dituju perjalanan ini.
lineCodestringStation
Satu stasiun lengkap dengan fasilitas, koordinat, dan lin yang berhenti di sana.
idstringIdentifier yang stabil, formatnya {operatorCode}-{stationCode}. Pakai ini kalau mau cek tarif.
namestringNama yang ditampilkan ke penumpang.
officialNamestringNama 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.
codestringKode stasiun versi operatornya. Unik di dalam satu operator, tapi belum tentu unik antar operator.
operatorKCI MRTJ LRTJ LRTJBDB TJ APCGKOperator 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 YIAWilayah, dinamai dari kode IATA bandara besar terdekat. CGK: Jabodetabek · BDO: Bandung Raya · YIA: Jogja-Solo.
amenitiesAmenity[]latitudenumberLintang WGS84. Null kalau koordinatnya belum disurvei.
longitudenumberscorenumberSeberapa 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.
searchablebooleanFalse kalau stasiunnya cuma dipakai buat routing dan sengaja disembunyikan dari pencarian. Di response daftar selalu true, karena yang seperti itu sudah difilter duluan.
StationRef
Rujukan ringkas ke sebuah stasiun. Dipakai di tempat yang cuma butuh nama dan kodenya, tanpa detail lengkap.
idstringIdentifier yang stabil, formatnya {operatorCode}-{stationCode}. Pakai ini kalau mau cek tarif.
namestringNama yang ditampilkan ke penumpang.
officialNamestringNama 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.
codestringKode stasiun versi operatornya. Unik di dalam satu operator, tapi belum tentu unik antar operator.
operatorKCI MRTJ LRTJ LRTJBDB TJ APCGKOperator 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).
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