
Complete guide for the Giligetaway APIs
Note
The Gili Getaway API key can be accessed through the following dashboard: https://giligetaway-widget.my.id/agent/signin
If you need further assistance, contact Giligetaway Team.
/api/agent-access/search-schedule/v3Search for available Giligetaway boat schedules and sub-schedules between two destinations on a given date. Supports filtering by seat availability and requires API key authentication for registered agents.
https://gili-server.my.idAgent ID + API Key
JSON
| Parameter | Type | Required | Description |
|---|---|---|---|
| from | number | Required | Origin port ID. Example: 8 (Serangan, Bali) |
| to | number | Required | Destination port ID. Example: 2 (Gili Trawangan) |
| date | string | Required | Travel date in YYYY-M-D format. Example: 2025-9-1 |
| passengers_total | number | Optional | Number of passengers. Filters schedules with sufficient available seats |
| agent_id | number | Required | Agent identifier. Required for API key validation |
| api_key | string | Required | API key assigned to the agent |
| discount_code | string | Optional | Discount code to apply to net_price calculation |
GET /api/agent-access/search-schedule/v3?from=8&to=2&date=2026-2-9&agent_id=923&api_key=your_api_key&passengers_total=2&discount_code=AGENT10This endpoint requires validation of agent_id and api_key.
{
"success": false,
"message": "Invalid API key"
}{
"status": "success",
"data": {
"schedules": [
{
"id": 108,
"schedule_id": 58,
"subschedule_id": 108,
"from": "Serangan, Bali",
"to": "Gili Trawangan",
"route_image": "https://ik.imagekit.io/...",
"price": 760000,
"seatAvailability": {
"schedule_id": "N/A",
"subschedule_id": "N/A",
"available_seats": 32,
"date": "2/9/2026",
"bookedSeatNumbers": ["C1", "C2"]
},
"boat_name": "Giligetaway 2",
"boat": {
"id": 1,
"name": "Giligetaway 2",
"capacity": 40,
"image": "https://...",
"seat_layout": {
"inside_seats": ["B1", "C1", "D1", ...],
"outside_seats": ["X1", "X2", "X3", "X4"],
"rooftop_seats": ["R1", "R2", "R3", ...]
}
},
"route_timeline": [
{
"type": "departure",
"location": "Serangan, Bali",
"time": "09:00:00",
"action": "Depart from"
},
{
"type": "arrival",
"location": "Gili Trawangan",
"time": "12:00:00",
"action": "Arrive at"
}
],
"route_description": "09:00:00 Serangan, Bali → 12:00:00 Gili Trawangan",
"route_steps": [
{
"step": 1,
"from": "Serangan, Bali",
"departure_time": "09:00:00",
"to": "Gili Trawangan",
"arrival_time": "12:00:00",
"type": "to_destination"
}
],
"route_summary": "Serangan, Bali → Gili Trawangan",
"route_type": "direct",
"stops_count": 2,
"net_price": 549000,
"discount_activated": true
}
],
"passenger_count_requested": 2
}
}| Field | Type | Description |
|---|---|---|
| id | number | Unique identifier (subschedule_id if subschedule, else schedule_id) |
| schedule_id | number | Parent schedule ID |
| subschedule_id | number | "N/A" | Subschedule ID or "N/A" for main schedule |
| route_image | string | URL of route map image |
| price | number | Published price per passenger (IDR) |
| net_price | number | Agent net price per passenger after commission |
| discount_activated | boolean | Whether agent discount is applied to net_price |
| boat_name | string | Name of the boat |
| route_type | string | "direct" or "transit" |
| stops_count | number | Number of stops including departure and arrival |
When you include discount_code in your search request, the API will calculate and return the discounted net_price for each schedule.
{
"id": 108,
"price": 760000,
"net_price": 549000,
"discount_activated": true,
...
}Note: discount_activated: true indicates the discount was successfully applied.
{
"id": 108,
"price": 760000,
"net_price": 610000,
"discount_activated": false,
...
}date parameterdiscount_activated will be false{
"status": "success",
"message": "No schedules available for 2 passengers. All selected schedules are full.",
"data": {
"schedules": [],
"passenger_count_requested": 2,
"seats_availability_issue": true
}
}{
"success": false,
"message": "agent_id and api_key are required"
}capacity depends on the boost flag:
boost = false: use public_capacityboost = true: use full capacitySchedules are filtered by validity_start and validity_end. Schedules with validity_end on the request date are excluded.
bookedSeatNumbers are returned for frontend reference but exclude unnecessary fields like id, availability, and boost for cleaner response.