OB
Gateway Bisku OTABus Partner API Docs
Home › OTA Bus

Dokumentasi OTA Bus Partner API

OTA adalah singkatan dari Online Travel Agent. Dokumentasi ini menjelaskan integrasi partner ke layanan OTA Bus Gateway Bisku: mulai dari pencarian titik keberangkatan dan tujuan, pencarian jadwal, pemilihan kursi, pembuatan booking, sampai konfirmasi pembayaran. Swagger tetap tersedia sebagai referensi teknis endpoint.

Category: OTA Bus
Base path: /v1/ota
Auth: X-API-Key
Base URL: https://sandbox.ota.bisku.net

Gambaran Umum

Gateway Bisku OTA menyediakan API untuk partner Online Travel Agent yang membutuhkan pencarian rute, jadwal, ketersediaan kursi, booking tiket, dan konfirmasi pembayaran layanan perjalanan bus.

Pilih rute perjalananPilih titik keberangkatan dan tujuan yang tersedia untuk perjalanan bus.
Cari jadwal dan kursiCari jadwal perjalanan, cek ketersediaan kursi, lalu lanjutkan ke proses pemesanan.
Booking dan pembayaranBuat pesanan tiket dan kirim konfirmasi pembayaran untuk menyelesaikan transaksi.

Mulai Integrasi

  1. Siapkan X-API-Key yang tersedia di dashboard.
  2. Ambil origin melalui GET /v1/ota/points/origins.
  3. Ambil destination berdasarkan origin melalui GET /v1/ota/points/destinations.
  4. Cari jadwal melalui POST /v1/ota/schedule/search.
  5. Lanjutkan proses ke pemilihan kursi, booking tiket, dan konfirmasi pembayaran sesuai kebutuhan transaksi.
Jika membutuhkan spesifikasi teknis lengkap, buka /docs/reference. Untuk testing cepat di Postman, download Postman Collection.

Authentication

Semua endpoint di bawah /v1/ota wajib memakai API key pada header request.

Headers:
  X-API-Key: <partner-api-key>
  Content-Type: application/json

Points

MethodEndpointFungsi
GET/v1/ota/points/originsMenampilkan titik keberangkatan yang tersedia untuk akun API partner.
GET/v1/ota/points/destinationsMenampilkan titik tujuan yang tersedia berdasarkan titik keberangkatan yang dipilih.

Query yang didukung: page, per_page, query, order_by, dan order_mode. Jika pagination tidak dikirim, gateway mengembalikan seluruh data matching.

GET /v1/ota/points/origins?query=senayan&order_by=point_name&order_mode=ASC
GET /v1/ota/points/destinations?origin_point_id=<origin_point_id>

Contoh response points

{
  "data": [
    {
      "point_id": "04daa442-4fe4-45ba-a63f-7eeff417aee7",
      "point_code": "OTA-456A6910",
      "point_name": "MRT Senayan",
      "point_detail": "Jakarta Pusat, DKI Jakarta, Indonesia",
      "point_address": "Senayan Jakarta Selatan",
      "point_lat": "-6.2229",
      "point_lng": "106.8006"
    }
  ],
  "meta": {
    "pagination": false,
    "total": 1
  }
}

Schedule Search

Endpoint schedule mengembalikan daftar jadwal perjalanan dalam format standar Gateway Bisku. Gunakan schedule_id untuk proses seat, booking, dan payment. Field offer_id hanya tersedia untuk kompatibilitas versi lama.

MethodEndpointFungsi
POST/v1/ota/schedule/searchMencari jadwal perjalanan berdasarkan titik keberangkatan, tujuan, dan tanggal perjalanan.
POST /v1/ota/schedule/search
{
  "origin_point_id": "04daa442-4fe4-45ba-a63f-7eeff417aee7",
  "destination_point_id": "ff2cca0f-fb56-4aae-94c5-bc2a6e0ab485",
  "departure_date": "2026-10-15",
  "passenger_count": 1
}

Contoh response schedule

{
  "offers": [
    {
      "schedule_id": "ofr_82ec263ab6dc24263f42df2e",
      "departure_service_date": "2026-10-15",
      "departure_at": "2026-10-15T09:00:00+07:00",
      "origin": { "id": "04daa442-4fe4-45ba-a63f-7eeff417aee7", "name": "MRT Senayan" },
      "destination": { "id": "ff2cca0f-fb56-4aae-94c5-bc2a6e0ab485", "name": "Poris" },
      "price": { "amount": "255000", "currency": "IDR" },
      "attributes": { "traject_id": 818, "bus_id": 5091 }
    }
  ]
}

Seats

MethodEndpointFungsi
POST/v1/ota/seats/searchMengambil peta kursi atau ketersediaan kursi untuk jadwal yang dipilih.
POST /v1/ota/seats/search
{
  "origin_point_id": "04daa442-4fe4-45ba-a63f-7eeff417aee7",
  "destination_point_id": "ff2cca0f-fb56-4aae-94c5-bc2a6e0ab485",
  "schedule_id": "ofr_82ec263ab6dc24263f42df2e",
  "departure_date": "2026-10-15",
  "departure_time": "09:00:00",
  "passenger_count": 1,
  "attributes": { "traject_id": 818, "bus_id": 5091 }
}

Contoh response seats/search

{
  "seats": [
    {
      "seat_number": "1A",
      "seat_label": "1A",
      "available": true,
      "row": 1,
      "column": 1
    },
    {
      "seat_number": "1B",
      "seat_label": "1B",
      "available": true,
      "row": 1,
      "column": 2
    }
  ],
  "meta": {
    "schedule_id": "ofr_82ec263ab6dc24263f42df2e",
    "currency": "IDR"
  }
}

Booking Tiket & Payment

Booking tiket dan payment memakai endpoint terpisah. Booking dipakai untuk membuat pesanan tiket, sedangkan payment dipakai untuk mengirim konfirmasi pembayaran atas pesanan tersebut.

MethodEndpointFungsi
POST/v1/ota/bookingsMembuat booking tiket untuk jadwal dan kursi yang dipilih.
POST/v1/ota/paymentsMengirim konfirmasi pembayaran untuk booking yang sudah dibuat.
POST /v1/ota/bookings
{
  "schedule_id": "ofr_82ec263ab6dc24263f42df2e",
  "origin_point_id": "04daa442-4fe4-45ba-a63f-7eeff417aee7",
  "destination_point_id": "ff2cca0f-fb56-4aae-94c5-bc2a6e0ab485",
  "departure_date": "2026-10-15",
  "departure_time": "09:00:00",
  "seat_numbers": ["1A", "1B"],
  "passengers": [{ "name": "Budi Santoso", "gender": "male", "age": 30, "phone_number": "08123456789", "email": "budi@example.com" }],
  "attributes": { "traject_id": 818 }
}
POST /v1/ota/payments
{
  "booking_reference": "BKG-20261015-0001",
  "payment_reference": "PAY-20261015-0001",
  "amount": 510000,
  "currency": "IDR",
  "paid_at": "2026-10-15T10:15:00+07:00",
  "payment_method": "bank_transfer",
  "attributes": {
    "traject_id": 818
  }
}

Contoh response booking

{
  "booking_reference": "BKG-20261015-0001",
  "status": "booked",
  "expired_at": "2026-10-15T10:30:00+07:00",
  "total_amount": 510000,
  "currency": "IDR",
  "passengers": [
    {
      "name": "Budi Santoso",
      "seat_number": "1A"
    }
  ]
}

Contoh response payment

{
  "payment_reference": "PAY-20261015-0001",
  "booking_reference": "BKG-20261015-0001",
  "status": "paid",
  "paid_at": "2026-10-15T10:15:00+07:00"
}

Attributes Mapping

attributes digunakan untuk membawa data tambahan dari response sebelumnya ketika diperlukan pada request berikutnya, misalnya traject_id, bus_id, atau detail harga. Kirim field ini sesuai kebutuhan endpoint yang digunakan.

Field utamaGunakan field standar seperti schedule_id, departure_date, seat_numbers, dan passengers sesuai contoh request.
Field tambahanGunakan attributes hanya untuk data tambahan yang diterima dari response sebelumnya dan diperlukan pada request berikutnya.
Contoh penggunaan attributes:
{
  "schedule_id": "ofr_82ec263ab6dc24263f42df2e",
  "departure_date": "2026-10-15",
  "attributes": {
    "traject_id": 818,
    "bus_id": 5091
  }
}

Error Handling

StatusCodeArti
400VALIDATION_ERRORRequest body, UUID, atau field wajib tidak valid.
401UNAUTHORIZEDX-API-Key kosong, salah, atau expired.
503SERVICE_UNAVAILABLELayanan sedang tidak tersedia sementara. Silakan coba kembali beberapa saat lagi.
500INTERNAL_ERRORTerjadi kesalahan pada layanan. Silakan coba kembali atau hubungi tim support jika masalah berlanjut.

Contoh response error

{
  "code": "VALIDATION_ERROR",
  "message": "request tidak valid"
}